1. 程式人生 > >機器學習十大演算法1----naive-bayesian

機器學習十大演算法1----naive-bayesian

收集資料---》準備資料:數值型/布林----》分析資料:繪製特徵(資料大時,不管用)----》訓練演算法:不同獨立特徵的條件概率---》測試演算法:計算錯誤率----》使用:文件分類、語言遮蔽,
特點:資料較少時仍有效,但對資料的準備方式較為敏感  適用於:標稱型資料

樸素貝葉斯分類的正式定義:

      1、設為特徵向量,ai為第i個特徵的取值。

      2、類別集合

      3、計算

      4、如果

,則

關鍵是計算第3步中的條件概率。

如果各個特徵屬性是條件獨立的,則根據貝葉斯定理有:

     

顯然我們只要將分子最大化皆可:

故,分類流程可分為3個階段:

第一階段——準備工作階段:主要工作是根據具體情況確定特徵屬性,並對每個特徵屬性進行適當劃分(形成特徵庫),然後由人工對一部分待分類項進行分類,形成訓練訓練集合(分類器的質量很大程度上由特徵屬性、特徵屬性劃分及訓練樣本質量決定)

第二階段——分類器訓練階段:其輸入是特徵屬性和訓練樣本,輸出是h(x)

第三階段——應用階段輸出g(x)

條件概率

特徵屬性為離散值時,統計訓練樣本中各個劃分在每個類別中出現的頻率用來估計P(a|y)

特徵屬性為連續值時,通常假定其值服從高斯分佈(也稱正態分佈):

只要計算出訓練樣本中各個類別中此特徵項劃分的各均值和標準差即可。

當P(a|y)=0?

引入Laplace校準,它的思想非常簡單,就是對每類別下所有劃分的計數加1,這樣如果訓練樣本集數量充分大時,並不會對結果產生影響

虛擬碼:

1
def nb(庫,train_Set):
  for i in train_Set:
     if i in 庫:
          Vec[庫.index(i)]=1
     else: Vec[庫.index(i)]=0
  return Vec
2計算條件概率:
def nbp(Vec,lables):
   p0=zeros(len(Vec[0])),p1=zeros(len(Vec[0]))
   if lables[i]==1:
       p1/0+=Vec[i]
       p1/0demo=sum(Vec[i])
   p1/0p=p1/0/p1/0demo     
 3 分類  (比較大小)

p1=sum(vec2Classify*p1Vec)+math.log(pClass1)
 p0=sum(vec2Classify*p0Vec)+math.log(1.0-pClass1)