[PYTHON] J'ai essayé d'organiser les index d'évaluation utilisés en machine learning (modèle de régression)

introduction

Cette fois, j'ai essayé d'organiser l'indice d'évaluation (modèle de régression) du machine learning. Nous avons également résumé les points lors de l'utilisation de chaque indice d'évaluation.

1. Coefficient de décision

Le facteur de décision $ R ^ 2 $ évalue l'ajustement du modèle de régression estimé. La formule est la suivante.

\begin{eqnarray}
R^2 = 1 - \sum \frac{(y_i - \hat{y_i})^2}{(y_i - \bar{y})^2}
\end{eqnarray}

$ y_i $: valeur mesurée de $ i $ e échantillon $ \ hat {y_i} $: valeur prédite de $ i $ e échantillon $ \ bar {y} $: moyenne des valeurs mesurées

article Aperçu
Critère d'évaluation ・ Plus il est proche de 1, meilleure est la valeur
Interprétation ・ Évaluer la qualité de l'ajustement du modèle de régression
Caractéristique ・ Lorsque le nombre de variables explicatives augmente, il s'approche de 1.
・ Le modèle non linéaire ne peut pas être évalué

Le code python est ci-dessous.

#Bibliothèque pour le calcul des scores
from sklearn.metrics import r2_score

#true est la valeur vraie (valeur mesurée), pred est la valeur prédite
true = [1.0, 1.5, 2.0, 1.2, 1.8]
pred = [0.8, 1.5, 1.8, 1.3, 2.0]

#Calculer la valeur du coefficient de décision R2
r2_score(true, pred)
  1. MAE MAE (Mean Absolute Error) évalue l'ampleur de l'erreur de la valeur prédite. La formule est la suivante.
\begin{eqnarray}
MAE = \frac{1}{N} \sum|y_i - \hat{y_i}|
\end{eqnarray}

$ y_i $: valeur mesurée de $ i $ e échantillon $ \ hat {y_i} $: valeur prédite de $ i $ e échantillon $ N $: Nombre d'échantillons

article Aperçu
Critère d'évaluation ・ Plus la valeur est proche de 0, meilleure est la valeur
Interprétation ・ L'amplitude de l'écart moyen (erreur) entre la valeur prédite et la valeur mesurée
Caractéristique ・ Nous n'attachons pas beaucoup d'importance aux cas qui sont en grande partie hors de la prévision.
・ Si un bon modèle est sélectionné sur la base de MAE, l'erreur maximale a tendance à augmenter.

Le code python est ci-dessous.

#Bibliothèque pour le calcul des scores
from sklearn.metrics import mean_absolute_error

#true est la valeur vraie (valeur mesurée), pred est la valeur prédite
true = [1.0, 1.5, 2.0, 1.2, 1.8]
pred = [0.8, 1.5, 1.8, 1.3, 2.0]

#Calculer la valeur de MAE
mean_absolute_error(true, pred)
  1. MSE Dans MSE (Mean Squared Error), les grandes erreurs sont soulignées et évaluées. La formule est la suivante.
\begin{eqnarray}
MSE = \frac{1}{N} \sum(y_i - \hat{y_i})^2
\end{eqnarray}

$ y_i $: valeur mesurée de $ i $ e échantillon $ \ hat {y_i} $: valeur prédite de $ i $ e échantillon $ N $: Nombre d'échantillons

article Aperçu
Critère d'évaluation ・ Plus la valeur est proche de 0, meilleure est la valeur
Interprétation ・予測値と実測値のズレの大きさとInterprétationできる
・ Similaire à MAE, mais différent de l'erreur moyenne réelle comme MAE
Caractéristique ・ L'accent est mis sur les cas qui sont largement hors prédiction
・ MSE a tendance à augmenter considérablement si la prévision est largement manquée.

Le code python est ci-dessous.

#Bibliothèque pour le calcul des scores
from sklearn.metrics import mean_squared_error

#true est la valeur vraie (valeur mesurée), pred est la valeur prédite
true = [1.0, 1.5, 2.0, 1.2, 1.8]
pred = [0.8, 1.5, 1.8, 1.3, 2.0]

