LoginSignup
2
2

More than 3 years have passed since last update.

集合知プログラミングの理解メモ

Posted at

概要

機械学習アルゴリズムを勉強するため、
『集合知プログラミング』(ISBN-13 : 978-4873113647)を読んだ際に、
プログラム内で出てくる式が何をしているのかがよく分からない部分があったので、
調べた内容をメモに残します。

ヘヴィな数学だったのでライトに読むなら追わなくてよかったかも...

久々に統計学を勉強しなおしたので、
間違いが多いかもしれません。ご指摘いただけると助かります。

6章ドキュメントフィルタリング

6.6.2 確率を統合する

  • この節は、メールのスパム判定の大詰め
  • キーワード(トークン)ごとに、スパムっぽいかの確率が求まっていること前提
  • キーワードごとの確率から、フィッシャー法を用いて、ドキュメント全体で見た時にスパムかどうかを計算

アルゴリズム ⇒ 著者さんが githubで公開 してくれています。
個人的に分かりづらかったポイント(下記(1)(2)(3))のメモを残します。

  def fisherprob(self,item,cat):
    p=1
    features=self.getfeatures(item)
    for f in features:
      p*=(self.weightedprob(f,cat,self.cprob))

    # (1) ・・・ fscoreとは何を計算している?
    fscore=-2*math.log(p)

    return self.invchi2(fscore,len(features)*2)

  # (2) ・・・ invchi2は何を計算している?    
  def invchi2(self,chi, df):
    # (3) ・・・ 逆関数が計算できている?
    m = chi / 2.0
    sum = term = math.exp(-m)
    for i in range(1, df//2):
        term *= m / i
        sum += term
    return min(sum, 1.0)
  • (1) fscore とは何を計算している?

  • (2) invchi2 は何を計算している?

    • χ二乗分布の累積分布関数の逆関数
    • χ二乗検定だとp-valueを求めて、0.05 より小さい(χ二乗値が十分に高い)場合を基準として判断することが多いようですが、スパムの分類のテーマでは高いスコア=スパムとしたいので逆関数でχ二乗値(χ二乗分布に従う値)に戻している模様
    • 引数
      • chi ・・・ p-value0 ≦ chi ≦ 1
      • df ・・・ χ二乗分布の自由度
    • 出力
      • χ二乗値(χ二乗分布に従う値)。ただし1を超えないようにしている。
  • (3) 逆関数が計算できている?

    • χ二乗分布の累積密度関数を見てもらうとわかる通り、逆関数が数式で出せないです
    • 逆関数を計算するために、逆関数定理 を使って微分方程式に持ち込み、べき級数(n次方程式みたいなもの)を使って近似解を得るなどするようです。
    • 累積分布関数の逆関数を精度良く計算す方法は日々研究されている様なので、精度のよい計算手法を採用したアルゴリズムで実装したんだと思われます。
      • Quantile Chi-Square などのキーワードで論文を調べると様々な手法が検索できます
      • Inverse Chi-Square とすると、逆χ二乗分布 という似て非なるものがヒットするのでお勧めしません

関連情報メモ

  • フィッシャー法は、日本語論文では Robinson-Fisher方式 と呼ばれている?
  • フィッシャー法は、Robinson方式 から求められる
2
2
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
2
2