web-dev-qa-db-fra.com

Scikit-learn scoring de validation croisée pour la régression

Comment peut-on utiliser cross_val_score pour la régression? La notation par défaut semble être la précision, ce qui n'est pas très significatif pour la régression. Soi-disant, je voudrais utiliser une erreur quadratique moyenne, est-il possible de spécifier que dans cross_val_score?

J'ai essayé les deux suivants mais ne fonctionne pas:

scores = cross_validation.cross_val_score(svr, diabetes.data, diabetes.target, cv=5, scoring='mean_squared_error') 

et

scores = cross_validation.cross_val_score(svr, diabetes.data, diabetes.target, cv=5, scoring=metrics.mean_squared_error)

Le premier génère une liste de nombres négatifs tandis que l'erreur quadratique moyenne doit toujours être non négative. Le second se plaint que:

mean_squared_error() takes exactly 2 arguments (3 given)
24
clwen

Je n'ai pas la réputation de commenter mais je veux fournir ce lien pour vous et/ou les passants où la sortie négative du MSE dans scikit learn est discutée - https://github.com/scikit-learn/ scikit-learn/issues/2439

De plus (pour en faire une vraie réponse), votre première option est correcte dans la mesure où non seulement MSE est la métrique que vous souhaitez utiliser pour comparer les modèles, mais R ^ 2 ne peut pas être calculé en fonction (je pense) du type de valeur croisée que vous utilisent.

Si vous choisissez MSE comme marqueur, il génère une liste d'erreurs dont vous pouvez alors prendre la moyenne, comme ceci:

# Doing linear regression with leave one out cross val

from sklearn import cross_validation, linear_model
import numpy as np

# Including this to remind you that it is necessary to use numpy arrays rather 
# than lists otherwise you will get an error
X_digits = np.array(x)
Y_digits = np.array(y)

loo = cross_validation.LeaveOneOut(len(Y_digits))

regr = linear_model.LinearRegression()

scores = cross_validation.cross_val_score(regr, X_digits, Y_digits, scoring='mean_squared_error', cv=loo,)

# This will print the mean of the list of errors that were output and 
# provide your metric for evaluation
print scores.mean()
35
Sirrah

Le premier est correct. Il produit le négatif du MSE, car il essaie toujours de maximiser le score. Aidez-nous en suggérant une amélioration de la documentation.

9
Andreas Mueller