#Calculer la valeur de MSE
mean_squared_error(true, pred)
  1. RMSE Dans RMSE (Root Mean Squared Error), les grandes erreurs sont soulignées et évaluées. La formule est la suivante.
\begin{eqnarray}
RMSE = \sqrt{\frac{1}{N} \sum(y_i - \hat{y_i})^2}
\end{eqnarray}

$ y_i $: valeur mesurée de $ i $ e échantillon $ \ hat {y_i} $: valeur prédite de $ i $ e échantillon $ N $: Nombre d'échantillons

article Aperçu
Critère d'évaluation ・ Plus la valeur est proche de 0, meilleure est la valeur
Interprétation ・予測値と実測値のズレの大きさとInterprétationできる
・ Similaire à MAE, mais différent de l'erreur moyenne réelle comme MAE
Caractéristique ・ L'accent est mis sur les cas qui sont largement hors prédiction
・ Si la prévision est largement ratée, le RMSE a tendance à augmenter considérablement.

Le code python est ci-dessous.

#Bibliothèque pour le calcul des scores
import numpy as np
from sklearn.metrics import mean_squared_error

#true est la valeur vraie (valeur mesurée), pred est la valeur prédite
true = [1.0, 1.5, 2.0, 1.2, 1.8]
pred = [0.8, 1.5, 1.8, 1.3, 2.0]

#Calculer la valeur RMSE
np.sqrt(mean_squared_error(true, pred))
  1. MAPE MAPE (Mean Absolute Percentage Error) évalue l'amplitude de l'erreur de prédiction par amplitude de la valeur mesurée. La formule est la suivante.
\begin{eqnarray}
MAPE = \frac{1}{N} \sum|\frac{y_i - \hat{y_i}}{y_i}|
\end{eqnarray}

$ y_i $: valeur mesurée de $ i $ e échantillon $ \ hat {y_i} $: valeur prédite de $ i $ e échantillon $ N $: Nombre d'échantillons

article Aperçu
Critère d'évaluation ・ Plus la valeur est proche de 0, meilleure est la valeur
Interprétation ・ Rapport entre l'écart moyen (erreur) de la valeur prédite et la taille de la valeur mesurée
Caractéristique ・ L'accent est mis sur la taille du rapport entre l'erreur de prédiction et la valeur mesurée.
・ Ne peut pas être utilisé dans les cas où la valeur mesurée est 0

Le code python est ci-dessous.

#Bibliothèque pour le calcul des scores
import numpy as np

#true est la valeur vraie (valeur mesurée), pred est la valeur prédite
true = np.array([1.0, 1.5, 2.0, 1.2, 1.8])
pred = np.array([0.8, 1.5, 1.8, 1.3, 2.0])

#Calculez la valeur de MAPE
np.mean(np.abs((true - pred) / true)) * 100
  1. SMAPE SMAPE (Symmetric Mean Absolute Percentage Error) évalue l'ampleur de l'erreur de prédiction par valeur mesurée. La formule est la suivante.
\begin{eqnarray}
SMAPE = \frac{100}{N} \sum|\frac{2(y_i - \hat{y_i})}{(|y_i|+|\hat{y_i}|)}|
\end{eqnarray}

$ y_i $: valeur mesurée de $ i $ e échantillon $ \ hat {y_i} $: valeur prédite de $ i $ e échantillon $ N $: Nombre d'échantillons

article Aperçu
Critère d'évaluation ・ Plus la valeur est proche de 0, meilleure est la valeur
Interprétation ・ Rapport entre l'écart moyen (erreur) de la valeur prédite et la taille de la valeur mesurée
Caractéristique ・ L'accent est mis sur la taille du rapport entre l'erreur de prédiction et la valeur mesurée.
・ Contrairement à MAPE, il peut être utilisé même lorsque la valeur mesurée est 0.

Le code python est ci-dessous.

#Bibliothèque pour le calcul des scores
import numpy as np

