ElaticNet Regressor(回帰分析)【Pythonとscikit-learnで機械学習:第17回】

ElasticNet回帰によって、連続データを線形回帰分析する手法を、実装・解説します。

本記事ではElasticNetを実装します。

ElasticNet回帰はL1ノルムのペナルティとL2ノルムのペナルティの両方を与える解析手法です。

LassoとRidgeの組み合わせになります。

Elastic Net回帰分析は以下のscikit-learnマップの黒矢印に対応します。

[scikit-learnのマップ]

目的変数の量を求める→サンプル数10万以下→説明変数xの特徴量の一部が重要→[ElastiNet Regressor]

です。

ElasticNet Regressorの実装

実装して、Ridge回帰との結果を比較します。

これまでと同様に、住宅価格のデータを使用して実装します。

被説明変数yは住宅価格の中央値です。

本記事では、全部の特徴量を使用した回帰を行います。

実装コードは以下の通りです。

結果は次の通りになります。

係数を比較すると、ElasticNetではRidgeよりも0となっている係数が多いです。

※ただし、Lassoのときよりは少ないです。

実装コードを解説します。

#解説6:Elastic Net Regressorを適用する——————————————-
clf_er= linear_model.ElasticNet(alpha=1.0, l1_ratio=0.5)

ここでElasticNet回帰を指定しています。

アルファはL1およびL2ノルムのペナルティの大きさを示しており、アルファが大きいほど正則化(ペナルティ具合)が大きくなります。

l1_ratioは、L1, L2ペナルティのうち、L1の割合を示しています。

それでは「結局、ElaticNet Regressionって何をやっていたの?」を説明します。

ElasticNet Regressionの心

正確な情報は以下をご覧ください。

scikit-learnの回帰の解説ページ

scikit-learnのElasticNet Regressorの解説ページ

SGD回帰などと同じく、重みw, bを変化させて、学習データと回帰直線の誤差が少なくなる方向へ学習させます。

ただし、L1ノルムおよびL2ノルムのペナルティを誤差に加えています。

ElasticNetはLasso回帰では係数が0になりすぎる場合に使用します。

アルファでL1とL2の大きさを決め、l1_ratio(以下の式のロー)でL1の割合を設定します。

 

以上、Pythonとscikit-learnで学ぶ機械学習入門|第17回:ElasticNet回帰での回帰分析でした。

次回はSVR(Support Vector Regression)による回帰について説明します。

【目次】Python scikit-learnの機械学習アルゴリズムチートシートを全実装・解説
scikit-learnのアルゴリズムチートマップで紹介されている手法を、全て実装・解説してみました。 ...