機械学習の線形モデルについてまとめています。
データ分析などにも広く使われる手法で、アルゴリズムにかなりのバリエーションがありますが、この記事では代表的なものをまとめています。
線形モデルの概要
変数間に線形の関係を仮定するモデルを全般的に線形モデルと言います。
回帰、分類どちらにも使用できます。
回帰モデル
回帰に関しては、目的変数と説明変数の間に線形関係を仮定するというのが基本的なアイディアです。
を目的変数、 を説明変数とすれば下記のような関係を仮定します。
回帰の代表的なバリエーションは下記の通りです。
最小二乗法による回帰
損失関数を最小化することによりパラメーターを学習する。
損失関数には二乗誤差を用いる。
統計の教科書などでも一番最初に出てくる最も基本的なアルゴリズム。
Ridge 回帰
損失関数を最小化することによりパラメーターを学習する。
損失関数には二乗誤差と L2 正則化項の和を用いる。
下記の式の により正則化項の影響度合いを調整する。
Lasso 回帰
損失関数を最小化することによりパラメーターを学習する。
損失関数には二乗誤差と L1 正則化項の和を用いる。
下記の式の により正則化項の影響度合いを調整する。
Ridge 回帰で使われる L2 正則化項は、パラメーターが小さくなるほどパラメーターの値の増減が L2 正則化項に影響を与えなくなる。
そのため、二乗誤差の減少に寄与しない変数であっても、対応するパラメーターは完全な 0 にはなりにくい。
一方、Lasso 回帰では、パラメーターが小さくなっても、パラメーターの値の増減が L1 正則化項に与える効果は変わらない(微分値が一定)。
そのため、二乗誤差の減少に寄与しないパラメーターは 0 になる。
これは、モデルの学習と一緒に変数選択をしているとみなることもできる。
MAP 推定による回帰
ベイズ的なモデル(モデルのパラメーターも確率分布から生じると解釈するようなモデル)において、最も高い事後確率を与えるパラメーターを学習結果として採用する。
分類モデル
分類では、変数間の線形式(超平面)によりクラスを分割するというのが基本的なアイディアです。
この式によって、 の領域とそうでない領域の2つに分離されます。
つまり、このままでは 2 クラスにしか分類できません。
線形モデルを使って、K 個のクラスの分類問題を解く場合には、対象のクラスとそれ以外を分離する分類器(1対他分類器)を K - 1 個作るというプローチが使われます。
(ロジスティック回帰の場合、多クラス問題への拡張が可能だが、結局やっていることは上記したクラスの数だけ分離超平面を求める方法とかなり近い)
別のアプローチとして、すべての可能な 2 クラスの組み合わせに対する (K-1)/2 個の 1対1分類器を作成して多数決を取るというような方法もあります。
分類に関しては下記が代表的です。
ロジスティック回帰
損失関数を最小化することにより分離超平面のパラメーターを学習する。
損失関数として交差エントロピー誤差が使われる。
ちなみに、概念的には交差エントロピーに L1・L2 正則化項を加えて損失関数とするようなアルゴリズムがあっても良さそうだと思ったがあまり記載が見つからなかった。
sklearn で RidgeClassifier というモデルが提供されているが、ソースを読む限り Ridge 回帰によって分離平面を求めているように見えた。(多分)
数学的に最適化が難しいわけではないと思うので、性能が良くないなど何か理由があるのかも。
SVM (Support Vector Machine)
分類と回帰の両方に使えるが、主に分類問題で使用される。
分離平面を引いたときに、分離平面とサポートベクトル(最も分離平面から近いサンプル)との距離を最大化するように分離平面を引くことが基本的なアイディア。
実際には、分離平面によりうまく分類できなかったサンプルを考慮して分離平面を決定する。
本来は線形モデルの一種であるが、カーネル法と組み合わせて使われることのほうが多い。
実装
基本的なアルゴリズムであるため、機械学習系のライブラリや分析ツールではデフォルトで実装されていることが多いです。
scikit-learn では、 sklearn.linear_model や sklearn.svm 配下にまとめられています。
- https://scikit-learn.org/stable/modules/classes.html#module-sklearn.linear_model
- https://scikit-learn.org/stable/modules/classes.html#module-sklearn.svm
他の手法に対する利点
他の手法に対して下記のような点が利点です。
- 学習、予測ともに高速である
- 学習結果に対する解釈が、(他の手法に比べると)比較的容易である
注意点
使用する際の注意点は下記の通りです。
- データのスケールによって結果が異なるため正規化をする必要がある
- 目的変数に対して、説明変数の線形性を期待することはとても強い制約となりうる
- 説明変数同士の相乗効果などを考慮しない(アルゴリズムによる)
後者については、例えば、ある変数に対して下記のような依存性がある場合にも正しい関係性を学習することは難しい。
- 周期性
- 線形以外の関係(対数、指数など)
- 複数の変数の交差項などに対しての依存
ケースによっては、下記の手法が性能改善に効果がある可能性がある。
- 説明変数の変数変換
- 特定の数の剰余を使った特徴生成
- カーネルトリック