#true est la valeur vraie (valeur mesurée), pred est la valeur prédite
true = np.array([1.0, 1.5, 2.0, 1.2, 1.8])
pred = np.array([0.8, 1.5, 1.8, 1.3, 2.0])

#Calculer la valeur SMAPE
100/len(true) * np.sum(2 * np.abs(pred - true) / (np.abs(pred) + np.abs(true)))

Résumé du script

Organisez le script jusqu'à présent.

#Bibliothèque pour le calcul des scores
import numpy as np
import pandas as pd
from sklearn.metrics import r2_score
from sklearn.metrics import mean_absolute_error
from sklearn.metrics import mean_squared_error

def calculate_scores(true, pred):
    """Calculer toutes les métriques

    Parameters
    ----------
    true : np.array
La valeur de mesure
    pred : np.array
Valeur prédite

    Returns
    -------
    scores : pd.DataFrame
Résultats de la synthèse de chaque indice d'évaluation
    """
    scores = pd.DataFrame({'R2': r2_score(true, pred),
                          'MAE': mean_absolute_error(true, pred),
                          'MSE': mean_squared_error(true, pred),
                          'RMSE': np.sqrt(mean_squared_error(true, pred)),
                          'MAPE': mape(true, pred),
                          'SMAPE': smape(true, pred)},
                          index = ['scores'])
    return scores

def mape(true, pred):  
    """Calculer MAPE

    Parameters
    ----------
    true : np.array
La valeur de mesure
    pred : np.array
Valeur prédite

    Returns
    -------
    np.array :résultat du calcul de mape
    """
    return np.mean(np.abs((true - pred) / true)) * 100

#Calcul SMAPE
def smape(true, pred):
    """Calculer SMAPE

    Parameters
    ----------
    true : np.array
La valeur de mesure
    pred : np.array
Valeur prédite

    Returns
    -------
    np.array :Calcul de smape
    """
    return 100/len(true) * np.sum(2 * np.abs(pred - true) / (np.abs(pred) + np.abs(true)))

def main():
    true = np.array([1.0, 1.5, 2.0, 1.2, 1.8])
    pred = np.array([0.8, 1.5, 1.8, 1.3, 2.0])

    scores = calculate_scores(true, pred)

    print(scores)

if __name__ == "__main__":
    main()
R2 MAE MSE RMSE MAPE SMAPE
scores 0.808824 0.14 0.026 0.161245 9.888889 10.254971

enfin

Merci d'avoir lu jusqu'au bout. Si vous avez une demande de correction, nous vous serions reconnaissants de bien vouloir nous contacter.

Recommended Posts

