#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
from sklearn.linear_model import Ridge, Lasso #Classe pour la génération de modèles de régression
#Un module qui rend matplotlib compatible avec l'affichage japonais
!pip install japanize-matplotlib
import japanize_matplotlib
#Obtenez des données
url = 'https://raw.githubusercontent.com/yumi-ito/sample_data/master/ridge_lasso_50variables.csv'
#Lire les données acquises en tant qu'objet DataFrame
df = pd.read_csv(url)
print(df)
#Créez la variable explicative x en supprimant la colonne "y"
x = df.drop('y', axis=1)
#Extraire la colonne "y" pour créer la variable objectif y
y = df['y']
# λ(alpha)Générer 50 façons
num_alphas = 50
alphas = np.logspace(-2, 0.7, num_alphas)
print(alphas)
numpy.logspace ()
est une fonction avec une torsion qui ** prend une base logarithmique de 10 et devient une séquence de différence égale **.(valeur de départ, valeur de fin, nombre à générer)
dans l'argument, mais lorsque vous prenez réellement le logarithme, ce sera comme suit.np.log10(alphas)
numpy.arange ()
semble être bon, mais je le fais car il est nécessaire d'utiliser ** l'échelle log ** lors de la visualisation ultérieure.La valeur de l'échelle logarithmique double pour chaque échelle. Un graphique logarithmique est un graphique qui utilise soit l'axe des x, l'axe des y ou les deux axes.
Les échelles ordinaires sont appelées échelles linéaires, mais si vous les convertissez en échelles logarithmiques ...
Comme on a l'impression que l'échelle de l'axe est compressée étroitement sur la ligne droite numérique, il est plus facile de comparer visuellement des données éloignées dans le nombre de chiffres.
#Variable qui stocke le coefficient de régression
ridge_coefs = []
#Répétez l'estimation de la régression des crêtes en échangeant alpha
for a in alphas:
ridge = Ridge(alpha = a, fit_intercept = False)
ridge.fit(x, y)
ridge_coefs.append(ridge.coef_)
, et ajoutez le coefficient de régression à
ridge_coefs`.fit_intercept = False
de Ridge ()
, qui génère le modèle du modèle, spécifie s'il faut calculer la section. S'il est défini sur False
, la section n'est pas calculée, c'est-à-dire que la section 0 passe toujours par l'origine. Sera.#Convertir les coefficients de régression accumulés en un tableau numpy
ridge_coefs = np.array(ridge_coefs)
print("Forme d'arrangement:", ridge_coefs.shape)
print(ridge_coefs)
log_alphas
, qui est une conversion logarithmique de ʻalphas` et moins.plt.text ()
, qui affiche le texte dans le graphique, utilise (x, y," str ")
comme arguments pour spécifier les coordonnées et la chaîne de caractères.#Conversion de journal des alphas(-log10)
log_alphas = -np.log10(alphas)
#Spécifier la taille de la zone graphique
plt.figure(figsize = (8,6))
#Un graphique en traits pointillés avec λ sur l'axe des x et des coefficients sur l'axe des y
plt.plot(log_alphas, ridge_coefs)
#Variable explicative x_Afficher 1
plt.text(max(log_alphas) + 0.1, np.array(ridge_coefs)[0,0], "x_1", fontsize=13)
#Spécifiez la plage de l'axe x
plt.xlim([min(log_alphas) - 0.1, max(log_alphas) + 0.3])
#Étiquette d'axe
plt.xlabel("Paramètre de régularisation λ(-log10)", fontsize=13)
plt.ylabel("Coefficient de régression", fontsize=13)
#Ligne d'échelle
plt.grid()
#Variable qui stocke le coefficient de régression
lasso_coefs = []
#Répétez l'estimation de la régression Lasso en échangeant alpha
for a in alphas:
lasso = Lasso(alpha = a, fit_intercept = False)
lasso.fit(x, y)
lasso_coefs.append(lasso.coef_)
#Convertir les coefficients de régression accumulés en un tableau numpy
lasso_coefs = np.array(lasso_coefs)
print("Forme d'arrangement:", lasso_coefs.shape)
print(lasso_coefs)
#Spécifier la taille de la zone graphique
plt.figure(figsize = (8,6))
#Un graphique en traits pointillés avec λ sur l'axe des x et des coefficients sur l'axe des y
plt.plot(log_alphas, lasso_coefs)
#Variable explicative x_Afficher 1
plt.text(max(log_alphas) + 0.1, np.array(lasso_coefs)[0,0], "x_1", fontsize=13)
#Spécifiez la plage de l'axe x
plt.xlim([min(log_alphas) - 0.1, max(log_alphas) + 0.3])
#Étiquette d'axe
plt.xlabel("Paramètre de régularisation λ(-log10)", fontsize=13)
plt.ylabel("Coefficient de régression", fontsize=13)
#Ligne d'échelle
plt.grid()