樸素貝葉斯分類

2021-08-08 10:12:17 字數 1288 閱讀 9213

摘自寫在公司內部的wiki

要解決的問題:

表中增加欄位classification,有四個取值:0:初始值,未分類、1:positive、2:normal、99:negative

review submit前,由樸素貝葉斯分類器決定該條review的flag屬於negative還是positive

分類器分為兩部分

貝葉斯公式:p(b|a) = p(b) * p(a|b) / p(a)

在本問題中我們需要求以下兩個值:

然後比較這倆數的大小,比如p(positive | 當前review) > p(negative| 當前review) ,那麼當前review就是positive,反之

由於p(當前review)都是一樣的,因此等號左正相關等號右,可以忽略掉分母,直接求分子的值

這裡用p(negative)* p(當前review | negative) 舉例,將公式簡化為p(n)* p(r | n) 

p(n) = 訓練集中negative的總數 / 訓練集總數

r由乙個個單詞w1,w2,w3 ... wi 組成,因此p(r | n) = p(w1,w2,w3 ... wi | n)

樸素貝葉斯假設各條件無關,因此將公式展開為 p(w1 | n)* p(w2 | n) * p(w3 | n) ... * p(wi | n)

這樣只需要知道每個單詞在negative的review所有單詞中出現的概率就可以求得p(wi | n)

實際實現中想到了有一種情況,那就是乙個單詞在positive中出現了n次,結果在negative中出現了0次,乘積就變成了0,因此將公式轉換為求log值,就不會出現上述情況

log(p(n)* p(r | n) )

= log(p(n)) + log(p(r | n))

= log(p(n)) + log(p(w1 | n)* p(w2 | n) * p(w3 | n) ... * p(wi | n))

= log(p(n)) + log(p(w1 | n))+ log(p(w2 | n))+ ... + log(p(wi | n))

訓練指令碼需要維護三個map到redis中,mapnegative、mappositive和mapnormal;一併將p(negative)和p(positive)記錄到快取中

把訓練集按照review rating欄位分為negative集、positive集和normal集

當一條review需要入庫,首先分詞,匹配各單詞的p(w | n)求得p(positive | 當前review)和p(negative| 當前review)作比較即可求出這條review的flag

樸素貝葉斯分類

1 貝葉斯分類是一類分類演算法的總稱,這類演算法均以貝葉斯定理為基礎,故統稱為貝葉斯分類。2 樸素貝葉斯的思想基礎是這樣的 對於給出的待分類項,求解在此項出現的條件下各個類別出現的概率,哪個最大,就認為此待分類項屬於哪個類別。通俗來說,就好比這麼個道理,你在街上看到乙個黑人,我問你你猜這哥們 來的,...

分類 樸素貝葉斯

原始的貝葉斯公式為 p b a p a b p a p a b p b p a 1 在分類問題中,y為類別,x為樣本特徵,則已知待 的樣本特徵 x 它為類別yi 的概率為 p yi x p x yi p y i p x p yi jp xj y i p x 2 p yi 類別為y i的樣本 數總樣本...

貝葉斯推斷 樸素貝葉斯分類 貝葉斯定理

近期,由於專案需求,需要用到貝葉斯定理及其相關知識,於是又系統的學習了一下,順便做一下筆記。非常詳細的注釋 coding utf 8 import copy 用於深度拷貝,適用於複雜的資料結構 複雜的資料結構看不懂,一定要在紙上畫圖,畫出來就一目了然了 class native bayes def ...