[PYTHON] Essayez d'évaluer les performances du modèle d'apprentissage automatique / de régression

1.Tout d'abord

Cette fois, j'évaluerai les performances du modèle de régression utilisé pour l'apprentissage automatique lors de l'écriture du code.

2. Ensemble de données

L'ensemble de données utilisé est le prix du logement à Boston fourni avec sklearn.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_boston
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression,Ridge
from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import RandomForestRegressor,GradientBoostingRegressor
from sklearn.pipeline import Pipeline
from sklearn.metrics import r2_score
from sklearn.model_selection import cross_val_score
from sklearn.utils import shuffle

# --------Charger le jeu de données---------
dataset = load_boston()
X = pd.DataFrame(dataset.data, columns=dataset.feature_names)
y = pd.Series(dataset.target, name='y')
print('X.shape = ', X.shape)
print(X.join(y).head())

スクリーンショット 2019-11-29 10.00.34.png Les données sont de 506 au total, la quantité de caractéristiques est de 13 articles et y est le prix cible du logement.

3. Modèle de régression

Il existe cinq modèles de régression utilisés cette fois. Plus tard, nous le rassemblerons sous la forme d'un pipeline pour en faciliter l'utilisation. Les hyperparamètres sont la valeur par défaut.

# ----------Paramètres du pipeline-----------
pipelines = {
  '1.Linear': Pipeline([('std',StandardScaler()),
                        ('est',LinearRegression())]),
     
  '2.Ridge' : Pipeline([('std',StandardScaler()),
                        ('est',Ridge(random_state=0))]),

  '3.Tree'  : Pipeline([('std',StandardScaler()),
                        ('est',DecisionTreeRegressor(random_state=0))]),

  '4.Random': Pipeline([('std',StandardScaler()),
                        ('est',RandomForestRegressor(random_state=0, n_estimators=100))]),  
     
  '5.GBoost': Pipeline([('std',StandardScaler()),
                        ('est',GradientBoostingRegressor(random_state=0))])
}

1.Linear ** Modèle de régression linéaire (linéaire) ** utilisant la méthode des moindres carrés.

2.Ridge Il s'agit d'un ** modèle de régression de crête (Ridge) ** qui supprime le surentraînement en ajoutant des éléments de régression L2 au modèle de régression linéaire.

3.Tree Il s'agit d'un modèle de régression basé sur l '** Arbre de décision **.

4.Random C'est ** Random Forest ** qui crée plusieurs arbres de décision à partir d'entités sélectionnées au hasard et produit en moyenne les prédictions de tous les arbres de décision.

5.GBoost C'est le ** Gradient Boosting ** qui améliore la précision de la prédiction en essayant d'expliquer les informations (résiduelles) que le groupe d'arbres existant ne peut pas expliquer.

4. Indice d'évaluation

Utilisez ** R2_score ** comme index d'erreur. C'est à quel point l'erreur quadratique prévue et mesurée Σ peut être rendue plus petite que l'erreur quadratique moyenne mesurée et mesurée Σ.

Si la prédiction est entièrement en accord avec la mesure réelle, l'indice peut être 1, et si la prédiction est trop mauvaise, l'indice peut être négatif. スクリーンショット 2019-11-29 19.04.31.png

5. Méthode Holdout

Tout d'abord, la méthode d'exclusion, qui est une méthode générale pour évaluer les performances d'un modèle, est appliquée. Les performances de généralisation sont examinées en divisant les données en ** données d'entraînement: données de test = 8: 2 **, en entraînement avec les données d'entraînement, puis en évaluant avec des données de test inconnues.

# -----------Méthode Holdout-----------
X_train,X_test,y_train,y_test = train_test_split(X, y, test_size=0.20, random_state=1)  

scores = {}
for pipe_name, pipeline in pipelines.items():
    pipeline.fit(X_train, y_train)
    scores[(pipe_name,'train')] = r2_score(y_train, pipeline.predict(X_train))
    scores[(pipe_name,'test')] = r2_score(y_test, pipeline.predict(X_test))
print(pd.Series(scores).unstack())

スクリーンショット 2019-11-29 10.46.24.png À la suite d'une évaluation avec des données de test inconnues, ** 5.GBoost ** était le plus précis (0,924750).

Dans les données d'entraînement, le plus précis (1.0000) ** 3.Tree ** est significativement ramené à (0.821282) dans les données de test, indiquant qu'il est tombé en surentraînement.

