[PYTHON] Évaluer les performances d'un modèle de régression simple à l'aide de la validation d'intersection LeaveOneOut

introduction

Nous avons utilisé la vérification d'intersection LeaveOneOut comme méthode d'évaluation du modèle lors de l'analyse en utilisant une petite quantité de données, nous allons donc la partager.

Dans la validation croisée LeaveOneOut, la formation et les tests sont effectués sur les données d'un n échantillons, en utilisant un échantillon comme données de test et l'autre comme données de train. Ensuite, lors de l'échange des données de test, cela est répété n fois pour évaluer les performances du modèle. En parlant de vérification d'intersection k-split, k est la même valeur que n échantillons de la quantité de données. Il semble être utilisé lorsque la quantité de données est faible.

Ci-dessous, nous évaluerons une régression simple en utilisant la méthode LOO.

code

Il existe un certain DataFrame, et la variable explicative utilisée pour la régression simple est spécifiée par loo_column. Supposons que le DataFrame mokuteki contienne une variable objectif. Il s'entraîne n fois lors de l'échange de données, puis calcule et renvoie finalement RootMeanSquaredError. «Statsmodels» est utilisé pour une régression simple.

loo.py


from sklearn.model_selection import LeaveOneOut
from statsmodels import api as sm

loo_column = "setsumei"

def loo_rmse(df,loo_column):
    loo_X = df[loo_column]
    
    #Créez un terme de constante de régression simple.
    loo_X = sm.add_constant(loo_X)
    loo_y = df_analytics["recognition"]

    loo = LeaveOneOut()
    loo.get_n_splits(loo_X)

    # square_Liste pour enregistrer les erreurs
    se_list = list()
    
    #Répéter les données en échangeant les index des données utilisées pour le train et le test
    for train_index, test_index in loo.split(loo_X):
        X_train, X_test = loo_X.iloc[train_index], loo_X.iloc[test_index]
        y_train, y_test = loo_y.iloc[train_index], loo_y.iloc[test_index]
        
        #Apprendre la régression simple
        model = sm.OLS(y_train,X_train)
        result = model.fit()
        
        #Prédire les données de test en fonction des résultats d'apprentissage. Obtenez l'erreur.
        pred = result.params["const"] + result.params[loo_column] * X_test[loo_column].values[0]
        diff = pred - y_test.values[0]
        
        #Corrigez l'erreur et enregistrez
        se_list.append(diff**2)

    #Faites la moyenne de l'erreur quadratique, prenez l'itinéraire et revenez
    ar = np.array(se_list)
    print("RMSE:",np.sqrt(ar.mean()))

référence

http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.LeaveOneOut.html

Merci beaucoup.

Recommended Posts

Évaluer les performances d'un modèle de régression simple à l'aide de la validation d'intersection LeaveOneOut
Essayez d'évaluer les performances du modèle d'apprentissage automatique / de régression
[Français] scikit-learn 0.18 Guide de l'utilisateur 3.1. Validation croisée: évaluer les performances de l'estimateur
Essayez d'évaluer les performances du modèle d'apprentissage automatique / de classification
[Pyro] Modélisation statistique par le langage de programmation probabiliste Pyro ② ~ Modèle de régression simple ~
Évaluer la précision du modèle d'apprentissage par test croisé de scikit learn
Apprenez le flux de l'estimation bayésienne et comment utiliser Pystan grâce à un modèle de régression simple
[Python] Implémentation du clustering à l'aide d'un modèle gaussien mixte
Explication du concept d'analyse de régression à l'aide de python Partie 2
Implémentation python de la classe de régression linéaire bayésienne
Calculer le coefficient de régression d'une analyse de régression simple avec python
Explication du concept d'analyse de régression à l'aide de Python Partie 1
Explication du concept d'analyse de régression à l'aide de Python Extra 1
Nouvelle infection par le virus Corona: comprendre le rôle des stratégies de distance sociale avec un modèle simple
Implémentation de VGG16 à l'aide de Keras créé sans utiliser de modèle entraîné
Éviter les pièges de l'utilisation d'un Mac (pour les utilisateurs Linux?)
Une implémentation Python simple de la méthode k-voisinage (k-NN)
J'ai essayé de refactoriser le modèle CNN de TensorFlow en utilisant TF-Slim
L'histoire du champ de modèle Django disparaissant de la classe
J'ai fait une fonction pour vérifier le modèle de DCGAN
J'ai fait un modèle VGG16 en utilisant TensorFlow (en chemin)
Essayez de modéliser une distribution multimodale à l'aide de l'algorithme EM
Analysez le modèle thématique pour devenir romancier avec GensimPy3
L'histoire de la création d'une base de données à l'aide de l'API Google Analytics
Un simple exemple de pivot_table.
Un mémorandum d'utilisation de eigen3
Essayez d'utiliser Elasticsearch comme base de votre système de questions et réponses
Trouvez la valeur optimale de la fonction à l'aide d'un algorithme génétique (partie 1)
[Python] Une fonction simple pour trouver les coordonnées du centre d'un cercle
[Kaggle] J'ai fait une collection de problèmes en utilisant le didacticiel Titanic
Apprenez Zundokokiyoshi en utilisant un simple RNN
Mise en place d'un filtre à particules simple
Créer un tableau simple à l'aide de prettytable
Simulation Python du modèle épidémique (modèle Kermack-McKendrick)
Créer un modèle d'apprentissage à l'aide de MNIST
L'histoire de l'exportation d'un programme
Mémorandum d'introduction du modèle de données EXODUS de la méthode des éléments finis (FEM)
Essayez de déduire à l'aide d'un modèle de régression linéaire sur Android [PyTorch Mobile]
Ce que les utilisateurs de Java ont pensé d'utiliser le langage Go pendant une journée
Expliquez doucement le processus de création d'une simple caméra de surveillance sans serveur à l'aide de Raspeye, de l'API Gmail et de l'API Line