内容概要
如何使用K折交叉验证来搜索最优调节参数
如何让搜索参数的流程更加高效
如何一次性的搜索多个调节参数
- K折交叉验证
交叉验证的过程
选择K的值(一般是10),将数据集分成K等份
使用其中的K-1份数据作为训练数据,另外一份数据作为测试数据,进行模型的训练
使用一种度量测度来衡量模型的预测性能
交叉验证的优点
交叉验证通过降低模型在一次数据分割中性能表现上的方差来保证模型性能的稳定性
交叉验证可以用于选择调节参数、比较模型性能差别、选择特征
交叉验证的缺点
交叉验证带来一定的计算代价,尤其是当数据集很大的时候,导致计算过程会变得很慢
2. 使用GridSearchCV进行高效调参
GridSearchCV根据你给定的模型自动进行交叉验证,通过调节每一个参数来跟踪评分结果,实际上,该过程代替了进行参数搜索时的for循环过程。
from sklearn.datasets import load_iris
from sklearn.neighbors import KNeighborsClassifier
import matplotlib.pyplot as plt
%matplotlib inline
from sklearn.grid_search import GridSearchCV
knn = KNeighborsClassifier(n_neighbors=5)
grid = GridSearchCV(knn, param_grid, cv=10, scoring='accuracy')
grid.fit(X, y)
- 同时对多个参数进行搜索
这里我们使用knn的两个参数,分别是n_neighbors和weights,其中weights参数默认是uniform,该参数将所有数据看成等同的,而另一值是distance,它将近邻的数据赋予更高的权重,而较远的数据赋予较低权重。
# define the parameter values that should be searched
k_range = range(1, 31)
weight_options = ['uniform', 'distance']
In [13]:
# create a parameter grid: map the parameter names to the values that should be searched
param_grid = dict(n_neighbors=k_range, weights=weight_options)
print param_grid
{'n_neighbors': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30], 'weights': ['uniform', 'distance']}
# instantiate and fit the grid
grid = GridSearchCV(knn, param_grid, cv=10, scoring='accuracy')
grid.fit(X, y)
参考资料
https://blog.csdn.net/jasonding1354/article/details/50562522