一网格搜索(寻求参数最优的一种方法)
首先为想要调参的参数设定一组候选值,然后网格搜索会穷举各种参数组合,根据设定的评分机制找到最好的那一组设置。
使用:from sklearn.model_selection import 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:scikit-learn分类器接口。需要评分机制score()或者scoring参数设置;
param_grid:参数名称(字符串)作为键的字典以及用作值的参数设置列表(或这样的字典的列表),可以搜索任何参数设置序列;
scoring:字符串,默认值:无;
方法:
decision_function(X):使用找到的最佳参数在估计器上调用decision_function,X:可索引,长度为n_samples;
fit(X, y=None, groups=None, **fit_params):与所有参数组合运行。
get_params([deep]):获取此分类器的参数。
inverse_transform(Xt)使用找到的最佳参数在分类器上调用inverse_transform。
predict(X)调用使用最佳找到的参数对估计量进行预测,X:可索引,长度为n_samples;
score(X, y=None)返回给定数据上的分数,X: [n_samples,n_features]输入数据,其中n_samples是样本的数量,n_features是要素的数量。y: [n_samples]或[n_samples,n_output],可选,相对于X进行分类或回归; 无无监督学习。
属性:
cv_results_ :将键作为列标题和值作为列的字典,可将其导入到pandas DataFrame中。
best_estimator_ : estimator或dict;由搜索选择的估算器,即在左侧数据上给出最高分数(或者如果指定最小损失)的估算器。 如果refit = False,则不可用。
best_params_ : dict;在保持数据上给出最佳结果的参数设置。对于多度量评估,只有在指定了重新指定的情况下才会出现。
best_score_ : float;best_estimator的平均交叉验证分数,对于多度量评估,只有在指定了重新指定的情况下才会出现。
n_splits:整数,交叉验证拆分的数量(折叠/迭代)。
参考http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html#sklearn.model_selection.GridSearchCV
二交叉验证
数据分类采用交叉验证的方法,K次交叉检验的大致思想是将数据大致分为K个子样本,每次取一个样本作为验证数据,取余下的K-1个样本作为训练数据。
KFold()
StratifiedKFold():k折数据按照百分比划分数据集,更加合理。
from sklearn.model_selection import StratifiedKFold
import numpy as np
X = np.array([[1, 2], [3, 4], [1, 2], [3, 4]])
y = np.array([0, 0, 1, 1])
skf = StratifiedKFold(n_splits=2)
for train_index, test_index in skf.split(X, y):
print("TRAIN:", train_index, "TEST:", test_index)
X_train, X_test = X[train_index], X[test_index]
y_train, y_test = y[train_index], y[test_index]