Je sais que je pourrais implémenter une fonction d'erreur quadratique moyenne comme celle-ci:
def rmse(predictions, targets):
return np.sqrt(((predictions - targets) ** 2).mean())
Qu'est-ce que je recherche si cette fonction rmse est implémentée dans une bibliothèque quelque part, peut-être dans scipy ou scikit-learn?
python
scikit-learn
scipy
siamii
la source
la source
.sum()
au lieu de d'.mean()
abord par erreur. De plus, je suppose que cette fonction est tellement utilisée que je ne vois aucune raison pour laquelle elle ne devrait pas être disponible en tant que fonction de bibliothèque.predictions
ettargets
sont par exemple de type,int16
le carré pourrait déborder (donnant des nombres négatifs). Donc, vous pourriez avoir besoin d'un.astype('int')
ou.astype('double')
avant d'utiliser le carré, commenp.sqrt(((predictions - targets).astype('double') ** 2).mean())
.Réponses:
sklearn.metrics
a unemean_squared_error
fonction. Le RMSE n'est que la racine carrée de tout ce qu'il renvoie.la source
mean_squared_error
insklearn.metrics
prend désormais en charge le paramètre supplémentaire:squared
- "Si True renvoie la valeur MSE, si False renvoie la valeur RMSE."Qu'est-ce que RMSE? Aussi connu sous le nom de MSE, RMD ou RMS. Quel problème résout-il?
Si vous comprenez RMSE: (erreur quadratique moyenne), MSE: (erreur quadratique moyenne) RMD (écart quadratique moyen) et RMS: (moyenne quadratique quadratique), alors demander une bibliothèque pour calculer cela pour vous est inutile sur-ingénierie . Toutes ces métriques sont une seule ligne de code python d'au plus 2 pouces de long. Les trois métriques rmse, mse, rmd et rms sont fondamentalement identiques sur le plan conceptuel.
RMSE répond à la question: « Comment similaires, en moyenne, sont les nombres
list1
àlist2
? ». Les deux listes doivent être de la même taille. Je veux "effacer le bruit entre deux éléments donnés, effacer la taille des données collectées et avoir une impression de nombre unique pour le changement au fil du temps".Intuition et ELI5 pour RMSE:
Imaginez que vous apprenez à lancer des fléchettes sur un jeu de fléchettes. Chaque jour, vous pratiquez pendant une heure. Vous voulez savoir si vous vous améliorez ou si vous empirez. Ainsi, chaque jour, vous effectuez 10 lancers et mesurez la distance entre la cible et l'endroit où votre fléchette a frappé.
Vous faites une liste de ces chiffres
list1
. Utilisez l'erreur quadratique moyenne entre les distances au jour 1 et alist2
contenant tous les zéros. Faites de même le 2ème et le nième jour. Ce que vous obtiendrez est un chiffre unique qui, espérons-le, diminuera avec le temps. Lorsque votre numéro RMSE est égal à zéro, vous touchez à chaque fois des bullsey. Si le nombre RMSE augmente, vous vous empirez.Exemple de calcul de l'erreur quadratique moyenne racine en python:
Quelles impressions:
La notation mathématique:
Légende des glyphes:
n
est un entier positif représentant le nombre de lancers.i
représente un compteur entier positif qui énumère la somme.d
représente les distances idéales, lelist2
contenant tous les zéros dans l'exemple ci-dessus.p
représente la performance,list1
dans l'exemple ci-dessus. exposant 2 signifie numérique au carré. d i est le ième indice ded
. p i est le i'ième indice dep
.Le rmse fait par petites étapes pour qu'il puisse être compris:
Comment fonctionne chaque étape de RMSE:
Soustraire un nombre d'un autre vous donne la distance qui les sépare.
Si vous multipliez un nombre par lui-même, le résultat est toujours positif car le nombre négatif multiplié par le négatif est positif:
Ajoutez-les tous, mais attendez, alors un tableau avec de nombreux éléments aurait une erreur plus grande qu'un petit tableau, alors faites la moyenne par le nombre d'éléments.
Mais attendez, nous les avons tous mis au carré plus tôt pour les forcer à être positifs. Annulez les dégâts avec une racine carrée!
Cela vous laisse un nombre unique qui représente, en moyenne, la distance entre chaque valeur de list1 et sa valeur d'élément correspondante de list2.
Si la valeur RMSE diminue avec le temps, nous sommes satisfaits car la variance diminue.
RMSE n'est pas la stratégie d'ajustement de ligne la plus précise, le total des moindres carrés est:
L'erreur quadratique moyenne mesure la distance verticale entre le point et la ligne, donc si vos données ont la forme d'une banane, plates près du bas et raides près du sommet, alors le RMSE rapportera des distances plus grandes aux points hauts, mais des distances courtes à points bas alors qu'en fait les distances sont équivalentes. Cela provoque un biais où la ligne préfère être plus proche des points hauts que bas.
S'il s'agit d'un problème, la méthode des moindres carrés du total corrige ceci: https://mubaris.com/posts/linear-regression
Gotchas qui peuvent casser cette fonction RMSE:
S'il y a des valeurs nulles ou infinies dans l'une ou l'autre des listes d'entrée, la valeur rmse de sortie n'aura pas de sens. Il existe trois stratégies pour gérer les valeurs nulles / les valeurs manquantes / les infinis dans l'une ou l'autre des listes: ignorer ce composant, le remettre à zéro ou ajouter une meilleure estimation ou un bruit aléatoire uniforme à tous les pas de temps. Chaque remède a ses avantages et ses inconvénients en fonction de la signification de vos données. En général, il est préférable d'ignorer tout composant avec une valeur manquante, mais cela biaise le RMSE vers zéro, ce qui vous fait penser que les performances se sont améliorées alors qu'elles ne l'ont pas vraiment été. L'ajout d'un bruit aléatoire sur une meilleure estimation pourrait être préférable s'il y a beaucoup de valeurs manquantes.
Afin de garantir l'exactitude relative de la sortie RMSE, vous devez éliminer toutes les valeurs nulles / infinies de l'entrée.
RMSE a une tolérance zéro pour les points de données aberrants qui n'appartiennent pas
Les carrés d'erreur quadratique moyenne reposent sur le fait que toutes les données sont exactes et toutes sont comptées comme égales. Cela signifie qu'un point errant qui se trouve dans le champ gauche va totalement ruiner tout le calcul. Pour gérer les points de données aberrants et ignorer leur énorme influence après un certain seuil, consultez Estimateurs robustes qui intègrent un seuil de rejet des valeurs aberrantes.
la source
C'est probablement plus rapide?:
la source
Dans scikit-learn 0.22.0, vous pouvez passer
mean_squared_error()
l'argumentsquared=False
pour renvoyer le RMSE.la source
Juste au cas où quelqu'un trouverait ce fil en 2019, il existe une bibliothèque appelée
ml_metrics
qui est disponible sans pré-installation dans les noyaux de Kaggle, assez allégée et accessible viapypi
(elle peut être installée facilement et rapidement avecpip install ml_metrics
):Il a quelques autres métriques intéressantes qui ne sont pas disponibles dans
sklearn
, commemapk
.Références:
la source
En fait, j'ai écrit un tas de ceux-ci en tant que fonctions utilitaires pour statsmodels
http://statsmodels.sourceforge.net/devel/tools.html#measure-for-fit-performance-eval-measures
et http://statsmodels.sourceforge.net/devel/generated/statsmodels.tools.eval_measures.rmse.html#statsmodels.tools.eval_measures.rmse
Surtout un ou deux liners et peu de vérification d'entrée, et principalement destiné à obtenir facilement des statistiques lors de la comparaison de tableaux. Mais ils ont des tests unitaires pour les arguments de l'axe, car c'est là que je fais parfois des erreurs bâclées.
la source
Ou simplement en utilisant uniquement les fonctions NumPy:
Où:
Notez qu'en
rmse(y, y_pred)==rmse(y_pred, y)
raison de la fonction carrée.la source
Vous ne pouvez pas trouver la fonction RMSE directement dans SKLearn. Mais, au lieu de faire manuellement sqrt, il existe un autre moyen standard d'utiliser sklearn. Apparemment, mean_squared_error de Sklearn contient lui-même un paramètre appelé "squared" avec la valeur par défaut true. Si nous le définissons sur false, la même fonction retournera RMSE au lieu de MSE.
la source
Voici un exemple de code qui calcule le RMSE entre deux formats de fichier de polygone
PLY
. Il utilise à la fois laml_metrics
lib et lenp.linalg.norm
:la source
https://scikit-learn.org/stable/modules/generated/sklearn.metrics.mean_squared_error.html
mean_squared_error (y_true, y_pred)
Ainsi, le code final serait quelque chose comme:
depuis sklearn.metrics importation mean_squared_error depuis importation mathématique sqrt
RMSD = sqrt (mean_squared_error (testing_y, prediction))
imprimer (RMSD)
la source