J'ai écrit un graphe comme R glmnet en Python pour une modélisation clairsemée avec Lasso

Je voulais écrire un graphique qui ressemble à un tracé avec R glmnet en Python

Le problème de la régression Lasso en Python

Pour le moment, il y a des gens qui utilisent Scikit-Learn dans Python pour calculer la régression Lasso. Je calcule aussi avec Python. Cependant, je me sens envieux quand je vois le graphique de «Lasso» de la personne qui calcule avec «glmnet» de «R». Le graphe de R est un tel graphe. .. Réimprimé de Comment effectuer une estimation parcellaire par LASSO avec le package R / glmnet. glmnet-lasso-solution-path.png

C'est facile à comprendre, n'est-ce pas? Il est facile de voir comment le coefficient de régression change lorsque $ λ $ (Scikit-Learn dans Pyhon est ʻalpha) change. Mais ceci n'est pas implémenté dans Scikit-Learn`.

J'ai aussi fait un tel graphique! !! J'ai pensé, j'ai fait un script de python cette fois. Vous ne pouvez pas faire de modélisation éparse sans un tel graphique. Même si vous ne donnez que le score et le coefficient de régression avec Scikit-Learn, il semble que vous n'ayez pas vu la capacité de la modélisation clairsemée effectuée avec Lasso.

J'ai essayé de faire un graphique qui semble sortir avec glmnet avec Python

C'est pourquoi je l'ai fait moi-même en utilisant l'instruction For.

J'ai réfléchi à diverses choses, mais de manière solide, j'ai répété la régression Lasso en mettant la valeur numérique créée avec numpy dans l'instruction For dans alpha ( lambda), et j'ai calculé le coefficient de régression et le score. J'ai calculé.

# -*- 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


#Charger le jeu de données Boston
boston = datasets.load_boston()

alpha_lasso = []
coef_list = []
intercept_list = []
train_score = []
test_score = []

#print(boston['feature_names'])
#Quantité de caractéristiques distincte et variable d'objectif
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)

#Déterminez la plage de recherche

lasso_1 = np.linspace(0.01,100,1000)

for i in lasso_1:
    #Modèle de régression Lasso formé et créé
    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)


    #Voir les résultats
    print("alpha=",i)
    print("Convient aux données d'entraînement")
    print("Exactitude des données d'entraînement=", Lasso_regr.score(X_train, y_train))
    print("Convient aux données de test")
    print("Exactitude des données de test=", 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')

#Maintenant, faites un graphique de l'alpha et du coefficient de régression
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()

#Maintenant, faites un graphique de l'alpha et du coefficient de régression
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()

Ceci est le graphique terminé. co_Figure 2020-08-14 121012.png

score_Figure 2020-08-14 121045.png

En comparant le graphique qui épargne le coefficient de régression avec le graphique du score de cette manière, vous pouvez voir d'un coup d'œil combien d '«alpha» doit être fait. Je pense que 0,5 est meilleur que la valeur par défaut 1. S'il est plus grand que cela, le score baissera, et s'il est plus petit que cela, le score n'augmentera pas, mais la quantité de fonctionnalités jugée inutile lorsque clairsemée sera incluse. On a donc l'impression que 0,5 est juste.

Si vous calculez avec Lasso et la modélisation clairsemée! !!

Si vous calculez avec Lasso et la modélisation creuse, vous pouvez voir que ces deux graphiques sont également inclus dans Python.

Recommended Posts

J'ai écrit un graphe comme R glmnet en Python pour une modélisation clairsemée avec Lasso
Un mémo que j'ai écrit un tri rapide en Python
J'ai écrit une classe en Python3 et Java
J'ai écrit python en japonais
J'ai fait un jeu de puzzle (comme) avec Tkinter of Python
J'ai écrit Fizz Buzz en Python
J'ai écrit la file d'attente en Python
J'ai écrit la pile en Python
J'ai écrit une fonction pour charger le script d'extension Git en Python
J'ai écrit un script pour extraire les liens de pages Web en Python
J'ai écrit un tri-arbre qui peut être utilisé pour l'implémentation de dictionnaire à grande vitesse en langage D et Python
J'ai écrit un code pour convertir quaternion en angle de graissage de type z-y-x avec Python
J'ai fait un programme de gestion de la paie en Python!
[Python] J'ai écrit de force une courte fonction de génération de bruit parlin dans Numpy.
Obtenez un jeton pour conoha avec python
J'ai cherché un nombre premier avec python
J'ai créé un outil de mot de passe en Python.
J'ai écrit FizzBuzz en python en utilisant la machine à vecteurs de support (bibliothèque LIVSVM).
[Examen d'ingénieur d'information de base] J'ai écrit un algorithme de recherche linéaire en Python.
J'ai recherché les compétences nécessaires pour devenir ingénieur web avec Python
J'ai créé un fichier de dictionnaire python pour Neocomplete
Dessiner un graphique d'une fonction quadratique en Python
Je veux créer une fenêtre avec Python
Créer un graphique de distribution normale standard en Python
J'ai essayé de jouer à un jeu de frappe avec Python
J'ai écrit "Introduction à la vérification des effets" en Python
J'ai écrit un modèle de conception dans l'édition Kotlin Prototype
Créez un tracé de R semblable à un joyplot avec python
J'ai essayé d'ajouter un module Python 3 en C
J'ai écrit un analyseur japonais en japonais en utilisant pyparsing.
J'ai créé un programme cryptographique César en Python.
J'ai créé un graphique à barres empilées avec matplotlib de Python et ajouté une étiquette de données
Le concept de référence en Python s'est effondré un instant, j'ai donc expérimenté un peu.
Dessine un graphique avec Julia ... j'ai essayé une petite analyse
J'ai essayé de représenter graphiquement les packages installés en Python
Je souhaite intégrer une variable dans une chaîne Python
Je veux facilement implémenter le délai d'expiration en python
J'ai écrit un modèle de conception dans l'édition Kotlin Factory
Création d'un environnement de travail Docker R et Python
J'ai écrit un modèle de conception dans l'édition Kotlin Builder
Je veux écrire en Python! (2) Écrivons un test
Jusqu'à dessiner un graphe 3D avec Python dans Windows10
J'ai écrit un modèle de conception dans l'édition Kotlin Singleton
Essayez de rechercher un profil d'un million de caractères en Python
J'ai créé une VM qui exécute OpenCV pour Python
J'ai écrit un modèle de conception dans l'édition Kotlin Adapter
J'ai essayé d'implémenter un pseudo pachislot en Python
J'ai écrit un modèle de conception en kotlin, édité par Iterator
Je veux échantillonner au hasard un fichier avec Python
Je veux travailler avec un robot en python.
[Python] J'ai créé un classificateur pour les iris [Machine learning]
J'ai écrit un modèle de conception dans l'édition de modèle kotlin
Je veux utiliser le jeu de données R avec python
Je veux manipuler des chaînes dans Kotlin comme Python!
Définir le proxy pour Python pip (décrit dans pip.ini)
J'ai implémenté une commande de remplacement de type Vim dans Slackbot #Python
J'ai écrit python3.4 dans .envrc avec direnv et je l'ai autorisé, mais j'ai eu une erreur de syntaxe