LoginSignup
1
3

More than 1 year has passed since last update.

ロジスティック回帰 penaltyについて

Last updated at Posted at 2021-07-28

はじめに

Kaggleでロジスティック回帰を使用してモデルのスコアを向上させようともがく中でGridsearchという方法を知った。
ロジスティック回帰のパラメータを全通り実行することで、最もいいパラメータを求めるというやり方だ。

なんてCPUと時間にものを言わせたやり方なんだ!全く理解していなくとも脳死でできるじゃないか!最高!

流石に社会にでて脳死で全パラメータやりました!意味は知らないですけど!とは言えないので簡単に理解することを目的とする。

ロジスティック回帰とは

線形回帰にロジット関数をかけることで説明変数がどんな値でもなんらかの目的変数を取るようにするやり方。

$$ロジット関数 : log(\frac{p}{1-p})$$

2値分類、説明変数1つと仮定すると

$$log(\frac{p}{1-p}) = \beta_0 + \beta_1x$$
$$\beta_0 : 切片, \beta_1 :傾き$$

で表される。さあこれをp(目的変数が1である確率)について解くと

$$p=\frac{1}{1 + exp(\beta_0 + \beta_1x)}$$

になる。このβ0とβ1を最適化していきたいっていう話。

ここで使うのが尤度関数と呼ばれる関数。(大学で学んだ気もする)
それっぽい値にしていくっていう関数のイメージ

$$p_n = y_n^{t_n}(1-y_n)^{1-{t_n}}$$
$$t_n : Positiveなら1 Negativeなら0をとる値$$

仮にtnが1(正解)ならyn(正解を取る確率)を上げていきたいよねっていうイメージ
これの積を求めて多変数に対応させると

$$L(\beta) = \prod_{n=1}^{n}y_n^{t_n}(1-y_n)^{1-{t_n}}$$

になる。掛け算は計算量が膨大になることと、-を取ることで最小化問題にしたいので-logを掛ける。

$$-logL(\beta) = -\sum_{n=1}^{n}(t_nlog{y_n} + (1 - t_n)log(1-y_n))$$

という式になる。この式を交差エントロピー誤差関数と呼ぶらしい。
これのynに含まれるβで微分すると

$$\frac{d}{db}L(\beta) = \sum_{n=1}^{n}x_n(y_n - t_n)$$

になる。この式は勾配降下法の式らしいけどよく知らない。
求め方は微分の分配だけど描くの面倒なので画像でも貼る。

Imgur

本題

かなり前置きが長くなったが、本題であるパラメータの話に移る。
公式docmentから

  • penalty
  • dual
  • solver...

とparamが並ぶが今回はpenaltyの話。
時間があったら全パラメータ解説していく。

penaltyの種類

公式より
https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html#sklearn.linear_model.LogisticRegression

penalty : {‘l1’, ‘l2’, ‘elasticnet’, ‘none’}, default=’l2’
Used to specify the norm used in the penalization. The ‘newton-cg’, ‘sag’ and ‘lbfgs’ solvers support only l2 penalties. ‘elasticnet’ is only supported by the ‘saga’ solver. If ‘none’ (not supported by the liblinear solver), no regularization is applied.

New in version 0.19: l1 penalty with SAGA solver (allowing ‘multinomial’ + L1)

L1,L2,elasticent,noneの4つがあるらしい。
調べていくと

  • L1 (Rasso)
    いくつかの特徴量を0にしてしまって過学習を防ぐやり方
    課題としてサンプル数nより特徴量pが大きい場合、pの取れる最大値はnになってしまう

  • L2 (Ligge)
    数値の絶対量を減らすことで過学習を防ぐやり方。イメージとして標準化と同じ?

  • elasticnet
    L1,L2の両方を使用して使うやり方。L1とL2bの前に重みをつけることによって最適な値を回数を回すことで求めようとするやり方。
    L1が使えてないのであれば、L2に自動的に切り替えてほしかったけどそういうわけにもいかないのかな
    とりあえずこれを使えばいいと思うのだけれどdefaultがl2なのでなんらかの欠点があるのかもしれない

  • NONE
    多分なんの正則化も行なっていない

公式に出てくる‘newton-cg’とかは最適化問題に使う関数の種類のこと。使える組み合わせと使えない組み合わせがあるっぽい。
次はsolverについて書こうと思う。

1
3
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
1
3