-
本文收錄于《深入淺出講解自然語言處理》專欄,此專欄聚焦于自然語言處理領(lǐng)域的各大經(jīng)典算法,將持續(xù)更新,歡迎大家訂閱!
-
?個人主頁:有夢想的程序星空
-
?個人介紹:小編是人工智能領(lǐng)域碩士,全棧工程師,深耕Flask后端開發(fā)、數(shù)據(jù)挖掘、NLP、Android開發(fā)、自動化等領(lǐng)域,有較豐富的軟件系統(tǒng)、人工智能算法服務(wù)的研究和開發(fā)經(jīng)驗。
-
?如果文章對你有幫助,歡迎
?
關(guān)注
、?
點贊
、?
收藏
、?
訂閱。
樸素貝葉斯(Naive Bayes)是一種簡單經(jīng)典的分類算法,它的經(jīng)典應(yīng)用案例為人所熟知:文本分類(如垃圾郵件過濾)。
1、貝葉斯定理
先驗概率:即基于統(tǒng)計的概率,是基于以往歷史經(jīng)驗和分析得到的結(jié)果,不需要依賴當(dāng)前發(fā)生的條件。
后驗概率:則是從條件概率而來,由因推果,是基于當(dāng)下發(fā)生了事件之后計算的概率,依賴于當(dāng)前發(fā)生的條件。
條件概率:記事件A發(fā)生的概率為P(A),事件B發(fā)生的概率為P(B),則在B事件發(fā)生的前提下,A事件發(fā)生的概率即為條件概率,記為P(A|B)。
貝葉斯公式:貝葉斯公式便是基于條件概率,通過P(B|A)來求P(A|B),如下:
將A看成“規(guī)律”,B看成“現(xiàn)象”,那么貝葉斯公式看成:
全概率公式:表示若事件構(gòu)成一個完備事件組且都有正概率,則對任意一個事件B都有公式成立:?
將全概率公式帶入貝葉斯公式中,得到:
2、樸素貝葉斯算法的原理
特征條件假設(shè):假設(shè)每個特征之間沒有聯(lián)系,給定訓(xùn)練數(shù)據(jù)集,其中每個樣本都包括維特征,即,類標(biāo)記集合含有種類別,即。
對于給定的新樣本,判斷其屬于哪個標(biāo)記的類別,根據(jù)貝葉斯定理,可以得到屬于類別的概率:
后驗概率最大的類別記為預(yù)測類別,即:。
樸素貝葉斯算法對條件概率分布作出了獨立性的假設(shè),通俗地講就是說假設(shè)各個維度的特征互相獨立,在這個假設(shè)的前提上,條件概率可以轉(zhuǎn)化為:
代入上面貝葉斯公式中,得到:
于是,樸素貝葉斯分類器可表示為:
因為對所有的,上式中的分母的值都是一樣的,所以可以忽略分母部分,樸素貝葉斯分類器最終表示為:
適用范圍:
- 樸素貝葉斯只適用于特征之間是條件獨立的情況下,否則分類效果不好,這里的樸素指的就是條件獨立。
- 樸素貝葉斯主要被廣泛地使用在文檔分類中。
樸素貝葉斯常用的三個模型有:
- 高斯模型:處理特征是連續(xù)型變量的情況。
- 多項式模型:最常見,要求特征是離散數(shù)據(jù)。
- 伯努利模型:要求特征是離散的,且為布爾類型,即true和false,或者1和0。
4、拉普拉斯平滑
為了解決零概率的問題,法國數(shù)學(xué)家拉普拉斯最早提出用加1的方法估計沒有出現(xiàn)過的現(xiàn)象的概率,所以加法平滑也叫做拉普拉斯平滑。假定訓(xùn)練樣本很大時,每個分量的計數(shù)加1造成的估計概率變化可以忽略不計,但可以方便有效的避免零概率問題。
是一個多項乘法公式,其中有一項數(shù)值為0,則整個公式就為0顯然不合理,避免每一項為零的做法就是在分子、分母上各加一個數(shù)值。
表示分類的樣本數(shù),為樣本總數(shù),是分類總數(shù)。
表示分類屬性的樣本數(shù),表示分類的樣本數(shù),表示屬性的可能的取值數(shù)。
在實際的使用中也經(jīng)常使用加來代替簡單加1。 如果對個計數(shù)都加上,這時分母也要記得加上。
4、樸素貝葉斯算法的優(yōu)缺點
優(yōu)點:
1、樸素貝葉斯模型有穩(wěn)定的分類效率。
2、對小規(guī)模的數(shù)據(jù)表現(xiàn)很好,能處理多分類任務(wù),適合增量式訓(xùn)練,尤其是數(shù)據(jù)量超出內(nèi)存時,可以一批批的去增量訓(xùn)練。
3、對缺失數(shù)據(jù)不太敏感,算法也比較簡單,常用于文本分類。
缺點:
1、需要知道先驗概率,且先驗概率很多時候取決于假設(shè),假設(shè)的模型可以有很多種,因此在某些時候會由于假設(shè)的先驗?zāi)P偷脑驅(qū)е骂A(yù)測效果不佳。
2、對輸入數(shù)據(jù)的表達形式很敏感(離散、連續(xù),值極大極小之類的)。
5、python代碼實現(xiàn)
庫方法:sklearn.naive_bayes.MultinomialNB(alpha = 1.0)
其中,alpha:拉普拉斯平滑系數(shù)
實驗內(nèi)容:sklearn20類新聞分類,20個新聞組數(shù)據(jù)集包含20個主題的18000個新聞組帖子。
實驗方法:首先,加載20類新聞數(shù)據(jù),并進行分割。然后,生成文章特征詞,接著,使用樸素貝葉斯分類器進行預(yù)估。
代碼實現(xiàn):文章來源:http://www.zghlxwxcb.cn/news/detail-779217.html
# coding:utf-8
from sklearn.datasets import fetch_20newsgroups
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
def naviebayes():
news = fetch_20newsgroups()
# 進行數(shù)據(jù)分割
x_train, x_test, y_train, y_test = train_test_split(news.data, news.target, test_size=0.25)
# 對數(shù)據(jù)集進行特征抽取
tf = TfidfVectorizer()
# 以訓(xùn)練集當(dāng)中詞的列表進行每篇文章重要性統(tǒng)計['a','b','c','d']
x_train = tf.fit_transform(x_train)
print(tf.get_feature_names())
x_test = tf.transform(x_test)
# 進行樸素貝葉斯算法的預(yù)測
mlt = MultinomialNB(alpha=1.0)
print(x_train.toarray())
mlt.fit(x_train, y_train)
y_predict = mlt.predict(x_test)
print("預(yù)測的文章類別為:", y_predict)
# 得出準(zhǔn)確率
print("準(zhǔn)確率為:", mlt.score(x_test, y_test))
if __name__ == '__main__':
naviebayes()
關(guān)注微信公眾號【有夢想的程序星空】,了解軟件系統(tǒng)和人工智能算法領(lǐng)域的前沿知識,讓我們一起學(xué)習(xí)、一起進步吧!文章來源地址http://www.zghlxwxcb.cn/news/detail-779217.html
到了這里,關(guān)于【樸素貝葉斯】深入淺出講解樸素貝葉斯算法(公式、原理)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!