[PYTHON] Calcul d'estimation / prédiction au Lasso et Ridge du modèle linéaire généralisé

La mise à jour s'est arrêtée pendant un moment et le blog était en train de mourir, mais j'ai pensé à nouveau que je devais écrire ce que je faisais, ce que je recherchais et ce que je pensais, alors je vais l'écrire dur. Tsukkomi etc. sont les bienvenus, mais soyez gentils avec nous.

Qu'est-ce qu'un modèle linéaire généralisé?

L'abréviation est GLM (modèle de ligne généralisée), qui est un modèle qui étend la régression linéaire afin qu'il puisse gérer des distributions autres que la distribution normale.

Qu'est-ce que Lasso et Ridge?

Le lasso est une technique de normalisation pour estimer des modèles linéaires généralisés. Pour une explication détaillée, le lien ci-dessous est exact.

Lasso et Elastic Net pour les modèles linéaires généralisés

Lasso et Ridge ont tous deux la caractéristique qu'une solution clairsemée peut être obtenue en ayant une «pénalité» qui contraint la taille du coefficient estimé.

J'ai écrit un peu sur ce domaine avant, mais comme il s'agit d'un estimateur de réduction dans Lasso, on suppose qu'il y a des variables qui ne sont pas utilisées. L'estimateur Lasso a moins d'erreur que l'estimateur le plus probable habituel et donne généralement de meilleures estimations et prédictions que la méthode des moindres carrés.

La régression de crête est également une méthode pour effectuer une pénalité et empêcher l'apprentissage, et elle est efficace lorsque vous souhaitez éviter une colinéarité multiple car il existe une forte corrélation entre plusieurs variables explicatives.

Dans Lasso, l'implémentation par scikit-learn est la suivante.

(1 / (2 * n_samples)) * ||y - Xw||^2_2 + alpha * ||w||_1

C'est là que vous souhaitez créer un modèle simple en supprimant la complexité et en insérant quelques variables explicatives sélectionnées.

Si le terme de régularisation λ est 0, il correspond à la méthode des moindres carrés. Si λ est petit, la pénalité est lâche et compliquée, et si elle est grande, la pénalité est sévère et le modèle est simple.

Pour déterminer le terme de régularisation, Cross test Il existe une soi-disant validation croisée.

Lasso, Ridge avec scikit-learn

sklearn implémente Lasso et Ridge sous sklearn.linear_model.

Alors

import sklearn.linear_model as lm

Après tout, vous pouvez l'appeler comme lm.Lasso.

Lasso http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.Lasso.html#sklearn.linear_model.Lasso

Il existe certains paramètres lors de la création d'une occurrence de Lasso.

C'est vraiment la même chose, alors veuillez consulter la page officielle à partir du lien ci-dessus. Je viens de tracer ce qui suit

from sklearn import linear_model
clf = linear_model.Lasso(alpha=0.1)
clf.fit([[0,0], [1, 1], [2, 2]], [0, 1, 2])
#=> Lasso(alpha=0.1, copy_X=True, fit_intercept=True, max_iter=1000,
#         normalize=False, positive=False, precompute=False, random_state=None,
#         selection='cyclic', tol=0.0001, warm_start=False)
print(clf.coef_)
#=> [ 0.85  0.  ]
print(clf.intercept_)
#=> 0.15

L'ajustement (apprentissage) avec la méthode fit et la prédiction avec la méthode prédire sont comme d'habitude.

Ridge http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.Ridge.html#sklearn.linear_model.Ridge

from sklearn import linear_model
clf = linear_model.Ridge (alpha = .5)
clf.fit ([[0, 0], [0, 0], [1, 1]], [0, .1, 1]) 
#=> Ridge(alpha=0.5, copy_X=True, fit_intercept=True, max_iter=None,
#=>       normalize=False, solver='auto', tol=0.001)
clf.coef_
#=> array([ 0.34545455,  0.34545455])
clf.intercept_ 
#=> 0.13636...
from sklearn.linear_model import Ridge
import numpy as np
n_samples, n_features = 10, 5
np.random.seed(0)
y = np.random.randn(n_samples)
X = np.random.randn(n_samples, n_features)
clf = Ridge(alpha=1.0)
clf.fit(X, y) 
#=> Ridge(alpha=1.0, copy_X=True, fit_intercept=True, max_iter=None,
#         normalize=False, solver='auto', tol=0.001)

Et pour scikit-learn, le test croisé Lasso LassoCV et la régression Lasso LassoRegression, également [RidgeCV](http://scikit-learn.org/ stable / modules / generated / sklearn.linear_model.RidgeCV.html # sklearn.linear_model.RidgeCV) et [RidgeRegression](http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.RidgeClassifier.html#sklassifier.html .linear_model.RidgeClassifier) En outre, il existe différentes implémentations de Modèle linéaire, alors jetez un œil ici. Cependant, nous ajusterons les paramètres pour trouver le modèle approprié.

Cette fois, c'est fini.

Recommended Posts

Calcul d'estimation / prédiction au Lasso et Ridge du modèle linéaire généralisé
Différence entre la régression linéaire, la régression Ridge et la régression Lasso
Ridge et Lasso
Le modèle linéaire généralisé (GLM) et le réseau neuronal sont les mêmes (1)
Le modèle linéaire généralisé (GLM) et le réseau neuronal sont les mêmes (2)
Mémorandum de sauvegarde et modèle de chargement
Calcul de la classe auto-fabriquée et de la classe existante
Calcul de similarité entre les épisodes précurseurs à l'aide de la chronologie en direct et du modèle de sujet