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.
#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
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()
print(boston)
Tout d'abord, affichez le contenu pour avoir un aperçu des données.
print(boston.DESCR)
Vérifions l'explication de l'ensemble de données Boston. 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 $ |
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.
#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.
#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.
À 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)
#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.
model = linear_model.LinearRegression()
model.fit(X,Y)
model.coef_
«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
model.intercept_
model.score(X, Y)
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.
#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")
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()
multi_lreg.fit(X_train, Y_train)
multi_lreg.fit(X_train, Y_train)
multi_lreg.score(X_test,Y_test)
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.