基本概念和公式
- 貝葉斯公式
p(c)是類“先驗概率”,p(x|c)是樣本x相對於類標記c的類條件概率,p(x)是用於歸一化的“證據因子”
- 樸素貝葉斯分類器
採用了屬性條件獨立性假設,對已知類別,假設所有屬性相互獨立。
公式改寫爲:
由於對所有類捏來說,p(x)相同,因此上式可表示爲:
爲了避免某些屬性在訓練集中未出現,抹掉其它屬性。採取拉普拉斯修正:
- 半樸素貝葉斯分類器
適當考慮一部分屬性間的相互依賴信息,從而既不需要完全聯合概率計算,又不至於徹底忽略了比較強的屬性依賴關係。半樸素貝葉斯分類器的一種,獨依賴關係(ODE),假設每個屬性在類別之外最多僅依賴一個其它屬性。
pai爲屬性xi所依賴的屬性,即父屬性
三種獨依賴關係分類器:SPODE、TAN、AODE
- 貝葉斯網
1.屬性的聯合概率分佈爲:
貝葉斯網中三個變量之間的典型依賴關係:同父結構,V型結構,順序結構。其中V型結構具有邊界獨立性。
道德圖略
2.學習
貝葉斯網B=<G,Θ>在D上的評分函數:
s(B|D)=f(θ)|B| - LL(B|D)
(|B|表示貝葉斯網的參數個數,f(θ)表示描述每個參數θ所需的字節數,其中第二項可表示爲:)
f(θ)=1時,得到AIC評分函數:AIC(B|D)=|B|-LL(B|D)
f(θ)=1/2logm時,得到BIC評分函數:BIC(B|C)=1/2logm*|B|_LL(B|D)
推斷略
- EM算法略
算法實現(文檔實現案例)
#創建用來訓練模型的數據集
def LoadDataSet():
post_list = [
['my', 'dog', 'has', 'flea', 'problems', 'help', 'please'],
['maybe', 'not', 'take', 'him', 'to', 'dog', 'park', 'stupid'],
['my', 'dalmation', 'is', 'so', 'cute', 'I', 'love', 'him'],
['stop', 'posting', 'stupid', 'worthless', 'garbage'],
['mr', 'licks', 'ate', 'my', 'steak', 'how', 'to', 'stop', 'him'],
['quit', 'buying', 'worthless', 'dog', 'food', 'stupid']
]
class_vect = [0, 1, 0, 1, 0, 1]
return post_list, class_vect
#去除給定文本中重複出現的詞,返回文本詞彙
def Unique(dataset):
text = dataset
vocal_list =set([])
for centence in text:
vocal_list = vocal_list | set(centence) #利用set將句子拆分成一個個單詞,且去重
return list(vocal_list)
#給定一個句子,查詢其詞是否出現在詞典中,出現爲1 ,不出現爲0,返回的是一個向量
def CheckVect (vocab, dataset):
vect = [0]*len(vocab)
for data in dataset:
if data in vocab:
vect[vocab.index(data)] = 1
return vect
from numpy import *
def classifyNB0(trainMatrix, trainLabels):
numSentence = len(trainLabels)
lenVect = len(trainMatrix[0])
temp = sum(trainLabels)
pa = temp/float(numSentence)
nv0 =ones(lenVect); nv1=ones(lenVect)
s0 = 2.0; s1 = 2.0
for i in range(numSentence):
if trainLabels[i] == 0:
nv0 += trainMatrix[i]
s0 += sum(trainMatrix[i])
else:
nv1 += trainMatrix[i]
s1 += sum(trainMatrix[i])
p0 = exp(nv0/s0); p1 = exp(nv1/s1)
return p0, p1, pa
from numpy import *
def classify(vec2Classify, p0, p1, pa):
p00 =sum(vec2Classify*p0) + exp(pa)
p11 = sum(vec2Classify*p1) + exp(pa)
if p00>p11:
return 0
else:
return 1
優缺點分析
- 優點
在數據較少的情況下仍然有效,可以處理多類別問題
- 缺點
對輸入數據的準備方式較爲敏感