このページでは、厳密な数学的理論はさておき、実務として使う場合に必要な知識をまとめています。
目的変数を\( y \)、説明変数を\( \mathbf x = (x_1 ~ x_2 ~ \cdots ~ x_n) \)、学習によって決まる値(パラメータ、重み)を\( \mathbf w = (w_0 ~ w_1 ~ w_2 ~ \cdots ~ w_n) \)とする。 転置記号は省略する。
パラメータ表の赤字はscikit-learnのデフォルト値で、特に指定がなければこの値となる。
ハイパーパラメータ(モデルの設定値)は基本的にデフォルト値で問題ない。 デフォルト値で精度が出ない場合に少しずつ変更していくのが良い。 ただし、正直言ってほとんどの場合はハイパーパラメータをいじったところで大きく精度が変わることはない。 精度を上げたいなら、まずはデータの品質向上や前処理など、特徴量エンジニアリングに注力するべきである。 Gabbage In, Gabbage Out(ゴミを入れればゴミが出る)の精神を忘れずに。
目的変数が確率、または二値である場合に使用できる比較的シンプルなモデル。
多クラス分類にも対応している。
パラメータ\( \mathbf w \)は各説明変数が目的変数に与える影響度をそのまま表す。
L1正則化(penalty='l1')を適用することで不要な説明変数を炙り出すこともできる。
$$f(\mathbf x) = \frac{1}{1 + e^{-(w_0 + w_1 x_1 + w_2 x_2 + ... + w_n x_n)}}$$
※ 多クラス分類の場合は各クラス\( k \)に対して以下の式で確率を計算する。(ソフトマックス)
$$f_k(\mathbf x) = \frac{e^{w_{0,k} + w_{1,k} x_1 + w_{2,k} x_2 + ... + w_{n,k} x_n}}{\sum_{k=1}^{K} e^{w_{0,k} + w_{1,k} x_1 + w_{2,k} x_2 + ... + w_{n,k} x_n}}$$
| 主要なパラメータ | 値 | 説明 |
|---|---|---|
| penalty | l2, l1, elasticnet, none |
正則化の種類。
|
| C | 1.0 | 正則化の強さ。正則化項に係る分数の分母の値なので、値を小さくするとより強いパラメータ制限がかかる。 |
| solver | lbfgs, liblinear, newton-cg, newton-cholesky, sag, saga |
最適化アルゴリズム。
penalty='l2'またはpenalty=Noneのときはlbfgsで良い。
penalty='l1'またはpenalty='elastic'のときはsagaで良い。
|
| max_iter | 100 | 最適化アルゴリズムの最大反復回数。 少ないと学習が収束する前に計算が終わってしまうが、多いと計算時間が長くなる。 基本的に1000回あれば十分収束する印象。 |
| l1_ratio | None |
penalty='elasticnet'のときの、L1正則化の強さ。
0.5なら、\( 0.5 \times L1 + 0.5 \times L2 \)。
0.3なら、\( 0.3 \times L1 + 0.7 \times L2 \)。
|
$$f( \mathbf x) = \textrm{sgn} \left( \mathbf w \mathbf x + b \right) = \textrm{sgn} \left( \sum_{i=1}^{N} \alpha_i y_i K(\mathbf x_i, \mathbf x) + b \right)$$
※ sgn関数(符号関数)は、入力が正なら1、負なら-1を返す関数。\( \mathbf x_i \)は学習データ、\( y_i \)は学習データのラベル、\( \alpha_i \)はラグランジュ乗数、\( K(\mathbf x_i, \mathbf x) \)はカーネル関数。