我正在尝试重新计算我在自己的数据上获得的grid.best_score_
,而没有成功...因此,我使用常规数据集尝试了它,但不再成功。这是代码:
from sklearn import datasets
from sklearn import linear_model
from sklearn.cross_validation import ShuffleSplit
from sklearn import grid_search
from sklearn.metrics import r2_score
import numpy as np
lr = linear_model.LinearRegression()
boston = datasets.load_boston()
target = boston.target
param_grid = {'fit_intercept':[False]}
cv = ShuffleSplit(target.size, n_iter=5, test_size=0.30, random_state=0)
grid = grid_search.GridSearchCV(lr, param_grid, cv=cv)
grid.fit(boston.data, target)
# got cv score computed by gridSearchCV :
print grid.best_score_
0.677708680059
# now try a custom computation of cv score
cv_scores = []
for (train, test) in cv:
y_true = target[test]
y_pred = grid.best_estimator_.predict(boston.data[test,:])
cv_scores.append(r2_score(y_true, y_pred))
print np.mean(cv_scores)
0.703865991851
我看不出为什么它是不同的,GridSearchCV
应该使用线性重新分析的得分手,这是R2分数。也许我的代码cv
分数不是用于计算best_score_
的分数...我在这里询问GridSearchCV代码之前要问。
除非GridSearchCV
构造函数中的refit=False
,否则获胜估计器在fit
末尾对整个数据集进行了重新估算。best_score_
是使用交叉验证拆分的估算器的平均得分,而best_estimator_
是获奖配置拟合 all the数据的估计器。
lr2 = linear_model.LinearRegression(fit_intercept=False)
scores2 = [lr2.fit(boston.data[train,:], target[train]).score(boston.data[test,:], target[test])
for train, test in cv]
print np.mean(scores2)
将打印0.67770868005943297
。