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.)
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
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