1、模型选择和评价王秋月中国人民大学信息学院如何选择模型?对一个给定的有监督学习任务,应该选择哪个学习模型?如何选择该模型的最优参数?如何估计训练好的模型在学习样例之外的数据上可能的性能?模型评价(1)训练精度(training accuracy)在整个数据集上训练模型 并在同一个数据集上测试模型,得到模型的预测结果,和真实结果做比较,计算模型的精度 问题:机器学习的目标是期望模型能在学习样例之外的数在学习样例之外的数据上据上有好的表现(面向未来,而不是过去)最大化训练精度,通常会产生过于复杂的模型,从而导致过拟合,模型不能很好地泛化泛化01020Number of Malignant Nodes
2、6040200K=16040201020Number of Malignant Nodes4K=34K值会影响判定边界XYModelTrue Function SamplesXYX5YPolynomial Degree=1Polynomial Degree=4Polynomial Degree=15不同复杂度的模型YModelTrue Function SamplesXYYPolynomial Degree=1Polynomial Degree=4Polynomial Degree=15XPoor at Training Poor at PredictingJust RightXGood at
3、 Training Poor at Predicting6不同模型的泛化能力XYModelTrue Function SamplesXYXYPolynomial Degree=1Polynomial Degree=4Polynomial Degree=15UnderfittingJust RightOverfitting7欠拟合与过拟合欠拟合和过拟合都会导致较大的泛化误差。监督学习中的误差来源Error=Bias2+Variance+Noise 偏差偏差(Bias):模型的期望输出值(即用不同数据集训练出的所有模型输出的平均值)与真实值之间的差异。即学习算法的期望预测与真实结果的偏离程度,刻画
4、了学习算法本身的拟合能力。方差方差(Variance):用不同数据集训练出的模型的输出值之间的差异。即数据的变动所导致的学习性能的变化,刻画了学习算法的稳定性。偏差与方差偏差-方差权衡YModelTrue Function SamplesXYYPolynomial Degree=1Polynomial Degree=4Polynomial Degree=15XHigh Bias Low VarianceJust RightXLow Bias High Variance11偏差-方差权衡模型评价(2)测试精度(testing accuracy)把数据集划分成两个子集:训练集和测试集 在训练集上训
5、练模型 在测试集上测试模型,并计算精度划分训练集和测试集测试数据测试数据14划分训练集和测试集训练数据训练数据训练模型训练数据训练数据评价模型-用模型预测类别标签-和真实值比较-计算误差15测试数据测试数据使用训练集和测试集0.01.02.00.01.02.0 x108x1081.0162.03.04.0 x108x1081.02.03.04.0训练数据训练数据测试数据测试数据使用训练集和测试集0.01.02.00.0 x108x1081.02.03.04.0 x108x1081.02.03.04.0训练数据训练数据测试数据测试数据1.02.0训练模型训练模型17使用训练集和测试集0.01.0
6、2.00.01.02.0 x108x1081.02.03.04.0 x108x1081.02.03.04.0训练数据训练数据测试数据测试数据预测预测18使用训练集和测试集0.00.01.02.0 x108x1081.02.03.04.0 x108x1081.02.03.04.0训练数据训练数据测试数据测试数据1.02.0计算误差计算误差(或精度)(或精度)19使用训练集和测试集20导入划分训练集和测试集的函数:导入划分训练集和测试集的函数:from sklearn.model_selection import train_test_split划分数据集,测试集数据占全集的划分数据集,测试集数据
7、占全集的30%:train,test=train_test_split(data,test_size=0.3)划分训练集和测试集的语法https:/scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html21超越单个测试集:交叉验证验证数据验证数据训练数据训练数据0.01.02.00.01.02.0 x108x1081.02.03.04.0 x108x1081.02.03.04.0训练数据训练数据测试数据测试数据对这个测试集的最优模型对这个测试集的最优模型22超越单个测试集:交
8、叉验证23超越单个测试集:交叉验证验证数据验证数据1训练数据训练数据124验证数据验证数据2训练数据训练数据2超越单个测试集:交叉验证25超越单个测试集:交叉验证验证数据验证数据3训练数据训练数据326超越单个测试集:交叉验证验证数据验证数据4训练数据训练数据427超越单个测试集:交叉验证errorcross validation errortraining error28模型复杂度与误差errorcross validation errortraining error29模型复杂度与误差YModelTrue Function SamplesPolynomial Degree=1errorcr
9、oss validation errortraining error30模型复杂度与误差欠拟合:训练误差和交叉验证误差都很高欠拟合:训练误差和交叉验证误差都很高YPolynomial Degree=15ModelTrue Function Samples31模型复杂度与误差errorcross validation errortraining error过拟合:训练误差低,交叉验证误差高过拟合:训练误差低,交叉验证误差高errorcross validation errortraining errorYPolynomial Degree=4ModelTrue Function Samples3
10、2模型复杂度与误差33导入划分训练集和测试集的函数:导入划分训练集和测试集的函数:from sklearn.model_selection import cross_val_score用一个给定的模型执行交叉验证:用一个给定的模型执行交叉验证:cross_val=cross_val_score(KNN,X_data,y_data,cv=4,scoring=neg_mean_squared_error)交叉验证的语法https:/scikit-learn.org/stable/modules/generated/sklearn.model_selection.cross_val_score.ht
11、ml34导入划分训练集和测试集的函数:导入划分训练集和测试集的函数:from sklearn.model_selection import cross_val_score用一个给定的模型执行交叉验证:用一个给定的模型执行交叉验证:cross_val=cross_val_score(KNN,X_data,y_data,cv=4,scoring=neg_mean_squared_error)交叉验证的语法其他其他CV splitter:LeaveOneOut,ShuffleSplit,StratifiedShuffleSplit http:/scikit-learn.org/stable/modules/cross_validation.htmlcv的可能取值:None,to use the default 3-fold cross validation,integer,to specify the number of folds in a(Stratified)KFold,CV splitter,An iterable yielding(train,test)splits as arrays of indices.Jupyter演示第5章-模型选择.ipynb