0
点赞
收藏
分享

微信扫一扫

python机器学习模型选择与调优—交叉验证、超参数搜索-网格搜索

机器学习模型选择与调优

常见方法:

  • 交叉验证(cross validation)
  • 超参数搜索-网格搜索(Grid Search)

1 交叉验证(cross validation)

交叉验证:将拿到的训练数据,分为训练和验证集。交叉验证目的:为了让被评估的模型更加准确可信。以下图为例:将数据分成4份,其中一份作为验证集。然后经过4次(组)的测试,每次都更换不同的验证集。即得到4组模型的结果,取平均值作为最终结果。又称4折交叉验证。实际业务中常使用10折交叉验证。

python机器学习模型选择与调优—交叉验证、超参数搜索-网格搜索_交叉验证

我们在做数据集划分是时候将数据分为训练集和测试集,但是为了让从训练得到模型结果更加准确。做以下处理:

  • 训练集:训练集+验证集
  • 测试集:测试集

2 超参数搜索-网格搜索(Grid Search)

通常情况下,有很多参数是需要手动指定的(如k-近邻算法中的K值),这种叫超参数。但是手动过程繁杂,所以需要对模型预设几种超参数组合,每组超参数都采用交叉验证来进行评估。最后选出最优参数组合建立模型。如:如k-近邻算法中,

  • 选择K=3-->模型1--交叉验证(准确率)
  • 选择K=5-->模型2--交叉验证(准确率)
  • 选择K=7-->模型3--交叉验证(准确率)
  • 选择K=9-->模型4--交叉验证(准确率)
  • ......
  • 最终选定最优模型的过程。

3 python的sklearn模型选择与调优API

网格搜索和交叉验证。对估计器的指定参数值进行详尽搜索。

  • from sklearn.model_selection import GridSearchCV  #导入网格搜索和交叉验证库
  • from sklearn.neighbors import KNeighborsClassifier  #knn算法库举例
  • estimator = KNeighborsClassifier()  #实例化一个估计器(这里用KNN为列)
  • estimator = GridSearchCV(estimator,param_grid=param_dict,cv=n) #网格搜索和交叉验证
  • estimator:估计器对象
  • param_grid:{"n_neighbors":[1,3,5,...]},估计器参数(dic),如knn表示k可能的取值,最终会每个值进行测算,得出最优结果。
  • cv:指定n折交叉验证(常用10)
  • estimator.fit(x_train,y_train) #执行预估器
  • estimator.score(x_test,y_test) #测试集的准确率
  • 结果分析:
  • 最佳参数:estimator.best_params_

  • 最佳结果:estimator.best_score_

  • 最佳估计器:estimator.best_estimator_

  • 交叉验证结果:estimator.cv_results_



python机器学习模型选择与调优—交叉验证、超参数搜索-网格搜索_搜索_02




举报

相关推荐

0 条评论