朴素貝葉斯分類器


朴素貝葉斯分類器是一種與線性模型非常相類似的一種分類器。

  • 它的訓練速度比線性模型更快,但是泛化能力要強。
  • 主要思想:通過獨立查看每個特征來學習參數,並從每個特征中收集簡單的類別統計數據
  • scikit-learn實現了三種朴素貝葉斯分類器:1、GaussianNB分類器(高斯)、2、BernoulliNB分類器(伯努利)、3、MultinomNB分類器(多項式)

1、BernoulliNB分類器(伯努利)

  • 該分類器輸入數據為二分類數據,主要用於文本數據分類,計算每個類別中每個特征不為0的元素個數

  • 下面是書本中的一個例子,計算每個類別的樣本的每個特征所含1的數量:

    X = np.array([[0,1,0,1],
                [1,0,1,1],
                [0,0,0,1],
                [1,0,1,0]])
    y = np.array([0,1,0,1])
    
    counts = {}
    for label in np.unique(y):
        counts[label] = X[y==label].sum(axis=0) #X[y==label]會選出數據中類別為label的樣本,之后做跨行求和
    
  • 輸出

    {0: array([0, 1, 0, 2]), 1: array([2, 0, 2, 1])}    
    
  • 📣
    這個例子很形象地說明了BernoulliNB分類器的主要思想是計算每個類別中每個特征不為0的元素個數(把這個作為類別的統計數據),
    若想要做出預測,需要將數據點與每個類別的統計數據進行比較,將最匹配的類別作為預測結果。

  • 而GaussianNB分類器(高斯)、MultinomNB分類器(多項式)也是對每個類別中每個特征計算統計數據,但是計算方式不同罷了,下文會詳述。


2、GaussianNB分類器(高斯)

GaussianNB可應用於任意連續數據,

  • 主要用於高維數據,

  • 計算的時候會保存每個類別中每個特征的平均值標准差

  • 運用sklearn.naive_bayes.GaussianNB模塊實現GaussianNB

  • 📣
    使用GaussianNB分類器在鳶尾花數據集的測試集上的精度竟然達到了1,比之前的線性模型,KNN都更高

3、MultinomNB分類器(多項式)

MultinomNB假定輸入數據為基數數據(即每個特征代表某個對象的整數計數,比如一個單詞在句子里出現的次數),

  • 主要用於文本數據分類。
  • 計算類別中每個特征的平均值

4、優點、缺點和參數

BernoulliNB和MultinomNB有一個參數alpha用於控制模型復雜度。

  • alpha越大,平滑化越強,模型復雜度越低。
    • 算法對alpha值的魯棒性相對較好,因此,alpha值對模型性能並不是很重要,但是調整這個參數通常會使精度有所提高

👍注意

  • 1、GaussianNB主要用於高維數據

    • 連續數據
  • 2、BernoulliNB和MultinomNB主要用於稀疏計數數據,比如文本。

    • MultinomNB在包含很多非零特征的數據集(大型文檔)上性能優於BernoulliNB
  • 3、訓練速度和預測速度都很快,貝葉斯模型是很好的基准模型,常用於非常大的數據集

參考文獻

《Pyhon機器學習基礎教程》P53-P54


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM