LoginSignup
0
1

More than 1 year has passed since last update.

機械学習勉強記録 Lasso回帰で過学習を避ける

Last updated at Posted at 2021-06-16

1 回帰

回帰とは、実測値に対して、アルゴリズムを選択し、実測値を近似できるように当てはめることです。
近似結果を直線で表現する線形回帰と、直線ではない形で表現する非線形回帰があります。

線形回帰の有名なアルゴリズムは、
単回帰分析、重回帰分、Ridge 回帰(リッジ回帰)、Lasso 回帰(ラッソ回帰)
などがあります。
非線形回帰の有名なアルゴリズムは、
決定木(回帰木)、ランダムフォレスト、ニューラルネットワーク
などがあります。

1.1 正則化とノルム

まず、正則化とノルムについて。
正則化(regularization)とは、過学習を抑制するためによく用いられる手法で、
目的関数に、「正則化項(モデルの複雑性に罰則を科すための追加の項)」を導入します。

ノルムは、平面あるいは空間におけるベクトルの「長さ」の概念です。
3次元までは図で示すことができるんですが、4次元以上になると図で示すことができないんですよね。
でも数式上では表すことができるという、感覚的に理解するのがなかなか難しいものです。
L2ノルムとL1ノルムがあり、
L2ノルム $||w||_2$ = ベクトル成分同士の差の二乗和の平方根
L1ノルム $||w||_1$ = ベクトル成分同士の差の絶対値の和
で表されます。

2 Lasso回帰

Ridge回帰やLasso回帰は、
・アルゴリズム的に説明性が高いものを使いたい時
・変数の量があまりにも多く、人間の目で確認するのが難しい時で、特徴量の取捨選択をしたい時
に使われるアルゴリズムです。

Lasso回帰は重回帰分析に対して、L1ノルムを使用して正則化を行う手法です。
式で表すと、このようになります。

$ L=||Xw-t||_2^2+\alpha||w||_1$

そもそも目的関数$L$が0に近い時の重みを求めるのが重回帰分析でした。
$||Xw-t||_2^2$はノルムで書いてあるのでややこしく感じますが、
$Xw$は入力変数×重み、つまり実測値$y$
$t$は目標値で、
重回帰分析でいう$L=(y-t)^2$と同じと思って大丈夫です。
(実測値-目標値)の2乗が0に近いほど、目的関数として良いということだけ抑えましょう。

Lasso回帰では、重回帰分析に$\alpha||w||_1$という正則化項が追加されます。
なので、$L$を0に近づけるためには、$||Xw-t||_2^2$の中の$w$が小さくなる必要があります。
すると$w$が小さくなり、0になるものも現れます(こうして0になった$w$を含んでいる状態をスパース性がある、という)。
0になる$w$がいくつか現れれば、結果的に変数の数を減らすことができる、というわけです。

2.1 Lasso回帰の実装

Lasso 回帰も今までと同様に scikit-learn で簡単に実装が可能です。

from sklearn.model_selection import train_test_split
x_train, x_test, t_train, t_test = train_test_split(x, t, test_size=0.3, random_state=0)

train_test_splitで分割したデータをもとに、Lasso回帰をします。

# モデルの定義
from sklearn.linear_model import Lasso
lasso = Lasso(alpha=1)
# モデルの学習
lasso.fit(x_train, t_train)
Lasso(alpha=1)
# モデルの検証
print('train score : ', lasso.score(x_train, t_train))
print('test score : ', lasso.score(x_test, t_test))

ここで、alpha=1としているのは、正則化の強さを表します。
正則化項の値が大きくなればなるほど、重み$w$が小さくなるということですね。

原理を理解して使うのは骨が折れますが、
とりあえず、使い方だけ覚えておくのでも問題ないかなと思いました。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1