0
点赞
收藏
分享

微信扫一扫

模型调参-网格搜索Python实现


  网格搜索的思想很直观,​​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 于南京市建邺区新城科技园


举报

相关推荐

0 条评论