模型调参-网格搜索Sklearn应用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wendaomudong_l2d4/article/details/81069814

  网格搜索的思想很直观,sklearn中有封装好的函数供调用。

1. 版本信息

Python和sklearn的版本信息如下:
1. Python版本 3.6.3 Anaconda
2. Sklearn版本 0.19.1

2. 参数

2.1 输入参数

参数 解释
Parameters estimator 估计器,也就是slearn提供的预测模型
param_grid 待调整参数,字典形式,key为参数名,value是值的范围,一般为list
scoring 模型评估指标,如’roc_auc’,’f1’,’accuracy’等等,具体看文档
fit_params 貌似是估计器的其他固定参数,新版本已经不用
n_jobs int类型,默认1,并行运算的进程数,-1的时候全部计算,速度更快
pre_dispatch int/string类型,管理调度并行计算的参数,这个参数越小,消耗的计算资源就越少
该参数有一下几个取值
1.None 并行计算立即执行,不进行调度
2.int 给出生成总进程的数量
3.string 类似于2*n_jobs这样的表达式
一般似乎不调整,如果数据巨大需要考虑
iid boolean, default=True,默认数据独立同分布,此时最小损失是每个样本的损失和,而不是每个fold的平均损失
cv int, 默认3折交叉验证
refit boolean, or string, default=True, 是否用找到的最佳参数,重新拟合模型
verbose integer, 控制信息输出,貌似没啥子用
error_score ‘raise’ (default) or numeric, 好像是refit时候出现error,会抛出,numeric则抛warning
return_train_score boolean, default=True,如果False,cv_results_属性则不存在

2.2 属性输出

参数 解释
Parameters cv_results_ 字典形式,返回网格搜索的结果
best_estimator_ 在验证数据上得分最高的模型,要求refit=True
best_score_ float,最佳估计器的cv平均得分
best_params_ 字典形式,返回最佳参数
best_index_ int,不知道什么鬼
scorer_ 函数或者字典,选择最佳估计器的评价指标函数
n_splits_ int,n折交叉验证

3. 案例

  官方文档上的例子,鸢尾花数据。

3.1 网格搜索过程

from sklearn import svm, datasets
from sklearn.model_selection import GridSearchCV
iris = datasets.load_iris()
parameters = {'kernel':('linear', 'rbf'), 'C':[1, 10]}
svc = svm.SVC()
clf = GridSearchCV(svc, parameters)
clf.fit(iris.data, iris.target)
GridSearchCV(cv=None, error_score='raise',
       estimator=SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,
  decision_function_shape='ovr', degree=3, gamma='auto', kernel='rbf',
  max_iter=-1, probability=False, random_state=None, shrinking=True,
  tol=0.001, verbose=False),
       fit_params=None, iid=True, n_jobs=1,
       param_grid={'kernel': ('linear', 'rbf'), 'C': [1, 10]},
       pre_dispatch='2*n_jobs', refit=True, return_train_score='warn',
       scoring=None, verbose=0)

3.2 网格搜索结果

## 最佳参数
clf.best_params_
{'C': 1, 'kernel': 'linear'}
## 最佳估计器
clf.best_estimator_
SVC(C=1, cache_size=200, class_weight=None, coef0=0.0,
  decision_function_shape='ovr', degree=3, gamma='auto', kernel='linear',
  max_iter=-1, probability=False, random_state=None, shrinking=True,
  tol=0.001, verbose=False)
import pandas as pd
pd.DataFrame(clf.cv_results_ )

4. 总结

  好几个参数的含义还是不清楚,下次看到再改吧。具体算法的调参还要再学习学习。

5.Ref

[1] Sklearn文档

                          2018-07-16 于南京市建邺区新城科技园

猜你喜欢

转载自blog.csdn.net/wendaomudong_l2d4/article/details/81069814