** Ici, je voudrais comparer trois modèles de régression multiple, y compris la régression Lasso. ** **
#Bibliothèque de traitement / calcul / analyse de données
import numpy as np
import pandas as pd
#Bibliothèque de dessins graphiques
import matplotlib.pyplot as plt
%matplotlib inline
#Bibliothèque d'apprentissage automatique
import sklearn
#Obtenez des données
url = 'https://raw.githubusercontent.com/yumi-ito/datasets/master/datasets_auto_4variables_pre-processed.csv'
#Lire les données acquises en tant qu'objet DataFrame
df = pd.read_csv(url, header=None)
#Définir le libellé de la colonne
df.columns = ['width', 'height', 'horsepower', 'price']
print(df)
#Confirmation de la forme des données
print('Forme des données:', df.shape)
#Confirmation des valeurs manquantes
print('Nombre de valeurs manquantes:{}\n'.format(df.isnull().sum().sum()))
#Confirmation du type de données
print(df.dtypes)
#Importer pour la construction de modèles
from sklearn.linear_model import Ridge, Lasso, LinearRegression
#Importer pour la division des données
from sklearn.model_selection import train_test_split
drop ()
pour supprimer la colonne price
et définir uniquement les variables explicatives sur x et uniquement le prix
sur y.train_test_split
de sklearn, la variable explicative x et la variable objectif y sont respectivement séparées en données d'apprentissage (train) et données de test (test).#Définir des variables explicatives et des variables objectives
x = df.drop('price', axis=1)
y = df['price']
#Divisé en données d'entraînement et données de test
X_train, X_test, Y_train, Y_test = train_test_split(x, y, test_size=0.5, random_state=0)
for
pour générer un modèle, calculer le taux de réponse correct pour les données d'entraînement et calculer le taux de réponse correct pour les données de test à la fois.#Initialisez chaque classe et stockez-la dans des modèles de variable de type dict
models = {
'linear': LinearRegression(),
'ridge': Ridge(random_state=0),
'lasso': Lasso(random_state=0)}
#Initialisez la variable de type dict qui stocke le taux de réponse correct
scores = {}
#Générez chaque modèle en séquence, calculez et stockez le taux de réponse correct
for model_name, model in models.items():
#Génération de modèle
model.fit(X_train, Y_train)
#Taux de réponse correct des données d'entraînement
scores[(model_name, 'train')] = model.score(X_train, Y_train)
#Taux de réponse correct des données de test
scores[(model_name, 'test')] = model.score(X_test, Y_test)
#Convertir le type de dict en liste unidimensionnelle de pandas
print(pd.Series(scores))
score ()
de sklearn, et stockez model_name
et soit train
ou test
comme un ensemble comme clé.Régression multiple | Retour de crête | Retour au lasso | |
---|---|---|---|
Taux de réponse correct des données d'entraînement | 0.733358 | 0.733355 | 0.733358 |
Taux de réponse correct des données de test | 0.737069 | 0.737768 | 0.737084 |
** Donc, je voudrais changer les paramètres de régularisation et comparer. ** **
#réglages des paramètres
alpha = 10.0
#Initialiser chaque classe et stocker dans des modèles
models = {
'ridge': Ridge(alpha=alpha, random_state=0),
'lasso': Lasso(alpha=alpha, random_state=0)}
#Initialisez la variable de type dict qui stocke le taux de réponse correct
scores = {}
#Exécutez chaque modèle en séquence et enregistrez le taux de réponse correct
for model_name, model in models.items():
model.fit(X_train, Y_train)
scores[(model_name, 'train')] = model.score(X_train, Y_train)
scores[(model_name, 'test')] = model.score(X_test, Y_test)
print(pd.Series(scores))
λ | Ridge(train) | Ridge(test) | Lasso(train) | Lasso(test) |
---|---|---|---|---|
1 | 0.733355 | 0.737768 | 0.733358 | 0.737084 |
10 | 0.733100 | 0.743506 | 0.733357 | 0.737372 |
100 | 0.721015 | 0.771022 | 0.733289 | 0.740192 |
200 | 0.705228 | 0.778607 | 0.733083 | 0.743195 |
400 | 0.680726 | 0.779004 | 0.732259 | 0.748795 |
500 | 0.671349 | 0.777338 | 0.731640 | 0.751391 |
1000 | 0.640017 | 0.767504 | 0.726479 | 0.762336 |