2016-12-15 2 views
0

私はgrid.best_score_を再計算しようとしています。私は自分のデータで成功なしに得ました... だから私は従来のデータセットを使って試しましたが、それ以上の成功はありません。ここでは、コードは次のとおりです。grid.best_score_(GridSearchCVで取得)のカスタム計算を試してください

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コードを調べる前に尋ねています。

答えて

2

GridSearchCVコンストラクタ内のrefit=Falseがない限り、当選推定子は、fitの末尾にあるデータセット全体で再設定されます。 best_score_は、クロスバリデーションの分割を使用した見積もりの​​平均得点であり、best_estimator_は、すべてのの入札構成の見積もりです。

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を印刷します。

関連する問題