あれもPython,これもPython

Pythonメモ※本サイトはアフィリエイトを利用しています

PythonでLasso回帰をしたい

データ数が少ないにもかかわらず、特徴量が多い時や、単純に特徴の重要度を確認したいことがあります。

決定木系であれば、feature_importances_でみつつ、増減できますが、回帰の場合、回帰係数は取得できても、重要度は取得できません。

一応、statsmodelsなどで、p値などをみながら消すことができますが、それ以外にsklearnにも実装されているlassoで回避する方法もあります。

from sklearn.linear_model import Lasso
from sklearn.preprocessing import StandardScaler


#Lassoには標準化が必須
ss = StandardScaler()
ss_X = ss.fit_transform(X)

#罰則の強さ/より減らしたい時は大きくする
reg_l2 = Lasso(alpha=3.0)
reg_l2.fit(X,y)


#重要度の確認
reg_l2.coef_

#モデルは普通にpredictなどもできる

Ridgeやその組み合わせのElasticNetもありますが、上記目的のため、Lassoが楽かな、、、という感じです。

なお、クロスバリデーションも同時にやってくれるLassoCVというのもあります。