寫在前面的話:哈嘍,大家早安吩谦、午安扇售、晚安嘍前塔,歡迎大家指點,也希望我的內(nèi)容可以溫暖承冰、幫助同在學習路上的人們~
正文開始~~
上一篇樸素貝葉斯(Naive Bayes)算法筆記(一)-Python?用Python基本實現(xiàn)了樸素貝葉斯算法的分類华弓,這一節(jié)將基于scikit learn中的樸素貝葉斯相關模型來實現(xiàn)算法。
Scikit learn中實現(xiàn)樸素貝葉斯的方法來源于sklearn.naive_bayes 模塊困乒。在這個模塊下寂屏,因為P(x_i | y)的計算方法不同,存在三種實現(xiàn)模塊:Gaussian Naive Bayes娜搂、Multinomial Naive Bayes迁霎、Bernoulli Naive Bayes?。接下來百宇,將分別介紹這些模塊的實現(xiàn)考廉。
此方法主要是針對數(shù)據(jù)符合多元伯努利分布的樸素貝葉斯分類算法携御。該模型最明顯的一個特點是他非常關注每一個特征是否出現(xiàn)而不僅是出現(xiàn)的次數(shù)昌粤,針對那種在某個計算中不出現(xiàn)的特征值會有懲罰既绕。Bernoulli Naive Bayes在計算每個特征的條件概率時,基于下面的公式:
Bernoulli Naive Bayes模型的使用
相關的函數(shù)見Bernoulli Naive Bayes
2凄贩、Gaussian Naive Bayes介紹
高斯樸素貝葉斯分類算法與上面的Bernoulli Naive Bayes主要區(qū)別在于求解屬性特征值的計算式:
接下來看一下高斯樸素貝葉斯模型應用。
新彩蛋:筒子們袱讹,快醒醒怎炊,針對分類問題,突然發(fā)現(xiàn)有一個概率校準(Probability calibration of classifiers)的事情廓译。大多數(shù)的分類模型,得到的預測結果僅有定序意義债查,而不能夠定量(比如很多只是知道最終屬于哪一類非区,但是并不知道屬于這一類的概率有多大,類似于概率中的置信區(qū)間)盹廷。很多情況下征绸,僅僅得到一個好的AUC值是遠遠不夠的,我們需要得到一個準確的概率值俄占。這就要求管怠,模型的輸出結果從定序上升為定距。 有兩種方法可以實現(xiàn)由定序到定距:普拉托變換(Platt Scaling)和保序回歸(Isotonic Regression).Platt Scaling的適用條件較為嚴格缸榄,他僅適用于被扭曲的預測結果是sigmoid的模型渤弛;Isotonic Regression的適用條件較為寬松,它只要預測結果是單調(diào)的甚带。不幸的是她肯,相比Platt Scaling, Isotonic Regression更容易過擬合鹰贵,尤其是當訓練數(shù)據(jù)集稀少的時候晴氨。關于Platt Scaling和Isotonic Regression,可以查看概率值校準
腫么樣碉输,筒子們籽前,你們在利用分類算法預測概率時,是否想到這些問題了敷钾?scikit-learn替你想好啦枝哄,主要是sklearn.calibration這個類里面的方法,見sklearn.calibration.CalibratedClassifierCV
辣么闰非,接下來就看一個包含的概率校準的高斯樸素貝葉斯分類實例
1)先通過make_blobs()產(chǎn)生同極性的高斯分布數(shù)據(jù)膘格,然后分開訓練集和測試集,同時财松,為了接下來的概率校準做準備瘪贱,給樣本賦予隨機權重纱控,得到帶有樣本權重的訓練數(shù)據(jù)sw_train和測試數(shù)據(jù)sw_test,代碼如下:
2)接下來菜秦,利用高斯貝葉斯模型甜害,分別考慮了沒有概率校準、基于Isotonic的概率校準球昨、基于Platt Scaling中主要的方法sigmoid方法得出的分類方法的錯誤率尔店,見下圖:
3)接下來將通過以上不同方法測出的y取值繪制出來:
看了上面的錯誤率以及計算出的樣本概率,俺覺得概率校準很有必要主慰,元芳嚣州,你咋看?
內(nèi)心突然有點小激動共螺,辣么该肴,這兩種不同的概率校準方法(sigmoid和Isotonic方法),哪個更好呢藐不,該如何與這么多的分類器算法結合匀哄?貼心的sklearn同樣給出了對比Probability Calibration curves、Comparison of Calibration of Classifiers雏蛮,感興趣可以直接點進去看哈涎嚼,我僅給出一些結論性的東西哈:1)如果原始數(shù)據(jù)中,存在冗余特征挑秉,那么這些特征之間就不滿足樸素貝葉斯‘特征獨立’的特點法梯,因此,直接使用高斯樸素貝葉斯方法時犀概,算法的錯誤率很高鹊汛,此時,進行概率校準就非常重要阱冶;2)那么不同的分類器算法刁憋,該用sigmoid和Isotonic方法哪個方法呢?此時應該看分類器算法的概率校準函數(shù)類型是更接近于哪個函數(shù)的特征木蹬。比如至耻,線性支持向量機的概率校準曲線(calibration curve)接近于sigmoid函數(shù),所以用基于sigmoid的概率校準就非常合適镊叁;而高斯樸素貝葉斯分類器的概率校準曲線更接近于sigmoid函數(shù)曲線的轉(zhuǎn)置尘颓,因此,高斯樸素貝葉斯分類器在概率校準時不適合使用sigmoid晦譬,而適合用Isotonic函數(shù)疤苹。
好噠,基于高斯樸素貝葉斯分類算法的介紹先到這里敛腌,寫了好多卧土,也思考了很多惫皱,寶寶心里苦,但寶寶繼續(xù)寫
3尤莺、sklearn.naive_bayes.MultinomialNB?模型介紹
這個定義中包含了很多公式旅敷,我就不一個個打出來了,具體見下圖:
從定義來看颤霎,這個模型主要是用來做文本分析的媳谁,具體栗子見Out-of-core classification of text documents等等。
其實這個模型是對最初的樸素貝葉斯模型做了類似于拉普拉斯平滑友酱。因為在比如文本分析中晴音,很容易一些詞完全不出現(xiàn),為了避免出現(xiàn)0導致無窮等不能計算缔杉,加了一些參數(shù)因子段多。
好噠,今天這篇先到這里壮吩,樸素貝葉斯的內(nèi)容和應用都很多,我以后深入學習的時候會與大家分享更加詳細的內(nèi)容和心得加缘,希望今天的內(nèi)容對大家有點幫助鸭叙,也請大牛不吝賜教,能有一群一起學習拣宏、交流的人沈贝,是我的愿望,我們共同進步~~
下一篇一起學習Logistic回歸啦~~