數(shù)據(jù)挖掘十大經(jīng)典算法(1)——樸素貝葉斯(Naive Bayes)

在此推出一個算法系列的科普文章。我們大家在平時埋頭工程類工作之余,也可以抽身對一些常見算法進(jìn)行了解,這不僅可以幫助我們拓寬思路,從另一個維度加深對計算機(jī)技術(shù)領(lǐng)域的理解,做到觸類旁通,同時也可以讓我們搞清楚一些既熟悉又陌生的領(lǐng)域——比如數(shù)據(jù)挖掘、大數(shù)據(jù)、機(jī)器學(xué)習(xí)——的基本原理,揭開它們的神秘面紗,了解到其實很多看似高深的領(lǐng)域,其實背后依據(jù)的基礎(chǔ)和原理也并不復(fù)雜。而且,掌握各類算法的特點(diǎn)、優(yōu)劣和適用場景,是真正從事數(shù)據(jù)挖掘工作的重中之重。只有熟悉算法,才可能對紛繁復(fù)雜的現(xiàn)實問題合理建模,達(dá)到最佳預(yù)期效果。

本系列文章的目的是力求用最干練而生動的講述方式,為大家講解由國際權(quán)威的學(xué)術(shù)組織the IEEE International Conference on Data Mining (ICDM) 于2006年12月評選出的數(shù)據(jù)挖掘領(lǐng)域的十大經(jīng)典算法。它們包括:


1. C4.5(c4.5決策樹算法)

2. k-Means(k均值算法)

3. SVM(支持向量機(jī))

4. Apriori(先驗算法)

5. EM(期望最大算法)

6. PageRank(google的網(wǎng)頁排序算法)

7. AdaBoost(Adaptive Boosting自適應(yīng)增強(qiáng)算法)

8. kNN(k近鄰算法)

9. Naive Bayes(樸素貝葉斯)

10. CART(分類與回歸樹)

一點(diǎn)鋪墊

本文作為本系列的第一篇,在介紹具體算法之前,先簡單為大家鋪墊幾個數(shù)據(jù)挖掘領(lǐng)域的常見概念:

在數(shù)據(jù)挖掘領(lǐng)域,按照算法本身的行為模式和使用目的,主要可以分為分類(classification),聚類(clustering)和回歸(regression)幾種,其中:

  • 分類 通常是在已經(jīng)給定了幾種類別和一部分屬于這些類別的數(shù)據(jù)的前提下,尋找分類規(guī)律,從而對沒有標(biāo)注類別的數(shù)據(jù)進(jìn)行類別劃分的行為。而這些事先給出的已經(jīng)分好類的示例數(shù)據(jù)通常被稱之為訓(xùn)練集,而這種通過已經(jīng)標(biāo)注了輸入與輸出關(guān)系訓(xùn)練集尋找規(guī)律的學(xué)習(xí)行為,在機(jī)器學(xué)習(xí)領(lǐng)域稱之為監(jiān)督式學(xué)習(xí)(Supervised learning)。

  • 聚類 與分類十分類似,都是以找到數(shù)據(jù)和類別之間的關(guān)系作為最終目的。不同的是,聚類一開始并沒有給定的類別和訓(xùn)練集,而直接由算法找出其中潛在規(guī)律。聚類的目的在于把相似的東西聚在一起,而有時我們甚至并不關(guān)心這一類是什么。這種沒有訓(xùn)練集作為參照而直接對輸入數(shù)據(jù)進(jìn)行建模的學(xué)習(xí)方式被稱為無監(jiān)督的學(xué)習(xí)(Unsupervised learning)

  • 回歸 則是通過有限的輸入數(shù)據(jù),找出一個能描述數(shù)據(jù)潛在規(guī)律的函數(shù),從而對未來的走勢進(jìn)行預(yù)測。

打幾個不恰當(dāng)?shù)谋确?/strong>:

  • 分類就好似垃圾歸類,一共就三種垃圾桶,并告訴你哪幾種垃圾扔進(jìn)哪個桶,通過分析得知將來要扔的所有垃圾該往哪兒扔;
  • 聚類就像生物劃分界門綱目科屬種,一開始根本不知道全世界的生物有多少種類,通過不斷摸索找出這些類別;
  • 而回歸就像是在探索一個能描述一切的萬物理論,不僅要能完美解釋當(dāng)前觀察到的所有現(xiàn)象,還能對未來做出精確預(yù)測。

另外,還有一個經(jīng)常有人問起的問題,就是數(shù)據(jù)挖掘機(jī)器學(xué)習(xí)這兩個概念的區(qū)別,這里一句話闡明我自己的認(rèn)識:機(jī)器學(xué)習(xí)是基礎(chǔ),數(shù)據(jù)挖掘是應(yīng)用。機(jī)器學(xué)習(xí)研制出各種各樣的算法,數(shù)據(jù)挖掘根據(jù)應(yīng)用場景把這些算法合理運(yùn)用起來,目的是達(dá)到最好的挖掘效果。

