php贝叶斯,php – 将单个概率与朴素贝叶斯垃圾邮件过滤相结合
我正在嘗試通過分析我已經(jīng)積累的語料庫來生成垃圾郵件過濾器。
我已經(jīng)實(shí)現(xiàn)了代碼來計(jì)算消息是垃圾郵件的概率,因?yàn)樗粋€(gè)特定的單詞,通過從wiki實(shí)現(xiàn)以下公式:
我的PHP代碼
public function pSpaminess($word)
{
$ps = $this->pContentIsSpam();
$ph = $this->pContentIsHam();
$pws = $this->pWordInSpam($word);
$pwh = $this->pWordInHam($word);
$psw = ($pws * $ps) / ($pws * $ps + $pwh * $ph);
return $psw;
}
根據(jù)“組合個(gè)人概率”部分,我已經(jīng)實(shí)現(xiàn)了代碼來組合測(cè)試消息中所有唯一字詞的概率來確定垃圾郵件。
從維基公式:
我的PHP代碼:
public function predict($content)
{
$words = $this->tokenize($content);
$pProducts = 1;
$pSums = 1;
foreach($words as $word)
{
$p = $this->pSpaminess($word);
echo "$word: $p\n";
$pProducts *= $p;
$pSums *= (1 - $p);
}
return $pProducts / ($pProducts + $pSums);
}
在測(cè)試字符串“這根本不是很糟糕”,產(chǎn)生以下輸出:
C:\projects\bayes>php test.php
this: 0.19907407407407
isn't: 0.23
very: 0.2
bad: 0.2906976744186
at: 0.17427385892116
all: 0.16098484848485
probability message is spam: float(0.00030795502523944)
這是我的問題:我是否正確實(shí)施個(gè)人概率?假設(shè)我正在生成有效的單詞概率,組合方法是否正確?
我關(guān)心的是計(jì)算結(jié)果的可能性很小。我已經(jīng)測(cè)試了一個(gè)更大的測(cè)試消息,最終導(dǎo)致了科學(xué)計(jì)數(shù)的概率超過10個(gè)零位。我期待在10或100位的價(jià)值觀。
我希望問題在于我的PHP實(shí)現(xiàn) – 但是當(dāng)我從維基百科中檢查組合函數(shù)時(shí),公式的分紅是分?jǐn)?shù)的乘積。我看不出多個(gè)概率的組合最終會(huì)超過0.1%的概率。
如果是這種情況,那么信息越長(zhǎng),概率分?jǐn)?shù)越低,如何補(bǔ)償垃圾郵件配額來正確預(yù)測(cè)垃圾郵件/火腿的小型和大型測(cè)試用例?
附加信息
我的語料庫實(shí)際上是一個(gè)約40k的評(píng)論的集合。我實(shí)際上是應(yīng)用我的“垃圾郵件過濾器”反對(duì)這些評(píng)論。根據(jù)投票數(shù)量,我將個(gè)人評(píng)論評(píng)為垃圾郵件/火腿:如果投票少于投票數(shù),則被認(rèn)為是Ham,否則為垃圾郵件。
現(xiàn)在,由于語料庫的類型,事實(shí)證明,垃圾郵件中使用的詞幾乎比火腿更多。也就是說,這里列出了垃圾郵件的十大列表,比火腿更頻繁。
+-----------+------------+-----------+
| word | spam_count | ham_count |
+-----------+------------+-----------+
| krugman | 30 | 27 |
| fetus | 12.5 | 7.5 |
| boehner | 12 | 10 |
| hatred | 11.5 | 5.5 |
| scum | 11 | 10 |
| reserve | 11 | 10 |
| incapable | 8.5 | 6.5 |
| socalled | 8.5 | 5.5 |
| jones | 8.5 | 7.5 |
| orgasms | 8.5 | 7.5 |
+-----------+------------+-----------+
相反,大多數(shù)詞在火腿上比火腿更豐富。舉個(gè)例子,我排名前10位的垃圾郵件數(shù)最多的單詞列表。
+------+------------+-----------+
| word | spam_count | ham_count |
+------+------------+-----------+
| the | 4884 | 17982 |
| to | 4006.5 | 14658.5 |
| a | 3770.5 | 14057.5 |
| of | 3250.5 | 12102.5 |
| and | 3130 | 11709 |
| is | 3102.5 | 11032.5 |
| i | 2987.5 | 10565.5 |
| that | 2953.5 | 10725.5 |
| it | 2633 | 9639 |
| in | 2593.5 | 9780.5 |
+------+------------+-----------+
如您所見,垃圾郵件使用頻率明顯低于火腿使用量。在我的40k評(píng)論的語料庫中,2100評(píng)論被認(rèn)為是垃圾郵件。
如下所述,對(duì)垃圾郵件發(fā)布率的測(cè)試短語如下:
短語
Cops are losers in general. That's why they're cops.
分析:
C:\projects\bayes>php test.php
cops: 0.15833333333333
are: 0.2218958611482
losers: 0.44444444444444
in: 0.20959269435914
general: 0.19565217391304
that's: 0.22080730418068
why: 0.24539170506912
they're: 0.19264544456641
float(6.0865969793861E-5)
據(jù)此,垃圾郵件的概率極低。但是,如果我現(xiàn)在分析一個(gè)火腿評(píng)論:
短語
Bill and TED's excellent venture?
分析
C:\projects\bayes>php test.php
bill: 0.19534050179211
and: 0.21093065570456
ted's: 1
excellent: 0.16091954022989
venture: 0.30434782608696
float(1)
好的,這很有趣我正在做這些例子,因?yàn)槲艺谧珜戇@個(gè)更新,所以這是我第一次看到這個(gè)具體測(cè)試用例的結(jié)果。我認(rèn)為我的預(yù)測(cè)是倒轉(zhuǎn)的。它實(shí)際上挑選了火腿的可能性,而不是垃圾郵件。這值得驗(yàn)證。
對(duì)已知火腿的新測(cè)試。
短語
Complain about $174,000 salary being too little for self. Complain about $50,000 a year too much for teachers.
Scumbag congressman.
分析
C:\projects\bayes>php test.php
complain: 0.19736842105263
about: 0.21896031561847
174: 0.044117647058824
000: 0.19665809768638
salary: 0.20786516853933
being: 0.22011494252874
too: 0.21003236245955
little: 0.21134020618557
for: 0.20980452359022
self: 0.21052631578947
50: 0.19245283018868
a: 0.21149315683195
year: 0.21035386631717
much: 0.20139771283355
teachers: 0.21969696969697
scumbag: 0.22727272727273
congressman: 0.27678571428571
float(3.9604152477223E-11)
很不幸的是,不行。原來是巧合的結(jié)果。我開始懷疑是否也許不能輕易量化評(píng)論。或許垃圾郵件的性質(zhì)與垃圾郵件的性質(zhì)截然不同。
也許垃圾郵件過濾只有在您有特定的單詞類垃圾郵件時(shí)才可行?
最終更新
正如答復(fù)所指出的,奇怪的結(jié)果是由于語料庫的性質(zhì)。使用沒有明確定義垃圾信息的評(píng)論語料庫貝葉斯分類不能執(zhí)行。由于可能(可能)任何一個(gè)評(píng)論可能會(huì)收到各種用戶的垃圾郵件和火腿評(píng)級(jí),所以不可能為垃圾評(píng)論生成硬分類。
最終,我想生成一個(gè)評(píng)論分類器,可以確定評(píng)論文章是否會(huì)根據(jù)貝葉斯分類進(jìn)行評(píng)估,以便評(píng)論內(nèi)容。我仍然可以調(diào)查分類器的電子郵件垃圾郵件,看看這樣的分類器是否可以猜測(cè)評(píng)論系統(tǒng)的業(yè)務(wù)響應(yīng)。但是現(xiàn)在的問題得到回答。感謝大家的投入。
總結(jié)
以上是生活随笔為你收集整理的php贝叶斯,php – 将单个概率与朴素贝叶斯垃圾邮件过滤相结合的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: kirisun对讲机说明书
- 下一篇: 什么是收费站应急可移动式车载式汽车称重仪