Derzeit gibt es Leute, die "Scikit-Learn" in "Python" verwenden, um die "Lasso" -Regression zu berechnen. Ich berechne auch mit Python
. Ich bin jedoch neidisch, wenn ich die Grafik von "Lasso" der Person sehe, die mit "glmnet" von "R" berechnet.
Der Graph von R ist ein solcher Graph. .. Nachdruck aus So führen Sie eine spärliche Schätzung durch LASSO mit dem R / glmnet-Paket durch.
Es ist leicht zu verstehen, nicht wahr? Es ist leicht zu sehen, wie sich der Regressionskoeffizient ändert, wenn sich $ λ $ (Scikit-Learn
in Pyhon
ist alpha
) ändert. Dies ist jedoch nicht in "Scikit-Learn" implementiert.
Ich habe auch so ein Diagramm gemacht! !! Ich dachte, ich hätte diesmal ein Skript von "Python" gemacht. Ohne ein solches Diagramm können Sie keine spärliche Modellierung durchführen. Selbst wenn Sie nur den Score und den Regressionskoeffizienten mit "Scikit-Learn" angeben, scheinen Sie die Fähigkeit der spärlichen Modellierung mit "Lasso" nicht gesehen zu haben.
Deshalb habe ich es selbst mit der For-Anweisung gemacht.
Ich habe über verschiedene Dinge nachgedacht, aber auf solide Weise habe ich die Lasso-Regression wiederholt, während ich den mit numpy erstellten numerischen Wert in die For-Anweisung im Alpha (Lambda) eingefügt und den Regressionskoeffizienten und die Punktzahl berechnet habe. Ich habe berechnet.
# -*- coding: utf-8 -*-
from sklearn import datasets
from sklearn.model_selection import train_test_split
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import Lasso
#Laden Sie den Boston-Datensatz
boston = datasets.load_boston()
alpha_lasso = []
coef_list = []
intercept_list = []
train_score = []
test_score = []
#print(boston['feature_names'])
#Getrennte Merkmalsmenge und Zielvariable
X = boston['data']
y = boston['target']
X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.8,random_state = 0)
#Bestimmen Sie den Suchbereich
lasso_1 = np.linspace(0.01,100,1000)
for i in lasso_1:
#Trainiertes und erstelltes Lasso-Regressionsmodell
Lasso_regr = Lasso(alpha = i, max_iter=10000)
Lasso_regr.fit(X_train,y_train)
pre_train = Lasso_regr.predict(X_train)
pre_test = Lasso_regr.predict(X_test)
#Ergebnisse anzeigen
print("alpha=",i)
print("Passend für Trainingsdaten")
print("Genauigkeit der Trainingsdaten=", Lasso_regr.score(X_train, y_train))
print("Passend für Testdaten")
print("Testen Sie die Genauigkeit der Daten=", Lasso_regr.score(X_test, y_test))
alpha_lasso.append(i)
coef_list.append(Lasso_regr.coef_)
intercept_list.append(Lasso_regr.intercept_)
train_score.append(Lasso_regr.score(X_train, y_train))
test_score.append(Lasso_regr.score(X_test, y_test))
df_count = pd.Series(alpha_lasso,name = 'alpha')
df_coef= pd.DataFrame(coef_list,columns = boston.feature_names)
df_inter = pd.Series(intercept_list,name = 'intercept')
df_train_score = pd.Series(train_score,name = 'trian_score')
df_test_score = pd.Series(test_score,name = 'test_score')
#Erstellen Sie nun ein Diagramm mit Alpha und Regressionskoeffizient
plt.plot(df_count,df_coef)
plt.xscale('log')
plt.legend(labels = df_coef.columns,loc='lower right',fontsize=7)
plt.xlabel('alpha')
plt.ylabel('coefficient')
plt.title('alpha vs cosfficent graph like R/glmnet')
plt.show()
#Erstellen Sie nun ein Diagramm mit Alpha und Regressionskoeffizient
df_score = pd.concat([df_train_score,df_test_score], axis=1)
plt.plot(df_count,df_score)
plt.xscale('log')
plt.legend(labels = df_score.columns,loc='lower right',fontsize=8)
plt.xlabel('alpha')
plt.ylabel('r2_score')
plt.title('alpha vs score(train/test)')
plt.show()
Dies ist das fertige Diagramm.
Wenn Sie das Diagramm, das den Regressionskoeffizienten spart, auf diese Weise mit dem Diagramm der Punktzahl vergleichen, können Sie auf einen Blick sehen, wie viel "Alpha" getan werden sollte. Ich denke, dass 0,5 besser ist als die Standardeinstellung 1. Wenn es größer als dieses ist, sinkt die Punktzahl, und wenn es kleiner als dieses ist, erhöht sich die Punktzahl nicht, aber die Feature-Menge, die als unnötig beurteilt wird, wenn es spärlich ist, wird eingeschlossen. Es fühlt sich also so an, als wäre 0,5 genau richtig.
Wenn Sie mit "Lasso" und spärlicher Modellierung rechnen, können Sie sehen, dass diese beiden Diagramme auch in "Python" enthalten sind.
Recommended Posts