當(dāng)然,以上的簡單總結(jié)一定不夠準(zhǔn)確和嚴(yán)謹(jǐn),更多的是為了方便大家理解打的比方。如果大家有更精當(dāng)?shù)睦斫?,歡迎補(bǔ)充和交流。

進(jìn)入正題

好了,鋪墊了這么多,現(xiàn)在終于進(jìn)入正題!
作為本系列入門的第一篇,先為大家介紹一個容易理解又很有趣的算法——樸素貝葉斯。

先站好隊,樸素貝葉斯是一個典型的有監(jiān)督的分類算法。

貝葉斯定理

光從名字也可以想到,要想了解樸素貝葉斯,先要從貝葉斯定理說起。
貝葉斯定理是我們高中時代學(xué)過的一條概率學(xué)基礎(chǔ)定理,它描述了條件概率的計算方式。不要怕已經(jīng)把這些知識還給了體育老師,相信你一看公式就能想起來。

Thomas Bayes和他的貝葉斯公式

P(A|B)表示事件B已經(jīng)發(fā)生的前提下,事件A發(fā)生的概率,叫做事件B發(fā)生下事件A的條件概率。其基本求解公式為:


其中,P(AB)表示A和B同時發(fā)生的概率,P(B)標(biāo)識B事件本身的概率。

貝葉斯定理之所以有用,是因為我們在生活中經(jīng)常遇到這種情況:我們可以很容易直接得出P(A|B),P(B|A)則很難直接得出,但我們更關(guān)心P(B|A)。

舉個栗子,通過歷次美國大選,我們可以得知,投票給共和黨的選票有多大概率來自加州,但我們更關(guān)心的是,一張來自加州的選票,有多大概率會投給共和黨
(當(dāng)然,美國大選真正的投票機(jī)制并不是一人一票的簡單投票制,這里只是為了示意)。

而貝葉斯定理就為我們打通從P(A|B)獲得P(B|A)的道路。
下面不加證明地直接給出貝葉斯定理:


樸素貝葉斯的基本思路

有了貝葉斯定理這個基礎(chǔ),下面來看看樸素貝葉斯算法的基本思路。

樸素貝葉斯的核心思想就是,你不是要給我分類嗎?我算出自己屬于各個分類的條件概率,屬于誰的概率最大,就歸入哪一類。

你看,其思想就是這么的樸素。那么,屬于每個分類的概率該怎么計算呢?下面我們先祭出形式化語言!

  1. 設(shè)x = {a1, a2, ..., am}為一個待分類項,而每個a為x的一個特征屬性。

  2. 有類別集合C = {y1, y2, ..., yn}

  3. 我們的目的是要計算以下值P(y1|x), P(y2|x), ... ,P(yn|x)

  4. 如果P(yk|x) = max{P(y1|x), P(y2|x), ... ,P(yn|x)}
    x屬于yk

那么現(xiàn)在的關(guān)鍵就是如何計算第3步中的各個條件概率。我們可以這么做:

  1. 找到一個已知分類的待分類項集合,這個集合叫做訓(xùn)練樣本集。

  2. 統(tǒng)計得到在各類別下各個特征屬性的條件概率估計。即
    P(a1|y1), P(a2|y1),...,P(am|y1); P(a1|y2), P(a2|y2),...,P(am|y2); ...; P(a1|yn), P(a2|yn),...,P(am|yn);

  3. 如果各個特征屬性是條件獨(dú)立的,則根據(jù)貝葉斯定理有如下推導(dǎo):

因為分母對于所有類別為常數(shù),因為我們只要將分子最大化皆可。又因為各特征屬性是條件獨(dú)立的,所以有:

別被形式化嚇倒,我們來舉個栗子

如果你也跟我一樣,對形式化語言有嚴(yán)重生理反應(yīng),不要怕,直接跳過前面這一坨,我們通過一個鮮活的例子,用人類的語言再解釋一遍這個過程。

以下這個例子轉(zhuǎn)自博客http://www.ruanyifeng.com/blog/2013/12/naive_bayes_classifier.html

某個醫(yī)院早上收了六個門診病人,如下表。

癥狀 職業(yè) 疾病
打噴嚏 護(hù)士 感冒
打噴嚏 農(nóng)夫 過敏
頭痛 建筑工人 腦震蕩
頭痛 建筑工人 感冒
打噴嚏 教師 感冒
頭痛 教師 腦震蕩

現(xiàn)在又來了第七個病人,是一個打噴嚏的建筑工人。請問他最有可能患有何種疾???

本質(zhì)上,這就是一個典型的分類問題,癥狀職業(yè)是特征屬性,疾病種類是目標(biāo)類別