J'ai essayé d'organiser les index d'évaluation utilisés en machine learning (modèle de régression)
J'ai essayé de visualiser le modèle avec la bibliothèque d'apprentissage automatique low-code "PyCaret"
J'ai essayé de compresser l'image en utilisant l'apprentissage automatique
J'ai essayé de prédire l'évolution de la quantité de neige pendant 2 ans par apprentissage automatique
Essayez d'évaluer les performances du modèle d'apprentissage automatique / de régression
J'ai essayé de résumer le code souvent utilisé dans Pandas
J'ai essayé de résumer les commandes souvent utilisées en entreprise
[Apprentissage automatique] J'ai essayé de résumer la théorie d'Adaboost
J'ai essayé d'appeler l'API de prédiction du modèle d'apprentissage automatique de WordPress
J'ai essayé de classer les accords de guitare en temps réel en utilisant l'apprentissage automatique
(Apprentissage automatique) J'ai essayé de comprendre attentivement la régression linéaire bayésienne avec l'implémentation
J'ai implémenté le modèle VGG16 avec Keras et essayé d'identifier CIFAR10
J'ai essayé de former le modèle RWA (Recurrent Weighted Average) dans Keras
J'ai essayé d'implémenter TOPIC MODEL en Python
Résumé des fonctions d'évaluation utilisées dans l'apprentissage automatique
(Apprentissage automatique) J'ai essayé de comprendre attentivement l'algorithme EM dans la distribution gaussienne mixte avec l'implémentation.
J'ai essayé de comprendre attentivement la fonction d'apprentissage dans le réseau de neurones sans utiliser la bibliothèque d'apprentissage automatique (deuxième moitié)
J'ai essayé de prédire la présence ou l'absence de neige par apprentissage automatique.
J'ai essayé d'implémenter diverses méthodes d'apprentissage automatique (modèle de prédiction) en utilisant scicit-learn
J'ai essayé de traiter et de transformer l'image et d'élargir les données pour l'apprentissage automatique
J'ai essayé de déplacer l'apprentissage automatique (détection d'objet) avec TouchDesigner
J'ai essayé de représenter graphiquement les packages installés en Python
Tentative d'inclusion du modèle d'apprentissage automatique dans le package python
J'ai essayé d'organiser SVM.
J'ai essayé "Lobe" qui peut facilement entraîner le modèle d'apprentissage automatique publié par Microsoft.
Utilisé en EDA pour l'apprentissage automatique
Essayez d'évaluer les performances du modèle d'apprentissage automatique / de classification
J'ai essayé l'apprentissage automatique pour convertir des phrases en style XX
J'ai essayé d'illustrer le temps et le temps du langage C
J'ai essayé d'implémenter la fonction d'envoi de courrier en Python
[TF] J'ai essayé de visualiser le résultat de l'apprentissage en utilisant Tensorboard
J'ai essayé d'écrire dans un modèle de langage profondément appris
J'ai essayé de comparer la précision des modèles d'apprentissage automatique en utilisant kaggle comme thème.
Application correspondante, j'ai essayé de prendre des statistiques de personnes fortes et j'ai essayé de créer un modèle d'apprentissage automatique
[Deep Learning from scratch] J'ai essayé d'expliquer la confirmation du gradient d'une manière facile à comprendre.
J'ai essayé de vérifier la classification yin et yang des membres hololive par apprentissage automatique
J'ai essayé de bien le comprendre en implémentant l'algorithme Adaboost en machine learning (+ j'ai approfondi ma compréhension du calcul de tableaux)
J'ai essayé l'apprentissage automatique avec liblinear
Classification et régression dans l'apprentissage automatique
J'ai essayé de m'organiser à propos de MCMC.
J'ai essayé de déplacer le ballon
J'ai essayé d'estimer la section.
J'ai essayé de décrire le trafic en temps réel avec WebSocket
J'ai essayé de traiter l'image en "style croquis" avec OpenCV
J'ai essayé de résumer les commandes utilisées par les ingénieurs débutants aujourd'hui
J'ai essayé de traiter l'image dans un "style de dessin au crayon" avec OpenCV
J'ai essayé de résumer la méthode de mise en œuvre fréquemment utilisée de pytest-mock
Gestion des modèles d'apprentissage automatique pour éviter de se quereller avec le côté commercial
[Apprentissage automatique] J'ai essayé de faire quelque chose comme passer des images
Les gens mémorisent les connaissances acquises dans le cerveau, comment mémoriser les connaissances acquises dans l'apprentissage automatique
J'ai essayé de créer Othello AI avec tensorflow sans comprendre la théorie de l'apprentissage automatique ~ Introduction ~
J'ai essayé de comprendre l'apprentissage supervisé de l'apprentissage automatique d'une manière facile à comprendre, même pour les ingénieurs serveurs 1
[API Qiita] [Statistiques • Apprentissage automatique] J'ai essayé de résumer et d'analyser les articles publiés jusqu'à présent.
J'ai essayé de comprendre l'apprentissage supervisé de l'apprentissage automatique d'une manière facile à comprendre, même pour les ingénieurs serveurs 2
J'ai essayé de créer Othello AI avec tensorflow sans comprendre la théorie de l'apprentissage automatique ~ Implémentation ~
J'ai essayé d'implémenter PLSA en Python
<Subject> Machine learning Chapitre 3: Modèle de régression logistique
J'ai essayé de résumer la commande umask
J'ai essayé d'implémenter la permutation en Python
J'ai essayé de résumer les méthodes qui sont souvent utilisées lors de l'implémentation d'algo de base dans Quantx Factory