** 2.Ridge ** devrait être une version améliorée de ** 1.Linear **, mais les données de test montrent une légère inversion de la précision. En effet, il existe une certaine variation dans la mesure de la précision par la méthode d'exclusion, et nous comparerons les performances plus tard par la méthode plus stricte du pli k.

6. Graphique résiduel

Des tracés résiduels sont créés pour visualiser les performances du modèle. Cela trace les données d'entraînement et les données de test avec ** valeur prédite ** sur l'axe horizontal et ** différence entre la valeur prédite et la valeur réelle ** sur l'axe vertical.

# -------------Graphique résiduel------------
for pipe_name, est in pipelines.items():
    y_train_pred = est.predict(X_train)
    y_test_pred = est.predict(X_test)
    plt.scatter(y_train_pred, y_train_pred - y_train, c = 'blue', alpha=0.5, marker = 'o', label = 'train')
    plt.scatter(y_test_pred, y_test_pred - y_test, c = 'red', marker ='x', label= 'test' )
    plt.hlines(y = 0, xmin = 0, xmax = 50, color = 'black')
    plt.ylim([-20, 20])
    plt.xlabel('Predicted values')
    plt.ylabel('Residuals')        
    plt.title(pipe_name)
    plt.legend()
    plt.show()

En tant que sortie du code, 5 résidus sont tracés de 1.Linear à 5.GBoost, mais ici, seuls 3 typiques sont augmentés.

スクリーンショット 2019-11-29 11.07.29.png ** Modèle de régression linéaire **. Les données d'entraînement et les données de test ont presque la même variation résiduelle.

スクリーンショット 2019-11-29 11.07.54.png ** Arbre de décision **. Alors que les données d'entraînement ont un résidu nul complet (précision de 100%), les données de test ont une grande variation résiduelle. C'est un surapprentissage typique.

スクリーンショット 2019-11-29 11.08.09.png ** Augmentation du gradient **. La variation des résidus est supprimée à la fois dans les données d'apprentissage et les données de test.

7. Méthode k-hold