根據(jù)貝葉斯定理

P(A|B) = P(B|A) P(A) / P(B)

可得

P(感冒|打噴嚏x建筑工人)
    = P(打噴嚏x建筑工人|感冒) x P(感冒)
    / P(打噴嚏x建筑工人)

假定"打噴嚏"和"建筑工人"這兩個特征是獨(dú)立的,因此,上面的等式就變成了

P(感冒|打噴嚏x建筑工人)
    = P(打噴嚏|感冒) x P(建筑工人|感冒) x P(感冒)
    / P(打噴嚏) x P(建筑工人)

這是可以計算的。

P(感冒|打噴嚏x建筑工人)
    = 0.66 x 0.33 x 0.5 / 0.5 x 0.33
    = 0.66

因此,這個打噴嚏的建筑工人,有66%的概率是得了感冒。同理,可以計算這個病人患上過敏或腦震蕩的概率。比較這幾個概率,就可以知道他最可能得什么病。

再舉個栗子

接下來,我們再舉一個樸素貝葉斯算法在實際中經(jīng)常被使用的場景的例子——文本分類器,通常會用來識別垃圾郵件。
首先,我們可以把一封郵件的內(nèi)容抽象為由若干關(guān)鍵詞組成的集合,這樣是否包含每種關(guān)鍵詞就成了一封郵件的特征值,而目標(biāo)類別就是屬于垃圾郵件不屬于垃圾郵件

假設(shè)每個關(guān)鍵詞在一封郵件里出現(xiàn)與否的概率相互之間是獨(dú)立的,那么只要我們有若干已經(jīng)標(biāo)記為垃圾郵件和非垃圾郵件的樣本作為訓(xùn)練集,那么就可以得出,在全部垃圾郵件(記為Trash)出現(xiàn)某個關(guān)鍵詞Wi的概率,即P(Wi|Trash)

而我們最重要回答的問題是,給定一封郵件內(nèi)容M,它屬于垃圾郵件的概率是多大,即P(Trash|M)

根據(jù)貝葉斯定理,有

P(Trash|M) = P(M|Trash) * P(Trash) / P(M)

我們先來看分子:
P(M|Trash)可以理解為在垃圾郵件這個范疇中遇見郵件M的概率,而一封郵件M是由若干單詞Wi獨(dú)立匯聚組成的,只要我們所掌握的單詞樣本足夠多,因此就可以得到

P(M|Trash) = P(W1|Trash) * P(W2|Trash) * ... P(Wn|Trash)

這些值我們之前已經(jīng)可以得到了。

再來看分子里的另一部分P(Trash),這個值也就是垃圾郵件的總體概率,這個值顯然很容易得到,用訓(xùn)練集中垃圾郵件數(shù)除以總數(shù)即可。

而對于分母來說,我們雖然也可以去計算它,但實際上已經(jīng)沒有必要了,因為我們要比較的P(Trash|M)P(non-Trash|M)的分母都是一樣的,因此只需要比較分子大小即可。

這樣一來,我們就可以通過簡單的計算,比較郵件M屬于垃圾還是非垃圾二者誰的概率更大了。

樸素貝葉斯樸素在哪?

樸素貝葉斯的英文叫做Naive Bayes,直譯過來其實是天真的貝葉斯,那么他到底天真在哪了呢?

這主要是因為樸素貝葉斯的基本假設(shè)是所有特征值之間都是相互獨(dú)立的,這才使得概率直接相乘這種簡單計算方式得以實現(xiàn)。然而在現(xiàn)實生活中,各個特征值之間往往存在一些關(guān)聯(lián),比如上面的例子,一篇文章中不同單詞之間一定是有關(guān)聯(lián)的,比如有些詞總是容易同時出現(xiàn)。

因此,在經(jīng)典樸素貝葉斯的基礎(chǔ)上,還有更為靈活的建模方式——貝葉斯網(wǎng)絡(luò)(Bayesian Belief Networks, BBN),可以單獨(dú)指定特征值之間的是否獨(dú)立。這里就不展開了,有興趣的同學(xué)們可以做進(jìn)一步了解。

優(yōu)缺點(diǎn)

最后我們來對這個經(jīng)典算法做個點(diǎn)評:

優(yōu)點(diǎn):

  • 計算效率高
  • 容易實現(xiàn)
  • 計算復(fù)雜度不隨特征值維度增加而增加,可以處理高維度問題

缺點(diǎn):

  • 對于特征值之間關(guān)系的假設(shè)過于單純,并不適用于關(guān)聯(lián)度較為復(fù)雜的模型

好了,對于樸素貝葉斯的介紹就到這里,不知道各位看完之后是否會對數(shù)據(jù)挖掘這個領(lǐng)域產(chǎn)生了一點(diǎn)興趣了呢?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容