1. 程式人生 > >常用分類問題的演算法-樸素貝葉斯分類器(Naive Bayes Classifiers)

常用分類問題的演算法-樸素貝葉斯分類器(Naive Bayes Classifiers)

樸素貝葉斯分類器是分類演算法集合中基於貝葉斯理論的一種演算法。它不是單一存在的,而是一個演算法家族,在這個演算法家族中它們都有共同的規則。例如每個被分類的特徵對與其他的特徵對都是相互獨立的。

樸素貝葉斯分類器的核心思想是:
1、將所有特徵的取值看成已經發生的事件
2、將因變數屬於某個分類也看成所有特徵出現條件下的概率事件去判斷。將分類問題轉換為計算Xi出現的情況下 Yi 發生的概率(即為 P(Yi|Xi))。
3、在假設特徵變數之間均獨立的前提下,根據概率論的知識, 計算Yi 在 Xi發生時的條件概率 為 Xi和Yi同時發生的概率除以 Xi獨立概率。即 P(Yi|Xi)=P(Xi|Yi)*P(Yi)/P(Xi)

樸素貝葉斯的難點和誤差來源:

1、所有特徵必須是分類變數
2、需要知道每個特徵(X)的獨立發生概率、因變數(Y)獨立發生的概率和因變數發生的情況下,每個特徵發生的概率。
3、需要非常有代表性的資料,儘量減少 X 的分佈,Y的分佈,X|Y 條件分佈的誤差。
4、特徵之間獨立性的假設,造成模型誤差

基本樸素貝葉斯的變體:

1、高斯貝葉斯(GaussianNB):
將連續特徵假設為高斯分佈(正態分佈)進行概率計算。
所以高斯貝葉斯需要連續特徵符合高斯分佈。

2、多項式貝葉斯(MultinomialNB):先驗為高斯分佈的樸素貝葉斯,用於多型別的離散變數。轉換為數字即可,不需要dummy處理。

3、伯努利分佈貝葉斯(BernoulliNB):先驗為伯努利分佈的樸素貝葉斯,用於0,1變數的離散變數。轉換為數字即可。

2、條件概率的計算方法的變體(m估計法)

這裡寫圖片描述

這裡寫圖片描述

樸素貝葉斯注意點

這個部分的內容,本來應該在最後說的,不過為了把乾貨集中放在程式碼示例之前,先擱這兒了,大家也可以看完樸素貝葉斯的各種例子之後,回來再看看這些tips。

1)大家也知道,很多特徵是連續數值型的,但是它們不一定服從正態分佈,一定要想辦法把它們變換調整成滿足正態分佈!!
2)對測試資料中的0頻次項,一定要記得平滑,簡單一點可以用『拉普拉斯平滑』。
3)先處理處理特徵,把相關特徵去掉,因為高相關度的2個特徵在模型中相當於發揮了2次作用。
4)樸素貝葉斯分類器一般可調引數比較少,比如scikit-learn中的樸素貝葉斯只有拉普拉斯平滑因子alpha,類別先驗概率class_prior和預算資料類別先驗fit_prior。模型端可做的事情不如其他模型多,因此我們還是集中精力進行資料的預處理,以及特徵的選擇吧。
5)一般其他的模型(像logistic regression,SVM等)做完之後,我們都可以嘗試一下bagging和boosting等融合增強方法。咳咳,很可惜,對樸素貝葉斯里這些方法都沒啥用。原因?原因是這些融合方法本質上是減少過擬合,減少variance的。樸素貝葉斯是沒有variance可以減小。