最近在学习分类算法及Python的相关实现,感觉灰常有趣,在此将所了解的内容归纳,分享一下,整体内容主要包含以下几点:
- 通过seaborn实现数据集不同特征之间的关系以及分布的可视化;
- 通过train_test_split、StratifiedKFold实现不同的训练集/测试集的构建;
- 基于不同方式所构建的训练集/测试集,在K近邻、支持向量机、决策树等分类算法下的识别率差异;
- 通过GridSearchCV实现分类算法参数的最优化组合;
考虑到文章篇幅过长,计划使用四个章节完成介绍,本文为第四章节,主要介绍通过GridSearchCV实现分类算法参数的最优化组合;
数据集背景
首先先简单介绍下数据集,如下:
数据描述
- 数据来源:Index of /ml/machine-learning-databases/iris
- 实例数量:150(三个类各50个)
- 属性数量:4个特征数值属性、一个预测属性,属性信息如下:1. 萼片长度(厘米);2. 萼片宽度(厘米);3.花瓣长度(厘米);4. 花瓣宽度(厘米);5. 类(Iris Setosa——山鸢尾,Iris Versicolour——杂色鸢尾,Iris Virginica——维吉尼亚鸢尾)
- 缺少属性值:None
- 类别分布:3个类别各占33.3%。
数据样例
iris.data文件数据样例,如下:
5.1,3.5,1.4,0.2,Iris-setosa 4.9,3.0,1.4,0.2,Iris-setosa 4.7,3.2,1.3,0.2,Iris-setosa 4.6,3.1,1.5,0.2,Iris-setosa 5.0,3.6,1.4,0.2,Iris-setosa
GridSearchCV
GridSearchCV,它存在的意义就是自动调参,只要把参数输进去,就能给出最优化的结果和参数。但是这个方法适合于小数据集,数据的量级较高时,很难得出结果。数据量比较大的时候可以使用一个快速调优的方法——坐标下降。它其实是一种贪心算法:拿当前对模型影响最大的参数调优,直到最优化;再拿下一个影响最大的参数调优,如此下去,直到所有的参数调整完毕。
主要参数说明
class sklearn.model_selection.GridSearchCV(estimator, param_grid, scoring=None, fit_params=None, n_jobs=1, iid=True, refit=True, cv=None, verbose=0, pre_dispatch=‘2*n_jobs’, error_score=’raise’, return_train_score=’warn’)
- estimator:选择使用的分类器,并且传入除需要确定最佳的参数之外的其他参数。每一个分类器都需要一个scoring参数,或者score方法:estimator=RandomForestClassifier(min_samples_split=100,min_samples_leaf=20,max_depth=8,max_features='sqrt',random_state=10),
- param_grid:需要最优化的参数的取值,值为字典或者列表,例如:param_grid=param_test,param_test = {'n_estimators':range(10,100,10)}。
- n_jobs=1:n_jobs: 并行数,int:个数,-1:跟CPU核数一致, 1:默认值
- cv=None:交叉验证参数,默认None,使用三折交叉验证。指定fold数量,默认为3,也可以是yield训练/测试数据的生成器。
- verbose=0, scoring=None:verbose:日志冗长度,int:冗长度,0:不输出训练过程,1:偶尔输出,>1:对每个子模型都输出。
- pre_dispatch=‘2*n_jobs’:指定总共分发的并行任务数。当n_jobs大于1时,数据将在每个运行点进行复制,这可能导致OOM,而设置pre_dispatch参数,则可以预先划分总共的job数量,使数据最多被复制pre_dispatch次
以随机森林分类算法为例,进行自动调参
结果加载模块
自动调参,注意调参范围每次不要放太多参数,否则运行时间会很长。
使用GridSearchCV进行参数调优后,输出结果如下,其中最佳参数组合的分类识别率为97.5%,高于未进行参数优化时的分类识别率,参数组合为:
Parameters: {'bootstrap': True, 'min_samples_leaf': 5, 'n_estimators': 40, 'criterion': 'gini', 'min_samples_split': 3, 'max_depth': 15}
若对你有所帮助,欢迎大家评论、留言、关注,感谢支持!
关联阅读