2013-06-22 10 views
5

Desidero conoscere il risultato di GridSearch quando utilizzo la convalida incrociata nidificata con cross_val_score per comodità.Come ottenere i parametri best_estimator da GridSearch usando cross_val_score?

Quando si utilizza cross_val_score, si ottiene un array di punteggi. Sarebbe utile ricevere lo stimatore adattato o un riepilogo dei parametri scelti per lo stimatore.

So che si può fare da soli, ma basta implementare la convalida incrociata manualmente, ma è molto più conveniente se può essere fatto in combinazione con cross_val_score.

Qualsiasi modo per farlo o è una caratteristica da suggerire?

risposta

6

La classe GridSearchCV in scikit-learn esegue già la convalida incrociata internamente. È possibile passare qualsiasi CV iterator come argomento cv del costruttore di GridSearchCV.

+0

Ah grazie! Era solo confuso perché nella documentazione il modo di esempio di fare una validazione incrociata annidata è passare un oggetto GridSearchCV a cross_val_score – aleph4

+0

Sì, questo è un buon modo per valutare la varianza dell'errore di generalizzazione della selezione del modello stesso. La ricerca della griglia è un algoritmo di meta apprendimento che può causare un adattamento eccessivo in alcune situazioni. – ogrisel

1

La risposta alla tua domanda è che è una funzione da suggerire. Sfortunatamente, non è possibile ottenere i parametri migliori dei modelli dotati di validazione incrociata nidificata utilizzando cross_val_score (al momento, scikit 0.14).

Guarda questo esempio:

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_' 

(Si noti inoltre che i punteggi si ottiene da cross_val_score non sono quelli definiti nella scoring, qui l'errore quadratico medio Quello che vedete è la funzione di punteggio del miglior stimatore. Il bug di v0.14 è descritto here.)

+0

sai se ora è possibile ottenere le informazioni sugli oggetti di ricerca della griglia? btw, per ogni piega nella chiamata cross_val_score viene costruito un oggetto griglia diverso. Quindi, non dovrebbe esserci piuttosto un oggetto "cross_val" che contiene le informazioni su ciascun oggetto "griglia" migliore per le pieghe corrispondenti? – Quickbeam2k1

+0

@ Quickbeam2k1 Non ho ancora controllato. Se ci fai sapere qui. GitHub è probabilmente un posto migliore per suggerire cambiamenti per scikit. Non sono sicuro che le persone rilevanti stiano leggendo questo qui. – tobip

+0

grazie per la risposta. Ho cercato un po 'e ho trovato: https://github.com/scikit-learn/scikit-learn/issues/6827 Quindi il suggerimento generale è di costruire una propria implementazione della funzione cross_val_score. Come farlo, potrebbe essere mostrato nella documentazione in futuro – Quickbeam2k1

Problemi correlati