web-dev-qa-db-fra.com

Sklearn.metrics.mean_squared_error est-il plus grand, mieux c'est (nié)?

En général, le mean_squared_error est le plus petit, mieux c'est.

Lorsque j'utilise le package de métriques sklearn, il est indiqué dans les pages du document: http://scikit-learn.org/stable/modules/model_evaluation.html

Tous les objets marqueurs suivent la convention voulant que les valeurs de retour plus élevées soient meilleures que les valeurs de retour plus basses. Ainsi, les métriques qui mesurent la distance entre le modèle et les données, telles que metrics.mean_squared_error, sont disponibles sous la forme neg_mean_squared_error qui renvoie la valeur annulée de la métrique.

et  enter image description here

Cependant, si je vais à: http://scikit-learn.org/stable/modules/generated/sklearn.metrics.mean_squared_error.html#sklearn.metrics.mean_squared_error

Il dit que c'est le Mean squared error regression loss, n'a pas dit qu'il est nié.

Et si j’ai regardé le code source et vérifié l’exemple à cet endroit: https://github.com/scikit-learn/scikit-learn/blob/a24c8b46/sklearn/metrics/regression.py#L183 c’est le cas le mean squared error normal, c'est-à-dire le plus petit, mieux c'est.

Je me demande donc si j'ai oublié quelque chose à propos de la partie annulée dans le document. Merci!

3
Edamame

La fonction actuelle "mean_squared_error" ne contient rien sur la partie négative. Mais la fonction implémentée lorsque vous essayez 'neg_mean_squared_error' renverra une version négative de la partition.

Veuillez vérifier le code source pour savoir comment il est défini dans le code source :

neg_mean_squared_error_scorer = make_scorer(mean_squared_error,
                                        greater_is_better=False)

Observez comment param greater_is_better est défini sur False.

Maintenant, tous ces scores/pertes sont utilisés dans diverses autres choses comme cross_val_score, cross_val_predict, GridSearchCV, etc. Par exemple, dans les cas de 'precision_score' ou de 'f1_score', le score le plus élevé est le meilleur, mais en cas de pertes (erreurs), le plus bas Le score est meilleur. Pour les traiter tous les deux de la même manière, il renvoie le négatif.

Donc, cet utilitaire est conçu pour gérer les scores et les pertes de la même manière sans changer le code source pour la perte ou le score spécifique. 

Donc, vous n'avez rien manqué. Vous devez juste vous occuper du scénario dans lequel vous souhaitez utiliser la fonction de perte. Si vous voulez seulement calculer le mean_squared_error, vous pouvez utiliser mean_squared_error uniquement. Mais si vous souhaitez l'utiliser pour ajuster vos modèles, ou cross_validate à l'aide des utilitaires présents dans scikit, utilisez 'neg_mean_squared_error'.

Peut-être ajouter quelques détails à ce sujet et je vais expliquer plus. 

10
Vivek Kumar

C'est une convention pour implémenter votre propre objet scoring [ 1 ]. Et cela doit être positif, car vous pouvez créer une fonction sans perte pour calculer un score positif personnalisé. Cela signifie qu'en utilisant une fonction de perte (pour un objet score), vous obtenez une valeur négative.

La plage d'une fonction de perte est la suivante: (optimum) [0. ... +] (e.g. unequal values between y and y'). Par exemple, vérifiez la formule de l'erreur quadratique moyenne, elle est toujours positive:

 mean squared error

Source de l'image: http://scikit-learn.org/stable/modules/model_evaluation.html#mean-squared-error

0
Darius M.