已知集合x,我們把這個集合稱為特徵集合,其中每乙個元素是乙個待分類項。
已知集合y,我們把這個集合稱為類別集合,其中的每乙個元素是乙個類別。
我們現在要找到乙個函式f,使得y=f(x),即x集合中的每乙個待分類項,都能通過f函式找到對應的分類y。
分類演算法的任務就是找到這個f函式。
樸素貝葉斯是根據貝葉斯公式得出的。
貝葉斯公式:
p(ai|b) = p(b|ai)p(ai) /p(b)
根據分類演算法可知:
我們的目的就是找到乙個f函式(此時這個f函式就是樸素貝葉斯),使得任意x特徵有對應的y類別。
即通過樸素貝葉斯找到「p(類別|特徵)」,解釋一下就是找到「當某某特徵發生的情況下,某某類別也發生的概率」。
所以套用貝葉斯公式可得:
p(類別|特徵) = p(特徵|類別)p(類別) /p(特徵)
樸素貝葉斯演算法有乙個大前提就是:所有特徵條件都是相互獨立的。
下面我們就來解釋一下這個前提的意義。
假設現在小明要出去玩:
有特徵集合x是表示當天的一些情況,有
有結果類別集合y代表最後到底去不去,有
那麼天氣可以細分為:好、中、差
作業可以細分為:多、少
心情可以細分為:好、壞
如果天氣、作業、心情是相互「不獨立」的,
那麼特徵就有3*2*2=12種組合情況。
就需要一一統計這12種情況的概率
即、、······一共12種。
在實際問題中特徵往往要比這還多,很多組合特徵可能根本沒法得到。
如果假定天氣、作業、心情相互獨立。
那麼就有p = ppp
由此,我們只需要找到各自的子特徵即可,即,、······一共7種。
特徵概率的獲取難度大大降低。
如果只是普通貝葉斯,那麼公式為:
p(去玩 | 天氣中,作業多,心情好) = p(天氣中,作業多,心情好 | 去玩)p(去玩) / p(天氣中,作業多,心情好)
由上面這個公式可以看出來:
我們為了求「在天氣中,作業多,心情好」這樣的前提下,小明出去玩的概率。
需要知道p(天氣中,作業多,心情好),即:同一天天氣中,作業多,心情好的概率。
以及p(天氣中,作業多,心情好 | 去玩)p(去玩),即:小明出去玩時,天氣中,作業多,心情好的概率。
自然,要提前找到這些特徵概率是十分困難的。
但如果用樸素貝葉斯演算法解這個問題,那麼作業、天氣、心情就假定成相互獨立的了。
公式變為:
p(去玩 | 天氣中,作業多,心情好) = p(天氣中|去玩)p(作業多|去玩)p(心情好|去玩)p(去玩) / p(天氣中)p(作業多)p(心情好)
由公式我們可以看出我們找到前置概率的難度下降了很多。
變成了找到單一特徵條件概率,如 p(天氣中)、p(天氣中|去玩)
所以樸素貝葉斯相比貝葉斯的最大區別就是,加上了個條件的獨立性假設,大大減少了引數的假設數量。
樸素貝葉斯
樸素貝葉斯演算法是一種基於概率統計的分類方法,它主要利用貝葉斯公式對樣本事件求概率,通過概率進行分類。以下先對貝葉斯公式做個了解。對於事件a b,若p b 0,則事件a在事件b發生的條件下發生的概率為 p a b p a b p b 將條件概率稍作轉化即可得到貝葉斯公式如下 p a b p b a ...
樸素貝葉斯
1.準備資料 從文字中構建詞向量 2.訓練演算法 從詞向量計算概率 3.測試演算法 儲存為 bayes.py 檔案 參考 coding utf 8 from numpy import 文字轉化為詞向量 def loaddataset postinglist my dog has flea probl...
樸素貝葉斯
機器學習是將資料轉化為決策面的過程 scikit learn縮寫為sklearn 訓練乙個分類器,學習之後 其處理的準確性 def nbaccuracy features train,labels train,features test,labels test from sklearn.bayes ...