《机器学习之模型评估与优化.docx》由会员分享,可在线阅读,更多相关《机器学习之模型评估与优化.docx(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、机器学习之模型评估与优化A类别B类别C类别A类别500B类别060C类别007上述混淆矩阵表示A类别实际有5个样本B类别实际6个样本C类别实际7个样本预测结果中A类5个B类6个C类7个预测结果不准确的混淆矩阵A类别B类别C类别A类别311B类别042C类别007上述混淆矩阵表示A类别实际有5个样本B类别实际6个样本C类别实际7个样本预测结果中A类别3个预测正确B类以及C类各有一个样本错误预测为A类别其他分析类似。根据混淆矩阵查准率主对角线上的值/该值所在列的以及召回率主对角线上的值/该值所在行的以及演示importnumpyasnpimportsklearn.metricsassmimport
2、sklearn.model_selectionasmsimportsklearn.naive_bayesasnbx,y,withopen(D:/python/data/multiple1.txt,r)asf:forlineinf.readlines():datafloat(substr)forsubstrinline.split(,)x.append(data:-1)y.append(data-1)xnp.array(x)ynp.array(y)train_x,test_x,train_y,test_yms.train_test_split(x,y,test_size0.25,random_s
3、tate7)#创立高斯贝叶斯分类器对象modelnb.GaussianNB()#模型训练model.fit(train_x,train_y)pred_test_ymodel.predict(test_x)print(precision:,sm.precision_score(test_y,pred_test_y,averagemacro#计算平均值不考虑样本权重#precision:0.9903846153846154print(recall:,sm.recall_score(test_y,pred_test_y,averagemacro#计算平均值不考虑样本权重#recall:0.99107
4、14285714286print(F1_score:,sm.f1_score(test_y,pred_test_y,averagemacro#F1_score:0.9905525846702318print(nConfusionMatrix:n,sm.confusion_matrix(test_y,pred_test_y)ConfusionMatrix:22000027100025000025训练集以及测试集通常情况下评估一个模型性能好坏将样本划分为两局部一局部专门用于对模型进展训练称为训练集一局部用于对模型进展测试称为测试集。训练集以及测试集一般不存在重叠局部。常用的训练集以及测试集比例有9
5、:1,8:2,7:3等。训练集以及测试集的划分应该尽量保持平衡、随机不能集中于少量类别。穿插验证法什么是穿插验证在样本数量较少的情况下假如将样本划分为训练集、测试集可能导致单个集合样本数量更少这样可以采用穿插验证法训练以及测试模型。执行步骤穿插验证法(crossvalidation)先将数据集划分为k个大小一样/相似、互补相交的子集每一个子集称为一个折叠(fold)每次训练轮流使用其中的一个作为测试集其他作为训练集。由此我们就相当于获得了k组训练集、测试集最终的预测结果为k个测试结果的平均值。实现(sklearn)importnumpyasnpimportsklearn.metricsassm
6、importsklearn.model_selectionasmsimportsklearn.naive_bayesasnbx,y,withopen(D:/python/data/multiple1.txt,r)asf:forlineinf.readlines():datafloat(substr)forsubstrinline.split(,)x.append(data:-1)y.append(data-1)xnp.array(x)ynp.array(y)train_x,test_x,train_y,test_yms.train_test_split(x,y,test_size0.25,ra
7、ndom_state7)#创立高斯贝叶斯分类器对象modelnb.GaussianNB()pwsms.cross_val_score(model,train_x,train_y,cv5,#折叠数量scoringprecision_weighted#查准率print(precision:,pws.mean()#precision:0.996875rwsms.cross_val_score(model,train_x,train_y,cv5,#折叠数量scoringrecall_weighted#召回率print(recall:,rws.mean()#recall:0.99666666666666
8、67f1sms.cross_val_score(model,train_x,train_y,cv5,#折叠数量scoringf1_weighted#召回率print(f1_score:,f1s.mean()#f1_score:0.996662958843159accms.cross_val_score(model,train_x,train_y,cv5,#折叠数量scoringaccuracy#召回率print(accuracy:,acc.mean()#accuracy:0.9966666666666667模型优化验证曲线验证曲线是根据不同的评估参数对模型的优劣进展评估。比方构建随机森林树的数
9、量不同模型预测准确度有何不同importnumpyasnpimportsklearn.preprocessingasspimportsklearn.ensembleasseimportsklearn.model_selectionasmsimportmatplotlib.pyplotaspltraw_samples#保存样本数据withopen(D:pythondatacar.txt,r)asf:forlineinf.readlines():raw_samples.append(line.replace(n,).split(,)datanp.array(raw_samples).transpo
10、se()print(data.shape)encoders#记录标签编码器train_x#编码后的数据#对样本进展标签编码forrowinrange(len(data):encodersp.LabelEncoder()#创立标签编码器encoders.append(encoder)ifrowlen(data)-1:#不是最后一行因此为样本特征coderencoder.fit_transform(datarow)#编码train_x.append(coder)else:#最后一行为样本标签train_yencoder.fit_transform(datarow)train_xnp.array(t
11、rain_x).transpose()train_ynp.array(train_y)print(train_x.shape)print(train_y.shape)#创立随机森林分类器modelse.RandomForestClassifier(max_depth8,#最大树高random_state1)#随机种子n_estimatorsnp.arange(50,550,50)#待验证参数表#调用validation_curve,返回训练集及测试集得分矩阵train_scores,test_scoresms.validation_curve(model,train_x,train_y,n_e
12、stimators,n_estimators,#代预测模型参数cv5train_meantrain_scores.mean(axis1)print(train_mean:n,train_mean)test_meantest_scores.mean(axis1)print(test_mean:n,test_mean)print(-可视化-)plt.figure(validation_curve,facecolorlightgray)plt.title(validation_curve,fontsize16)plt.xlabel(n_estimators,fontsize16)plt.ylabel
13、(f1_score,fontsize16)plt.tick_params(labelsize10)plt.grid(linestyle:)plt.plot(n_estimators,test_mean,o-,cblue,labelTesting)plt.legend()plt.show()学习曲线学习曲线是用来评估不同大小下训练集下模型的优劣程度假如预测结果随着训练集样本的增大变化不大那么讲明增加样本数量不会对模型产生明显优化作用。超参数优化超参数是在开场学习之前设置的参数并不需要通过训练得到的参数数据。超参数的设置只要依赖于经历、实验或者经过比拟的优选值。比方以下超参数学习率决策树模型树的最
14、大深度随机森林模型树的数量穿插验证中折叠的数量训练集/测试集的比例超参数选择主要有随机搜索、网格搜索等方法网格搜索网格搜索f啊指将主要参数和这些参数的主要取值通过穷举法产生不同组合计算并比拟预测结以此寻找这些参数的最有组合网格搜索法演示importnumpyasnpimportsklearn.model_selectionasmsimportsklearn.svmassvmimportsklearn.metricsassmimportmatplotlib.pyplotaspltx,y,withopen(D:/python/data/multiple2.txt,r)asf:forlineinf.
15、readlines():datafloat(substr)forsubstrinline.split(,)x.append(data:-1)y.append(data-1)xnp.array(x)ynp.array(y)#确定网格搜索字典paramskernel:linear,C:1,10,100,1000kernel:poly,C:1,degree:2,3kernel:rbf,C:1,10,100,1000,gamma:1,0.1,0.01,0.001#创立网格搜索对象modelms.GridSearchCV(svm.SVC(probabilityTrue),#启用概率估计params,cv
16、5model.fit(x,y)print(best_score_,model.best_score_)print(best_params_,model.best_params_)l,r,hx:,0.min()-1,x:,0.max()1,0.005b,u,vx:,1.min()-1,x:,1.max()1,0.005grid_xnp.meshgrid(np.arange(l,r,h),np.arange(b,u,v)flat_xnp.c_grid_x0.ravel(),grid_x1.ravel()pred_flat_ymodel.predict(flat_x)pred_flat_ypred_
17、flat_y.reshape(grid_x0.shape)plt.figure(GridSearch,facecolorlightgray)plt.title(GridSearb,fontsize18)plt.xlabel(x,fontsize12)plt.ylabel(y,fontsize12)plt.tick_params(labelsize10)plt.pcolormesh(grid_x0,grid_x1,pred_flat_y,cmapgray)C0,C1y0,y1plt.scatter(xC0:,0,xC0:,1,cred,s60)plt.scatter(xC1:,0,xC1:,1,cblue,s60)plt.show()随机搜索随机搜索的思想于网络搜索比拟相似只是不再测试上界与下界之间的所有值而是在搜索范围内随机选取样本点。理论根据是假如样本足够大那么通过随机采样的方法可以以大概率找到全局最优参数或近似最优参数。因为是随机采样所以速度较网格搜索(穷举法)更快然而搜索结果没有方法保证即无法保证一定会找到最优参数组合。