asdfの簡単なメモ。
ここにきて、ひとつ疑問。
CLのプログラムの起動方式ってどういう種類があるんだろう。ACLでは、例えばSLIMEで開発をして、"Application"としてまとめるようだ(含むランタイム)。ということは、日頃はSLIMEに住むということなのだな。
著者提供のソースを動かしてみる。
- ソースDL。展開。
- /.../systemsをasdf:*central-registry*に登録。
- 全てのasdのシンボリックリンクを/.../systems/に作成。
- REPLで、(asdf:operate 'asdf:load-op :spam)
- うまくいったようだ。
- REPLで、(in-package :com.gigamonkeys.spam)しておく。
前説
特になし。
The Heart of a Spam Filter
- internって言葉、アプリ書くときにも、こんな風に使う感じなんだ。
Training the Filter
特になし。
Per-Word Statistics
メモ。この本この部分の説明はかなり雑というか、ヘタクソではないか。ちょっとイライラする。
- 基本方針は次のとおり。メッセージを、それが含むfeaturesにしたがって分類する。そのとき、個別のfeatureについて、それを含むメッセージがspamである確率を算出し、それら全てを結合したものをそのメッセージのスコアとする。
- では、あるfeatureを含むメッセージがspamである確率をどう計算するか。
- 第一案:
(defun spam-probability (feature)
(with-slots (spam-count ham-count) feature
(/ spam-count (+ spam-count ham-count)))) - 問題あり。これだと、そのfeatureのspam-countとham-countだけに依存している。例えば、spam-countが1で、ham-countが9であっても、次の2つの状況によって、その確率は異なるべきだ。
状況1
*total-spams* 100
*total-hams* 100
状況2
*total-spams* 10
*total-hams* 1000
spam-countについてくらべると、同じ1であっても、状況1よりも状況2の方がspamである確率は高いはず。また、ham-countでいえば、同じ9であっても状況1よりも状況2の方がhamである確率は低いはず。そこで、、 - 第二案:
(defun spam-probability (feature)
(with-slots (spam-count ham-count) feature
(let ((spam-frequency (/ spam-count (max 1 *total-spams*)))
(ham-frequency (/ ham-count (max 1 *total-hams*))))
(/ spam-frequency (+ spam-frequency ham-frequency))))) - 第二案ではfrequency(頻度)という形で総数の影響を組み入れた。
- しかし、問題あり。2000メッセージを取り扱った結果、spamとhamが半々だったとする。あるfeatureはspam-count = 1000かつham-count = 0だったとする。別のfeatureは、spam-count = 1 かつ ham-count = 0だったとする。するとそれぞれのspam-probabilityは、どちらも1である。後者の方がspamである可能性は低くあるべきだ。そこで、これを補正する方法を考える。第三案ではなく補正。
- 補正:
(defun bayesian-spam-probability (feature &optional
(assumed-probability 1/2)
(weight 1))
(let ((basic-probability (spam-probability feature))
(data-points (+ (spam-count feature) (ham-count feature))))
(/ (+ (* weight assumed-probability)
(* data-points basic-probability))
(+ weight data-points))))
Combining Probabilities
Inverse Chi Square
統計学のお話。読むだけ。
Training the Filter
Testing the Filter
A Couple of Utility Functions
Analyzing the Results
What's Next
特になし。
うーん。平日はほとんど進められなかった。。。
0 件のコメント:
コメントを投稿