2013-06-22 50 views
5

便宜のためにcross_val_scoreをネストしたクロスバリデーションを使用しているときに、GridSearchの結果を知りたいと思います。cross_val_scoreを使用してGridSearchからbest_estimatorパラメータを取得するにはどうすればよいですか?

cross_val_scoreを使用すると、スコアの配列が得られます。フィッティングされたエスティメータを、そのエスティメータのために選択されたパラメータの概要または要約を受け取ることは有用であろう。

あなた自身がこれを行うことができますが、クロスバリデーションを手動で実装することができますが、cross_val_scoreと併用することができればさらに便利です。

これを行うにはどのような方法がありますか、これは示唆する機能ですか?

答えて

6

scikit-learnのGridSearchCVクラスはすでに内部検証を行っています。任意のCV iteratorGridSearchCVのコンストラクタのcv引数として渡すことができます。

+0

ああありがとう!ドキュメントでは、ネストされたクロスバリデーションを実行する方法の例は、GridSearchCVオブジェクトをcross_val_scoreに渡すことです。 – aleph4

+0

はい、これはモデル選択it-selfの一般化エラーの分散を評価する良い方法です。グリッド検索は、いくつかの状況でオーバーフィッティングを引き起こす可能性のあるメタ学習アルゴリズムです。 – ogrisel

1

あなたの質問に対する答えは、提案する機能です。残念なことに、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と記載されています。)

+0

グリッド検索オブジェクトの情報を取得できるようになったのかどうかは分かりますか? btw、cross_val_score呼び出しの各折りたたみに対して異なる格子オブジェクトが構築されます。ですから、対応する折り目のための最良の「グリッド」オブジェクトに関する情報を含む「cross_val」オブジェクトではないでしょうか? – Quickbeam2k1

+0

@ Quickbeam2k1まだチェックしていません。あなたが私たちにここで知っていれば。おそらくGitHubはscikitの変更を提案する良い場所です。関連する人々がここでこれを読んでいるかどうかはわかりません。 – tobip

+0

お返事ありがとうございます。私はちょっと調べて見つけました:https://github.com/scikit-learn/scikit-learn/issues/6827一般的な提案は、cross_val_score関数の独自の実装を構築することです。それを行う方法は、将来ドキュメントに表示される可能性があります – Quickbeam2k1

関連する問題