2013-06-22 22 views
5

爲了方便,我想知道GridSearch的結果,當我使用cross_val_score進行嵌套交叉驗證時。如何使用cross_val_score從GridSearch獲取best_estimator參數?

使用cross_val_score時,會得到一組分數。將擬合的估計量返回或者爲該估算量選擇參數的摘要將是有用的。

我知道你自己可以做到這一點,但只是手動實現交叉驗證,但如果可以與cross_val_score一起完成,它會更方便。

任何方式來做到這一點,或者這是一個功能建議?

回答

6

scikit-learn中的GridSearchCV類已經在內部進行了交叉驗證。您可以傳遞任何CV iterator作爲GridSearchCV的構造方法的參數cv

+0

啊謝謝!這只是令人困惑,因爲在文檔中,嵌套交叉驗證的示例方式是將GridSearchCV對象傳遞給cross_val_score – aleph4

+0

是的,這是評估模型選擇自身的泛化錯誤的方差的好方法。網格搜索是一種元學習算法,在某些情況下會導致過度擬合。 – 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

你知道現在是否有可能獲得網格搜索對象的信息?順便說一句,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