あなたの質問に対する答えは、提案する機能です。残念なことに、cross_val_score
(現在は、scikit 0.14)を使用して、ネストされたクロスバリデーションが適用されたモデルの最適なパラメータを取得することはできません。
この例を参照してください:
from sklearn import datasets
from sklearn.linear_model import LinearRegression
from sklearn.grid_search import GridSearchCV
from sklearn.cross_validation import cross_val_score
digits = datasets.load_digits()
X = digits.data
y = digits.target
hyperparams = [{'fit_intercept':[True, False]}]
algo = LinearRegression()
grid = GridSearchCV(algo, hyperparams, cv=5, scoring='mean_squared_error')
# Nested cross validation
cross_val_score(grid, X, y)
grid.best_score_
[Out]:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-4-4c4ac83c58fb> in <module>()
15 # Nested cross validation
16 cross_val_score(grid, X, y)
---> 17 grid.best_score_
AttributeError: 'GridSearchCV' object has no attribute 'best_score_'
(注また、あなたがcross_val_score
から入手スコアがここに平均二乗誤差、scoring
で定義されたものではないことをあなたが見ることは最良の推定のスコア関数です。 v0.14のバグはhereと記載されています。)
ああありがとう!ドキュメントでは、ネストされたクロスバリデーションを実行する方法の例は、GridSearchCVオブジェクトをcross_val_scoreに渡すことです。 – aleph4
はい、これはモデル選択it-selfの一般化エラーの分散を評価する良い方法です。グリッド検索は、いくつかの状況でオーバーフィッティングを引き起こす可能性のあるメタ学習アルゴリズムです。 – ogrisel