# ITエンジニアのための機械学習理論入門(第5章)


ロジスティック回帰とROC曲線

ロジスティック関数による分類確率推定(?)

  • ロジスティック回帰を用いることでパーセプトロンの用にクラス分類するのではなく、クラスに属する確率を求めることができる
  • 例えば2種類の分類ができる2変数のデータが与えられている

    • この時2変数の線形関数により分類する直線f(x)をひける
      • 前章参照
    • 2種類のデータを決定する基準がf(x)の値に依存する場合、属するクラスの確率をf(x)の値より決めることができる
      • f(x)>0がクラスAならf(x)が大きい場合はクラスAの確率が高くなるとか
      • f(x)<0がクラスBならf(x)が低い場合はクラスBの確率は高くなるとか
    • 上記のように決定した時f(x)=0のときは、それぞれのクラスになる確率は50%となる

      • このような確率の分布をもつ場合、ロジスティック関数によりモデル化可能
      \shigma(a) = \frac{1}{1+e^{-a}}
      
      • 上の式のaの値をf(x)の値として最尤推定法を用いて線形関数の重みを推定する
      • クラスAのデータがクラスAになる確率、クラスBのデータがクラスBになる確率をロジスティック関数の分布に従う形で最大になるように重みを推定する
      • 最適な重みを推定する際のアルゴリズムは別途必要でここではニュートン・ラフソン法を用いた
      • ニュートン・ラフソン法の場合,分類する確率がf(x)が0となるところを境にクラスA,Bに分類する確率を100%にする
        • そのほうがトレーニングデータ的には適応度が高くなるため
        • もちろんオーバーフィッティング
      • これを防ぐためにある程度推定できた段階で最適化をやめる

ROC曲線による学習モデルの評価

  • ロジスティック回帰により得られる線形関数はf(x)=0におけるクラスA、Bに属する確率は50%になるように対応している
  • しかしロジスティック関数で得られる結果をそのまま当てはめる必要はない
    • つまりクラスAに属する確率が52%だからといってそのままクラスAに分類する必要はない
    • 適用する問題によりそこのしきい値は変える
  • このようなときに発見したいデータとそうでないデータがある
    • 例えばある病気の検査を受ける人とそうでない人
  • データの呼び方で以下のようにわけられる
    • 真陽性(True Positive)
      • 発見したいデータと分類され実際にそのようなデータである
    • 偽陽性(False Positive)
      • 発見したいデータと分類されたが実際はそのようなデータでない
    • 真陰性(True Negative)
      • 発見したくないデータと分類され、実際にそのようなデータである
    • 偽陰性(False Negative)
      • 発見したくないデータと分類されたが、実際はそのようなデータでない
  • 学習モデルとしきい値で分類される確率で分類した時に真陽性率や偽陽性率などでそのモデルの出来具合を判断できる
    • 極端な話、真陽性率100%で偽陽性率が0%だとしたら素晴らしいが、それぞれはトレードオフであるため難しい
      • 真陽性率を高めるには確率のしきい値を下げる必要があるが、そうすると誤検出率(偽陽性率)も高くなる
  • 実際にどのしきい値をどの程度の値にするかを判断するのがROC(Receiver Operating Characteristic)曲線
    • 真陽性率と偽陽性率の相関をしめしたグラフ
    • ある確率をしきい値としたときのそれぞれの値がプロットされる(はず・・・?)
    • ここで支配されていない確率をしきい値として選択するような感じなのかな?
    • 他にも精度や再現率、F値で求めるとかだと思う
      • 精度は正と予測されたデータのうち、実際に正である割合
        • 精度は例えば100つ正であるデータのときに、それを1つでも正と判定できて、他のデータが判定できていない場合でも高くなる
      • 再現率は正のデータのうち、正と予測されたデータの割合
        • 再現率は与えられたデータすべて正と判定すれば高くなる
    • F値は精度、再現率より計算される
      • F値が最も高いしきい値を選択するのが無難っぽい