机器学习模型选择与调优
常见方法:
- 交叉验证(cross validation)
- 超参数搜索-网格搜索(Grid Search)
1 交叉验证(cross validation)
交叉验证:将拿到的训练数据,分为训练和验证集。交叉验证目的:为了让被评估的模型更加准确可信。以下图为例:将数据分成4份,其中一份作为验证集。然后经过4次(组)的测试,每次都更换不同的验证集。即得到4组模型的结果,取平均值作为最终结果。又称4折交叉验证。实际业务中常使用10折交叉验证。
我们在做数据集划分是时候将数据分为训练集和测试集,但是为了让从训练得到模型结果更加准确。做以下处理:
- 训练集:训练集+验证集
- 测试集:测试集
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_