#Datenverarbeitungs- / Berechnungs- / Analysebibliothek
import numpy as np
import pandas as pd
#Grafikzeichnungsbibliothek
import matplotlib.pyplot as plt
%matplotlib inline
#Bibliothek für maschinelles Lernen
import sklearn
from sklearn.linear_model import Ridge, Lasso #Klasse zur Generierung von Regressionsmodellen
#Ein Modul, das matplotlib mit dem japanischen Display kompatibel macht
!pip install japanize-matplotlib
import japanize_matplotlib
#Daten bekommen
url = 'https://raw.githubusercontent.com/yumi-ito/sample_data/master/ridge_lasso_50variables.csv'
#Lesen Sie die erfassten Daten als DataFrame-Objekt
df = pd.read_csv(url)
print(df)
#Erstellen Sie eine erklärende Variable x, indem Sie die Spalte "y" löschen
x = df.drop('y', axis=1)
#Extrahieren Sie die Spalte "y", um die Zielvariable y zu erstellen
y = df['y']
# λ(alpha)Generieren Sie 50 Wege
num_alphas = 50
alphas = np.logspace(-2, 0.7, num_alphas)
print(alphas)
numpy.logspace ()
ist eine Funktion mit einer Wendung, die ** eine logarithmische Basis von 10 annimmt und zu einer Sequenz gleicher Differenz ** wird.np.log10(alphas)
numpy.arange ()
gut zu sein, aber ich mache das, weil es notwendig ist, ** log scale ** zu verwenden, wenn ich später visualisiere.Der Wert der logarithmischen Skala verdoppelt sich für jede Skala. Ein logarithmischer Graph verwendet entweder die x-Achse, die y-Achse oder beide Achsen.
Gewöhnliche Skalen werden lineare Skalen genannt, aber wenn Sie sie in logarithmische Skalen konvertieren ...
Da es sich anfühlt, als ob die Achsenskala auf der geraden Linie der Zahl eng komprimiert ist, ist es einfacher, Daten visuell zu vergleichen, die in der Anzahl der Stellen weit voneinander entfernt sind.
#Variable, die den Regressionskoeffizienten speichert
ridge_coefs = []
#Wiederholen Sie die Schätzung der Gratregression, während Sie Alpha austauschen
for a in alphas:
ridge = Ridge(alpha = a, fit_intercept = False)
ridge.fit(x, y)
ridge_coefs.append(ridge.coef_)
fit_intercept = False
von Ridge ()
, das das Modell des Modells generiert, gibt an, ob der Abschnitt berechnet werden soll. Wenn es auf False
gesetzt ist, wird der Abschnitt nicht berechnet, dh der Abschnitt 0 durchläuft immer den Ursprung. Wird sein.#Konvertieren Sie die akkumulierten Regressionskoeffizienten in ein Numpy-Array
ridge_coefs = np.array(ridge_coefs)
print("Arrangementform:", ridge_coefs.shape)
print(ridge_coefs)
plt.text ()
, die Text im Diagramm anzeigt, verwendet (x, y," str ")
als Argumente, um Koordinaten und Zeichenfolgen anzugeben.#Protokollkonvertierung von Alphas(-log10)
log_alphas = -np.log10(alphas)
#Festlegen der Größe des Diagrammbereichs
plt.figure(figsize = (8,6))
#Ein gestrichelter Liniendiagramm mit λ auf der x-Achse und Koeffizienten auf der y-Achse
plt.plot(log_alphas, ridge_coefs)
#Erklärende Variable x_Show 1
plt.text(max(log_alphas) + 0.1, np.array(ridge_coefs)[0,0], "x_1", fontsize=13)
#Geben Sie den x-Achsenbereich an
plt.xlim([min(log_alphas) - 0.1, max(log_alphas) + 0.3])
#Achsenbeschriftung
plt.xlabel("Regularisierungsparameter λ(-log10)", fontsize=13)
plt.ylabel("Regressionskoeffizienten", fontsize=13)
#Linie skalieren
plt.grid()
#Variable, die den Regressionskoeffizienten speichert
lasso_coefs = []
#Wiederholen Sie die Schätzung der Lasso-Regression, während Sie Alpha austauschen
for a in alphas:
lasso = Lasso(alpha = a, fit_intercept = False)
lasso.fit(x, y)
lasso_coefs.append(lasso.coef_)
#Konvertieren Sie die akkumulierten Regressionskoeffizienten in ein Numpy-Array
lasso_coefs = np.array(lasso_coefs)
print("Arrangementform:", lasso_coefs.shape)
print(lasso_coefs)
#Festlegen der Größe des Diagrammbereichs
plt.figure(figsize = (8,6))
#Ein gestrichelter Liniendiagramm mit λ auf der x-Achse und Koeffizienten auf der y-Achse
plt.plot(log_alphas, lasso_coefs)
#Erklärende Variable x_Show 1
plt.text(max(log_alphas) + 0.1, np.array(lasso_coefs)[0,0], "x_1", fontsize=13)
#Geben Sie den x-Achsenbereich an
plt.xlim([min(log_alphas) - 0.1, max(log_alphas) + 0.3])
#Achsenbeschriftung
plt.xlabel("Regularisierungsparameter λ(-log10)", fontsize=13)
plt.ylabel("Regressionskoeffizienten", fontsize=13)
#Linie skalieren
plt.grid()