网格搜索的思想很直观,sklearn
中有封装好的函数供调用。
Python和sklearn的版本信息如下:
参数 | 解释 | |
---|---|---|
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_ 属性则不存在 |
参数 | 解释 | |
---|---|---|
Parameters | cv_results_ |
字典形式,返回网格搜索的结果 |
best_estimator_ |
在验证数据上得分最高的模型,要求refit=True |
|
best_score_ |
float,最佳估计器的cv平均得分 | |
best_params_ |
字典形式,返回最佳参数 | |
best_index_ |
int,不知道什么鬼 | |
scorer_ |
函数或者字典,选择最佳估计器的评价指标函数 | |
n_splits_ |
int,n折交叉验证 |
官方文档上的例子,鸢尾花数据。
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)
## 最佳参数
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_ )
好几个参数的含义还是不清楚,下次看到再改吧。具体算法的调参还要再学习学习。
[1] Sklearn文档
2018-07-16 于南京市建邺区新城科技园