Pythonではじめる機械学習を読み始めた。

  • Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎: Andreas C. Muller
  • https://amzn.to/3d4gJ16

今日は、線形回帰について。今まで、線形回帰は以下の式で表されるものだと思っていた。

$$

\hat{y} = w[0]✕x[0]+w1✕x1 ・・・w[p]✕x[p] + b

$$

しかし、実は正則化項が加えられることで、呼び名があることをしった。

  • L1正則化 ・・・Lasso回帰
  • L2正則化 ・・・Ridge回帰

この辺の知識を本から抜き出してメモ。ついでに、Kaggleも解いた。

線形モデル

線形モデルは入力特徴量の線形関数を用いて予測を行う。

  • 単一の特徴量に対しては、予測が直線になる回帰モデルとして特徴づけられる。特徴量が2つならば予測は平面に、高次元においては予測は超平面になる。
  • 多数の特徴量を持つデータに対しては、線形モデルは非常に強力。

線形回帰

線形回帰、もしくは 通常最小二乗法(OLS) は、最も単純で、最も古典的な線形回帰手法。線形回帰では、訓練データにおいて、予測と真の回帰ターゲットyとの平均二乗誤差が最小になるようにパラメータwとbを求める。

from sklearn.linear_model import LinearRegression
lr = LinearRegression().fit(X_train, y_train)
  • 1次元データセットでは、過剰適合の危険は少ない。
  • 高次元データセットに対しては、線形モデルは、より強力になるので、過剰適合の可能性が高くなる。

リッジ回帰

リッジ回帰 は線形回帰モデルによる回帰の1つである。予測に用いられる式は、通常最小二乗法のものと同じである。しかし、リッジ回帰では、係数(w) を、訓練データに対する予測だけではなく、他の制約に対しても最適化する。

  • 予測をうまく行いつつ、個々の特徴量が出力に与える影響をなるべく小さくしたい。これは、正則化(L2正則化)の一例である。
  • 十分な訓練データがある場合には、正則化はあまり重要ではなくなる。つまり、リッジ回帰と線形回帰は同じ性能を出す。
  • リッジ回帰は、linear_model.Ridgeに実装されている。
from sklearn.linear_model import Ridge
clf = Ridge()
clf.fit(X_train, y_train)

KaggleのHouse Prices: Advanced Regression Techniquesコンペを解いてみた。

Lasso回帰

Lasso回帰 は、L1正則化をかける。L1正則化の結果、いくつかの係数が完全に0になる。これは、モデルにおいていくつかの特徴量が完全に無視されるということになる。

  • 係数を0に向かわせる強さを制御する正則化パラメータalphaがある。
  • 適合不足の度合いを減らすためには、alphaを減らせば良い。
  • Lassoは、linear_model.Lassoに実装されている。
from sklearn.linear_model import Lasso
clf = Lasso()
clf.fit(X_train, y_train)

KaggleのHouse Prices: Advanced Regression Techniquesコンペを解いてみた。これで、上位50%まで行った。優秀だ。

まとめ

実際につかう場合は、リッジ回帰をまず試すのがよい。特徴量がたくさんあって、そのうち重要なのはわずかしかないことが予想されるのであれば、Lassoのほうが向いている。