我在理解GridSearchCV中cv参数的效果时遇到了问题。我还在使用sklearn 0.18
的Python 2.7使用GridSearchCV调整某些参数时,例如随着越来越多的数据被包含在训练中,我预计得分会增加很多倍。 但是,我发现了相反的行为。任何人都可以向我解释,是否应该这样做?
考虑以下示例
from __future__ import division, print_function
from sklearn import linear_model
from sklearn import preprocessing
from sklearn import model_selection
import numpy as np
# Some example data
X = np.ones((100, 4)) * np.arange(100).reshape((100, 1)) + (np.random.random((100, 4)) * 0.5)
Y = np.ones((100, 1)) * np.arange(100).reshape((100, 1))
scalerx = preprocessing.StandardScaler()
X_ = scalerx.fit_transform(X)
scalerx = preprocessing.StandardScaler()
Y_ = scalerx.fit_transform(Y)
for cv in np.arange(2, 100, 5):
GS = model_selection.GridSearchCV(
cv=cv, estimator=linear_model.Ridge(random_state=0),
param_grid=[{'alpha': [10e-2, 10e-1, 10e0, 10e1, 10e2]}],
)
GS.fit(X_, Y_)
print(cv, GS.best_score_)
这会产生以下输出
2 0.999967723551
7 0.999700831429
12 0.999157506389
17 0.998278596601
22 0.997107931494
27 0.995490243014
32 0.993315835556
37 0.990634277512
42 0.986174197011
47 0.982697293408
52 0.941176694311
57 0.844045003327
62 0.744867073869
67 0.646916948176
72 0.548521372859
77 0.451907425236
82 0.352978995707
87 0.256264849417
92 0.1575027865
97 0.058902807202
最佳分数随着较小的测试样本(较大的折叠次数)而降低。
答案 0 :(得分:0)
所用数据的大小直接影响Y的方差。这很重要,因为sklearn的回归模型使用R平方作为默认分数公式,即。即mean(y_hat - y)/ var(y)。
根据您提供的数据,随着样本数量的增加,方差减小,使得R ^平方值也减小。
“可以比较R2的一种情况是不同的模型 适用于具有相同的未转换响应变量的相同数据集。 然后增加R2与减少样本内MSE(通过等式9)相同。 但是,在这种情况下,您可能只是比较微小企业。“
http://www.stat.cmu.edu/~cshalizi/mreg/15/lectures/10/lecture-10.pdf
中的第17页