Ich habe ein Diagramm wie R glmnet in Python für die spärliche Modellierung mit Lasso geschrieben

Ich wollte ein Diagramm schreiben, das aussieht, als wäre es mit R glmnet in Python gezeichnet

Das Problem mit der Lasso-Regression in Python

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. glmnet-lasso-solution-path.png

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.

Ich habe versucht, mit Python ein Diagramm zu erstellen, das mit glmnet herauskommt

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. co_Figure 2020-08-14 121012.png

score_Figure 2020-08-14 121045.png

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! !!

Wenn Sie mit "Lasso" und spärlicher Modellierung rechnen, können Sie sehen, dass diese beiden Diagramme auch in "Python" enthalten sind.

Recommended Posts

Ich habe ein Diagramm wie R glmnet in Python für die spärliche Modellierung mit Lasso geschrieben
Ein Memo, das ich schnell in Python geschrieben habe
Ich habe eine Klasse in Python3 und Java geschrieben
Ich habe Python auf Japanisch geschrieben
Ich habe mit Tkinter of Python ein Puzzlespiel (wie) gemacht
Ich habe Fizz Buzz in Python geschrieben
Ich habe die Warteschlange in Python geschrieben
Ich habe den Stack in Python geschrieben
Ich habe eine Funktion zum Laden des Git-Erweiterungsskripts in Python geschrieben
Ich habe ein Skript geschrieben, um Webseiten-Links in Python zu extrahieren
Ich habe einen Tri-Tree geschrieben, der für die Implementierung von Hochgeschwindigkeitswörterbüchern in D-Sprache und Python verwendet werden kann
Ich habe einen Code geschrieben, um die Quaternion mit Python in einen Ölerwinkel vom Typ z-y-x umzuwandeln
Ich habe ein Pay-Management-Programm in Python erstellt!
[Python] Ich habe gewaltsam eine kurze Funktion zur Erzeugung von Parlin-Geräuschen in Numpy geschrieben.
Holen Sie sich ein Zeichen für Conoha mit Python
Ich habe mit Python nach einer Primzahl gesucht
Ich habe ein Passwort-Tool in Python erstellt.
Ich habe FizzBuzz in Python mit der Support Vector Machine (Bibliothek LIVSVM) geschrieben.
[Basic Information Engineer Examination] Ich habe einen linearen Suchalgorithmus in Python geschrieben.
Ich suchte nach den Fähigkeiten, die erforderlich sind, um Webingenieur bei Python zu werden
Ich habe eine Python-Wörterbuchdatei für Neocomplete erstellt
Zeichnen Sie in Python ein Diagramm einer quadratischen Funktion
Ich möchte mit Python ein Fenster erstellen
Erstellen Sie in Python ein Diagramm der Standardnormalverteilung
Ich habe versucht, mit Python ein Tippspiel zu spielen
Geschrieben "Einführung in die Effektüberprüfung" in Python
Ich habe ein Designmuster in der Kotlin Prototype Edition geschrieben
Machen Sie mit Python eine Joyplot-ähnliche Handlung von R.
Ich habe versucht, ein Python 3-Modul in C hinzuzufügen
Ich habe einen japanischen Parser auf Japanisch mit Pyparsing geschrieben.
Ich habe ein Caesar-Kryptografieprogramm in Python erstellt.
Ich habe ein gestapeltes Balkendiagramm mit matplotlib von Python erstellt und eine Datenbeschriftung hinzugefügt
Das Konzept der Referenz in Python brach für einen Moment zusammen, also experimentierte ich ein bisschen.
Zeichne ein Diagramm mit Julia ... Ich habe eine kleine Analyse versucht
Ich habe versucht, die in Python installierten Pakete grafisch darzustellen
Ich möchte eine Variable in einen Python-String einbetten
Ich möchte Timeout einfach in Python implementieren
Ich habe ein Designmuster in der Kotlin Factory Edition geschrieben
Erstellen einer R- und Python Docker-Arbeitsumgebung
Ich habe ein Designmuster in der Kotlin Builder Edition geschrieben
Ich möchte in Python schreiben! (2) Schreiben wir einen Test
Bis zum Zeichnen eines 3D-Diagramms mit Python in Windows 10
Ich habe ein Designmuster in der Kotlin Singleton Edition geschrieben
Versuchen Sie, in Python nach einem Profil mit einer Million Zeichen zu suchen
Ich habe eine VM erstellt, auf der OpenCV für Python ausgeführt wird
Ich habe ein Designmuster in der Kotlin Adapter Edition geschrieben
Ich habe versucht, einen Pseudo-Pachislot in Python zu implementieren
Ich habe ein Designmuster in Kotlin geschrieben, das von Iterator bearbeitet wurde
Ich möchte eine Datei mit Python zufällig testen
Ich möchte mit einem Roboter in Python arbeiten.
[Python] Ich habe einen Klassifikator für Iris erstellt [Maschinelles Lernen]
Ich habe ein Designmuster in der Kotlin Template Edition geschrieben
Ich möchte R-Datensatz mit Python verwenden
Ich möchte Strings in Kotlin wie Python manipulieren!
Proxy für Python-Pip festlegen (beschrieben in pip.ini)
Ich habe einen Vim-ähnlichen Ersetzungsbefehl in Slackbot #Python implementiert
Ich habe python3.4 in .envrc mit direnv geschrieben und es zugelassen, aber ich habe einen Syntaxfehler erhalten