ロジスティック回帰の話。
前回の続き。
ロジスティック回帰
ロジスティック回帰は"回帰"なのにやってることは分類???
そもそも"回帰"は予測値が連続値で、"分類"は予測値が離散値。
コードで書いてしまうと一瞬。
実際には色々計算してるんだけどね。
具体的には、シグモイド関数を使う。
入力xに対して出力yを0or1に分類するとき、y=1になる条件付き確率は
p = 1/{1+exp(-(ax+b))}
となる。y=1になる確率が半分以上でy=1、半分以下でy=0とすると、
任意の(xi,yi)に対して上の式が成り立つ。(、、、だよね!?)
この時、
exp(ax+b)=p/(1-p)で、両辺で対数をとると
ax+b = log p/(1-p)になる。これをf(x)とすると、
変数がm個ある時、最適なモデルを見つけるためには、
f(x)で最小二乗法を使えば良い
ちなみに最小二乗法ではなくクロスエントロピーの誤差関数という対数を取った関数にすると、yが0or1以外を取らないので計算が楽ちんになる。
まじで誰が思いついたんこれ。頭おかしいだろ(いい意味で)。
前回の線形回帰と同じく今回もL2正規化をしてモデル作成。
scikit-learnでは初期値でL2正規化をするみたい。
モデル評価に関して、またホールドアウト法を使う。
評価方法として今回出てきたのは
適合率(Precision)、再現率(Recall)、F値
真陽性:TP
真陰性:TN
偽陽性:FP
偽陰性:FN
とするとき、
適合率(Precision)=TP/(TP+FP)
これ、我々的には陽性的中率と言ったほうがわかりやすい。
再現率(Recall)=TP/(TP+FN)
これは感度だね。
F値=2TP/(2TP+FN+FP)
今回のモデルを評価すると
precision recall f1-score support
dazai 0.73 0.94 0.82 732
mori 0.91 0.68 0.78 492
akutagawa 0.85 0.71 0.77 551
accuracy 0.80 1775
macro avg 0.83 0.78 0.79 1775
weighted avg 0.81 0.80 0.79 1775
ふむ。なんかすごいちょっとだけ本と数値違うけどいいか。
データセットの更新とかされてるのかな。