朴素貝葉斯分類器是一種與線性模型非常相類似的一種分類器。
- 它的訓練速度比線性模型更快,但是泛化能力要強。
- 主要思想:通過獨立查看每個特征來學習參數,並從每個特征中收集簡單的類別統計數據
- 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