2. Analyse multivariée décrite dans Python 2-1. Analyse de régression multiple (scikit-learn)

Ici, vous apprendrez une ** analyse de régression multiple ** linéaire qui traite de trois variables ou plus. Analysons le prix des logements de Boston, une grande ville du nord-est du Massachusetts aux États-Unis, à l'aide de diverses variables explicatives.

** ⑴ Importer la bibliothèque **

#Bibliothèque requise pour le calcul numérique
import numpy as np
import pandas as pd
#Package pour dessiner des graphiques
import matplotlib.pyplot as plt
#Bibliothèque d'apprentissage automatique Scikit-Modèle linéaire d'apprentissage
from sklearn import linear_model

** ⑵ Lire les données **

Lisez l'un des ensembles de données "Ensemble de données sur les prix des logements à Boston" fourni avec scikit-learn et enregistrez-le sous la forme de la variable boston.

from sklearn.datasets import load_boston
boston = load_boston()

** ⑶ Vérifiez le contenu des données et traitez-le pour analyse **

print(boston)

Tout d'abord, affichez le contenu pour avoir un aperçu des données. 002_0201_001.PNG

print(boston.DESCR)

Vérifions l'explication de l'ensemble de données Boston. 002_0201_002.PNG L'ensemble de données comprend 13 éléments comme variables explicatives et 1 élément comme variables objectives.

Nom de variable Mot original Définition
CRIM crime rate Taux de criminalité par habitant par ville
ZN zone 25,Pourcentage de zones résidentielles de plus de 000 pieds carrés
INDUS industry Pourcentage de la superficie non commerciale (fabrication) par ville
CHAS Charles River Variable fictive Charles River (1 si la zone borde la rivière, 0 sinon)
NOX nitric oxides Concentration de monoxyde d'azote (1 sur 10 millions)
RM rooms Nombre moyen de chambres par logement
AGE ages Pourcentage de maisons construites avant 1940
DIS distances Distance pondérée de 5 centres d'emploi à Boston
RAD radial highways Indice d'accessibilité aux autoroutes
TAX tax rate 10,Taux d'imposition des immobilisations par 000 $
PTRATIO pupil-teacher ratio Ratio élèves / enseignant par ville
B blacks Pourcentage de Noirs par ville
LSTAT lower status Pourcentage de classe inférieure dans la population
MEDV median value Accession à la propriété médiane de l'ordre de 1000 $

** ⑷ Convertir les données en trame de données Pandas **

boston_df = pd.DataFrame(boston.data)
print(boston_df)

Il dit [506 lignes x 13 colonnes], et la forme des données est de 506 lignes x 13 colonnes, c'est-à-dire que le nombre d'échantillons est de 506 pour 13 variables. 002_0201_003.PNG

** ⑸ Spécifiez le nom de la colonne et ajoutez la variable objectif **

#Spécifiez le nom de la colonne
boston_df.columns = boston.feature_names
print(boston_df)

Spécifiez les noms de fonction de boston en tant que colonnes de boston_df. 002_0201_004.PNG

#Ajouter une variable d'objectif
boston_df['PRICE'] = pd.DataFrame(boston.target)
print(boston_df)

Convertissez les données boston «target» en un bloc de données Pandas et stockez-les dans boston_df avec le nom de colonne «PRICE». La variable d'objectif "PRIX" est ajoutée dans la colonne la plus à droite. 002_0201_005.PNG

** Syntaxe de base Scikit-learn </ font> **

À partir de maintenant, nous allons effectuer une analyse de régression multiple à l'aide de scikit-learn, mais voici la procédure. ① Créer la source du modèle (instance) Nom de la variable de modèle = LinearRegression () (2) Créer un modèle basé sur la variable explicative X et la variable objective Y Nom de la variable de modèle.fit (X, Y) ③ Calculez le coefficient de régression à l'aide du modèle créé Nom de la variable de modèle.coef_ ④ Calculez la section à l'aide du modèle créé Nom de la variable de modèle.intercept_ ⑤ Calculez le coefficient de décision pour obtenir la précision du modèle Nom de la variable de modèle.score (X, Y)

** ⑹ Créer des variables explicatives et des variables objectives **

#Supprimer uniquement la variable objectif et la stocker dans la variable X
X = boston_df.drop("PRICE", axis=1)
#Extraire uniquement la variable objectif et la stocker dans la variable Y
Y = boston_df["PRICE"]
print(X)
print(Y)

Supprimez la colonne du bloc de données en spécifiant l'argument (" nom de la colonne ", axe = 1) dans la fonction drop. De plus, la colonne de la trame de données est spécifiée par nom de la trame de données [" nom de colonne "], extraite et stockée dans la variable Y. 002_0201_006.PNG

** ⑺ Créer une instance ① **

model = linear_model.LinearRegression()

** ⑻ Créer un modèle ② **

model.fit(X,Y)

** ⑼ Calculez le coefficient de régression ③ **

model.coef_

002_0201_007.PNG «coef_» signifie coefficient. Le coefficient étant un peu difficile à comprendre, convertissez-le en bloc de données pour le rendre plus facile à voir.

#Stocker la valeur du coefficient dans la variable coefficient
coefficient = model.coef_
#Convertir en bloc de données et spécifier le nom de la colonne et le nom de l'index
df_coefficient = pd.DataFrame(coefficient,
                              columns=["coefficient"],
                              index=["Taux criminel", "Taux foncier résidentiel", "Ratio de fabrication", "Charles River", "Concentration de monoxyde d'azote", 
                                     "Nombre moyen de chambres", "Taux d'accession à la propriété", "Centre d'emploi", "Autoroute", "Taux d'imposition des immobilisations", 
                                     "Ratio élèves / enseignant", "Ratio noir", "Ratio de classe inférieure"])
df_coefficient

002_0201_008.PNG

** ⑽ Calculez la section ④ **

model.intercept_

002_0201_009.PNG

** ⑾ Calculez le coefficient de décision et vérifiez l'exactitude ⑤ **

model.score(X, Y)

002_0201_010.PNG

** Validation croisée </ font> **

Il existe un concept appelé validation croisée comme méthode de vérification de l'exactitude du modèle, c'est-à-dire de la validité de l'analyse elle-même. Dans la plupart des cas, l'échantillon est divisé au hasard en deux groupes, un groupe est utilisé pour créer un modèle et le groupe restant est utilisé pour tester le modèle. Les premières sont appelées données d'entraînement et la seconde est appelée données de test. Désormais, scikit-learn fournit une méthode pour fractionner les données d'entraînement et les données de test. sklearn.model_selection.train_test_split Il n'y a pas de règle fixe sur la façon de diviser l'entraînement et le test, mais si vous ne spécifiez pas dans l'argument de train_test_split, un quart, c'est-à-dire que 25% de tous les échantillons seront divisés en données de test.

** ➊ Fractionner l'échantillon **

#train sklearn_test_Importer la méthode de fractionnement
from sklearn.model_selection import train_test_split
#Variable X,Divisez Y pour l'entraînement et le test respectivement
X_train, X_test, Y_train, Y_test = train_test_split(X,Y)

Vérifions le contenu de chacune des variables X pour l'entraînement et les tests.

print("Données d'entraînement pour la variable x:", X_train, sep="\n")
print("Données de test pour la variable x:", X_test, sep="\n")

002_0201_011.PNG

** ➋ Créer une instance ① **

Le nom de la variable «multi_lreg» est une abréviation pour l'analyse de régression linéaire multiple.

multi_lreg = linear_model.LinearRegression()

** ➌ Créer un modèle avec des données d'entraînement ② **

multi_lreg.fit(X_train, Y_train)

** ➍ Calculez le coefficient de décision dans les données d'entraînement ⑤ **

multi_lreg.fit(X_train, Y_train)

002_0201_012.PNG

** ➎ Calculez le coefficient de décision dans les données de test ⑤ **

multi_lreg.score(X_test,Y_test)

002_0201_013.PNG Une paire de formation et de test, qui peut être remplacée par «données connues» et «données inconnues». Si vous créez un modèle avec les données que vous avez déjà et appliquez le modèle aux données nouvellement obtenues, dans quelle mesure fonctionnera-t-il? Les données à analyser font toujours partie de l'ensemble, passé ou présentement achevé. Cependant, nous n'analysons rien pour confirmer la situation actuelle, mais à partir de là, nous devrions avoir pour objectif de «lire en avant» et de «prévoir l'avenir». En ce sens, si le coefficient de décision est faible, la précision du modèle lui-même est mise en doute, mais plus elle est élevée, mieux c'est. Au contraire, être trop cher est un problème. Un facteur de décision élevé, c'est-à-dire un petit résidu (erreur), signifie que le modèle correspond aux données à analyser. S'il correspond trop, le facteur de décision peut chuter lorsqu'il est appliqué aux données nouvellement obtenues. C'est ce qu'on appelle le problème du «surapprentissage».


Ensuite, afin de comprendre comment fonctionne le calcul de l'analyse de régression multiple, nous effectuerons une analyse de régression multiple sans utiliser l'outil pratique scikit-learn.

Recommended Posts