La ** méthode k-hold ** (vérification d'intersection de division k) permet une évaluation du modèle plus stricte que la méthode holdout.

La procédure spécifique consiste à diviser d'abord les données en k morceaux, à les sélectionner un par un afin de les utiliser comme données de test, et à utiliser les k-1 morceaux restants comme données d'apprentissage.

Ensuite, la méthode ** k-hold ** consiste à s'entraîner avec les données d'entraînement, à répéter la mesure de précision avec les données de test k fois et à prendre la moyenne de la précision obtenue comme précision du modèle. Ici, k = 5 (spécifié par cv = 5).

Notez que ** cross_val_score ** ne mélange pas automatiquement les données comme ** train_test_split **, utilisez donc d'abord l'utilitaire ** shuffle ** pour mélanger les données avant de les traiter.

# -------------- k-méthode de pliage--------------
X_shuffle, y_shuffle =shuffle(X, y, random_state= 1)  #Mélange de données

scores={}
for pipe_name, est in pipelines.items():  
    cv_results = cross_val_score(est, X_shuffle, y_shuffle, cv=5, scoring='r2')    
    scores[(pipe_name,'avg')] = cv_results.mean()
    scores[(pipe_name,'score')] = np.round(cv_results,5)  # np.round est l'ajustement des chiffres
print(pd.Series(scores).unstack())

スクリーンショット 2019-11-29 11.21.38.png Les cinq nombres ** score ** inclus entre [] à côté de ** moy ** sont la précision calculée à chaque fois. Si vous regardez ** 1.Linear **, vous pouvez voir qu'il varie de ** minimum 0,64681 à maximum 0,76342 **. En faisant la moyenne de ces nombres, une évaluation stricte du modèle est effectuée.

Vous pouvez voir que ** 2.Ridge ** est légèrement plus précis que ** 1.Linear **.

En fin de compte, le meilleur modèle pour les prix des maisons à Boston était de ** 5 Go **.

Recommended Posts

Essayez d'évaluer les performances du modèle d'apprentissage automatique / de régression
Essayez d'évaluer les performances du modèle d'apprentissage automatique / de classification
Évaluer les performances d'un modèle de régression simple à l'aide de la validation d'intersection LeaveOneOut
J'ai essayé d'organiser les index d'évaluation utilisés en machine learning (modèle de régression)
Les débutants en apprentissage automatique essaient la régression linéaire
Comment augmenter le nombre d'images de jeux de données d'apprentissage automatique
[Apprentissage automatique] J'ai essayé de résumer la théorie d'Adaboost
[Apprentissage automatique] Vérifiez les performances du classificateur à l'aide de données de caractères manuscrites
Essayez de modéliser le rendement cumulatif du roulement dans le trading à terme
Comment utiliser l'apprentissage automatique pour le travail? 01_ Comprendre l'objectif de l'apprentissage automatique
Gestion des modèles d'apprentissage automatique pour éviter de se quereller avec le côté commercial
Évaluer la précision du modèle d'apprentissage par test croisé de scikit learn
Essayez de prédire le triplet de la course de bateaux en classant l'apprentissage
<Subject> Machine learning Chapitre 3: Modèle de régression logistique
Algorithme d'apprentissage automatique (généralisation de la régression linéaire)
Enregistrez les étapes pour comprendre l'apprentissage automatique
<Cours> Machine learning Chapitre 1: Modèle de régression linéaire
<Cours> Machine learning Chapitre 2: Modèle de régression non linéaire
J'ai essayé d'appeler l'API de prédiction du modèle d'apprentissage automatique de WordPress
J'ai essayé de visualiser le modèle avec la bibliothèque d'apprentissage automatique low-code "PyCaret"
Essayez de prédire la demande de puissance par l'apprentissage automatique
À propos du contenu de développement de l'apprentissage automatique (exemple)
Amélioration de la metrix de performance par modèle d'apprentissage en 2 étapes
Essayez de simuler le mouvement du système solaire
Essayez d'utiliser le bloc-notes Jupyter à partir d'Azure Machine Learning
Disposition des éléments auto-mentionnés liés à l'apprentissage automatique
Essayez de prédire la valeur de la jauge de niveau d'eau par apprentissage automatique en utilisant les données ouvertes de Data City Sabae
Essayez d'écrire du code à partir de 1 en utilisant le chainer du cadre d'apprentissage automatique (édition mnist)
J'ai essayé de prédire la présence ou l'absence de neige par apprentissage automatique.
Mise en place d'un modèle de prédiction des taux de change (taux dollar-yen) par machine learning
Régression logistique d'apprentissage automatique
Régression linéaire d'apprentissage automatique
Je suis un amateur le 14e jour de python, mais je veux essayer l'apprentissage automatique avec scicit-learn
Introduction à l'apprentissage automatique
Comptez le nombre de paramètres dans le modèle d'apprentissage en profondeur
Essayez de résoudre les problèmes / problèmes du "programmeur matriciel" (Chapitre 1)
Impressions d'avoir obtenu le nano-diplôme Udacity Machine Learning Engineer
La décision de scikit-learn Comment visualiser un modèle en bois
Essayez de prédire le taux de change (FX) avec un apprentissage automatique non approfondi
À propos des tests dans la mise en œuvre de modèles d'apprentissage automatique
Essayez d'estimer le nombre de likes sur Twitter
Prédire le sexe des utilisateurs de Twitter grâce à l'apprentissage automatique
Essayez d'obtenir le contenu de Word avec Golang
Les débutants en apprentissage automatique essaient de créer un arbre de décision
Résumé du flux de base de l'apprentissage automatique avec Python
Tentative d'inclusion du modèle d'apprentissage automatique dans le package python
Bilan du premier défi du machine learning avec Keras
[Apprentissage automatique] Essayez de détecter des objets à l'aide de la recherche sélective
J'ai essayé de compresser l'image en utilisant l'apprentissage automatique
La première étape de l'apprentissage automatique ~ Pour ceux qui veulent essayer l'implémentation avec python ~
Introduction à l'apprentissage automatique ~ Montrons le tableau de la méthode du K plus proche voisin ~ (+ gestion des erreurs)
Modèle d'apprentissage automatique prenant en compte la maintenabilité
Essayez d'obtenir la liste des fonctions du paquet Python> os
[Français] scikit-learn 0.18 Guide de l'utilisateur 3.1. Validation croisée: évaluer les performances de l'estimateur
Une introduction à l'apprentissage automatique
Machine Learning: Supervision - Régression linéaire
Bases de l'apprentissage automatique (mémoire)
Le résultat de l'apprentissage automatique des ingénieurs Java avec Python www
Enquête sur l'utilisation du machine learning dans les services réels
Vérification des performances du prétraitement des données pour l'apprentissage automatique (données numériques) (partie 2)
J'ai essayé de comparer la précision des modèles d'apprentissage automatique en utilisant kaggle comme thème.