Python機(jī)器學(xué)習(xí)基礎(chǔ)教程學(xué)習(xí)筆記(7)——樸素貝葉斯分類(lèi)器
樸素貝葉斯分類(lèi)器(Naive Bayesian Classifier)
- 樸素貝葉斯分類(lèi)器比線(xiàn)性模型訓(xùn)練速度更快
- 代價(jià)是泛化能力要比線(xiàn)性更稍差
樸素貝葉斯模型如此高效的原因在于:
- 它通過(guò)單獨(dú)查看每個(gè)特征來(lái)學(xué)習(xí)參數(shù),并從每個(gè)特征中收集簡(jiǎn)單的類(lèi)別統(tǒng)計(jì)數(shù)據(jù)
sk-learn中實(shí)現(xiàn)了三種樸素貝葉斯分類(lèi)器:
- GaussianNB:應(yīng)用于任意連續(xù)數(shù)據(jù)。
- BernoulliNB:假定輸入的數(shù)據(jù)為二分類(lèi)數(shù)據(jù)。
- MultifomialNB:假定輸入數(shù)據(jù)為計(jì)數(shù)數(shù)據(jù)。
BernoulliNB和MultifomialNB主要用于文本數(shù)據(jù)分類(lèi)。
BernoulliNB分類(lèi)器計(jì)算每個(gè)類(lèi)別中每個(gè)特征不為0的元素個(gè)數(shù)。
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import mglearn
# 4個(gè)數(shù)據(jù)點(diǎn),每個(gè)點(diǎn)有4個(gè)二分特征
X = np.array([
[0,1,0,1], # 類(lèi)別0:
[1,0,1,1], # 類(lèi)別1:
[0,0,0,1], # 類(lèi)別0:
[1,0,1,0] # 類(lèi)別1:
])
# 一共有兩個(gè)類(lèi)別:0和1
y = np.array([0,1,0,1])
counts = {}
# 計(jì)算每個(gè)類(lèi)別中每個(gè)特征不為0的元素個(gè)數(shù)
for label in np.unique(y):
counts[label]=X[y==label].sum(axis=0)
print("Feature counts:\n{}".format(counts))
Feature counts:
{0: array([0, 1, 0, 2]), 1: array([2, 0, 2, 1])}
- MultifomialNB計(jì)算每個(gè)類(lèi)別中每個(gè)特征的平均值。
- GaussianNB會(huì)保存每個(gè)類(lèi)別中每個(gè)特征的平均值和標(biāo)準(zhǔn)差。
- 要想做出預(yù)測(cè),需要將數(shù)據(jù)點(diǎn)與每個(gè)類(lèi)別的統(tǒng)計(jì)數(shù)據(jù)進(jìn)行比較,并將最匹配的類(lèi)別作為預(yù)測(cè)結(jié)果。
- MultifomialNB和BernoulliNB預(yù)測(cè)公式的形式都與線(xiàn)性模型完全相同。
- 樸素貝葉斯模型coef_的含義與線(xiàn)性模型稍有不同,因?yàn)閏oef_不同與w。
優(yōu)點(diǎn)、缺點(diǎn)和參數(shù)
MultinomialNB和BernoulliNB都有一個(gè)參數(shù)alpha,用于控制模型復(fù)雜度。
alpha的工作原理是,算法向數(shù)據(jù)中添加alpha那么多的數(shù)據(jù)點(diǎn),這些點(diǎn)對(duì)所有特征都取正值。這可以將統(tǒng)計(jì)數(shù)據(jù)“平滑化”(smoothing)。
alpha越大,平滑性越強(qiáng),模型復(fù)雜度就越低。
算法性能對(duì)alpha值的魯棒性相對(duì)較好,也就是說(shuō),alpha值對(duì)模型性能并不重要。
但是調(diào)整這個(gè)參數(shù)通常都會(huì)使精度略有提高。
GaussianNB主要用于高維數(shù)據(jù),而另外兩種樸素貝葉斯模型則廣泛用于稀疏計(jì)數(shù)數(shù)據(jù),比如文本。
MultinomialNB的性能通常要優(yōu)于BernoulliNB,特別是在飲食很多非零特征的數(shù)據(jù)集(即大型文檔)上。
樸素貝葉斯模型的許多優(yōu)點(diǎn)和缺點(diǎn)都與線(xiàn)性模型相同。
它的訓(xùn)練和預(yù)測(cè)速度都很快,訓(xùn)練過(guò)程也很容易理解。
該模型對(duì)高維稀疏數(shù)據(jù)的效果很好,對(duì)參數(shù)的魯棒性也相對(duì)較好。
樸素貝葉斯 模型是很好的基準(zhǔn)模型,常用于非常大的數(shù)據(jù)集,在這些數(shù)據(jù)集上即使訓(xùn)練線(xiàn)性模型可能也要花費(fèi)大量時(shí)間。