樸素貝葉斯分類器
發(fā)布時間:2018-04-10 | 來源: 川總寫量化
作者:石川
摘要:樸素貝葉斯分類器由于假設(shè)特征之間條件獨立,使用起來非常簡單。它在實戰(zhàn)中的效果往往非常優(yōu)秀。
1 引言
有監(jiān)督分類是量化投資中常見的情景之一。比如,我們希望根據(jù)上市公司財報中的各種指標(biāo)特征,區(qū)分出優(yōu)秀的和差勁的股票,這就是一個分類問題。在機(jī)器學(xué)習(xí)中,有監(jiān)督分類的算法有很多,比如 SVM、ANN 以及基于決策樹的 AdaBoost 和隨機(jī)森林等。這其中自然也少不了今天的主角樸素貝葉斯分類器(Na?ve Bayes classifiers)。它代表著一類應(yīng)用貝葉斯定理的分類器的總稱。樸素(naive)在這里有著特殊的含義、代表著一個非常強(qiáng)的假設(shè)(下文會解釋)。
樸素貝葉斯分類器雖然簡單,但是用處非常廣泛(尤其是在文本分類方面)。在 IEEE 協(xié)會于 2006 年列出的十大數(shù)據(jù)挖掘算法中,樸素貝葉斯分類器赫然在列(Wu et al. 2008)。捎帶一提,另外九個算法是 C4.5、k-Means、SVM、Apriori、EM、PageRank、AdaBoost、kNN 和 CART(那時候深度學(xué)習(xí)還沒有什么發(fā)展)。
樸素貝葉斯分類器以貝葉斯定理為基礎(chǔ)。在《貝葉斯統(tǒng)計》一文中,我們曾介紹過貝葉斯定理。為了保證本文的完整性,在下面首先回顧一下(熟悉貝葉斯定理的朋友可以跳過第 2 節(jié))。之后會闡釋“樸素”的意義并介紹樸素貝葉斯分類器。文章的最后使用一個例子說明如何使用樸素貝葉斯分類器選股。
2 貝葉斯定理
貝葉斯定理的推導(dǎo)始于條件概率。條件概率可以定義為:在事件 B 發(fā)生的前提下,事件 A 發(fā)生的概率。數(shù)學(xué)上用 P(A|B) 來表示該條件概率。條件概率 P(A|B) 的數(shù)學(xué)定義為:
這個公式的白話解釋為:“當(dāng) B 發(fā)生前提下 A 發(fā)生的概率”等于“A 和 B 同時發(fā)生的概率”除以“B 發(fā)生的概率”。生活中條件概率屢見不鮮。比如“在沒有趕上 8 點這趟地鐵的前提下,上班遲到的概率是多少?”應(yīng)用條件概率的定義可知“在沒有趕上 8 點這趟地鐵的前提下,上班遲到的條件概率”等于“沒趕上 8 點這趟地鐵且上班遲到的概率”除以“沒趕上 8 點這趟地鐵的概率”。將上式左右兩邊同時乘以 P(B) 得到:
類似的,我們也可以求出 P(B|A),即在 A 發(fā)生的前提下,B 發(fā)生的概率是多少。在上面例子中,這對應(yīng)著“在上班遲到的前提下,沒有趕上 8 點這趟地鐵的概率是多少”?(上班遲到的原因可能很多,比如沒趕上這趟地鐵是一個,又比如在公司樓下的咖啡館里耽擱了 10 分鐘也是一個,或者因為早上發(fā)燒先去醫(yī)院了等等。)根據(jù)定義:
同樣,兩邊同時乘以 P(A) ,并且由 P(A∩B) = P(B∩A),得到:
由此可知 P(B)P(A|B) = P(A)P(B|A)。這個結(jié)果也可以寫作如下形式,即大名鼎鼎的貝葉斯定理(Bayes rule):
3 何為“樸素”
下面我們將貝葉斯定理應(yīng)用于有監(jiān)督的分類場景。令 X 代表一個 n 維特征向量(它代表著一組特征,即 features),這些特征用來描述一個對象;C 代表該對象所屬的類別。分類的目的是找到 X 和 C 之間的映射關(guān)系,從而計算出 P(C|X),即當(dāng)待分類的對象具備 X 這些特征時,它屬于 C 類的條件概率。
假設(shè)類別的個數(shù)為 K(即 C 的取值有 K 個),那么對于每一個可能的取值(記為 c_k,k = 1, 2, …, K),我們需要根據(jù)給定的特征 X 計算出概率 P(C=c_k|X)。然后,只要從所有的 P(c_k|X) 中挑出取值最大的概率對應(yīng)的 c_k 作為最有可能的分類即可。利用貝葉斯定理,P(C=c_k|X) 可以寫作:
由于對有所的 P(C=c_k|X) 來說,上式右側(cè)的分母都相同(和 C 的取值無關(guān)),因此我們只需要根據(jù)訓(xùn)練集數(shù)據(jù)來估計所有的 P(X|C=c_k) 以及所有的 P(C=c_k) 即可。下面來看看為了實現(xiàn)這個目標(biāo),需要多大的樣本空間。
考慮最簡單的情況。假設(shè) n 維向量 X 中的每一個特征以及類別 C 都是二元的(binary)。因此,特征向量 X = {X_1, X_2, …, X_n} 所有可能的取值為 2^n 個(因為每個 X_i 的取值有 2 個,而一共有 n 個 X_i)。此外,C 的取值也是 2 個。因此,僅從 P(C=c_k|X) 來說,需要估計的參數(shù)就高達(dá) 2×(2^n - 1) 個。而這僅僅是從特征空間所有取值組合可能性出發(fā)的最低要求。事實上,為了得到準(zhǔn)確的參數(shù)估計,對于每一個 n 維特征的組合,我們都需要多個觀測值來計算 P(C=c_k|X) 的概率。這進(jìn)一步增加了對樣本空間大小的要求。舉例來說,如果特征空間的維度 n = 30,那么我們需要估計超過 30 億個參數(shù)!
在現(xiàn)實的應(yīng)用場景中,n = 30 是否常見?非常常見。比如上市公司的特征就可以輕松超過 30 個。而在現(xiàn)實的應(yīng)用場景中,我們擁有超過 30 億個樣本來估計 30 億個參數(shù)是否常見?癡人說夢。因此,想利用有限的樣本數(shù)據(jù)估計出所有的?P(X|C=c_k)?和?P(C=c_k) 是不切實際的。為什么有這么多參數(shù)需要估計呢?這是因為在求解 P(X|C=c_k) 時,我們考慮的是 X = (x_1, x_2, …, x_n) 在 C = c_k 這個條件下的條件聯(lián)合分布,這大大增加了待估計的參數(shù)的個數(shù)。為了解決這個問題,“樸素”閃亮登場。
樸素貝葉斯在求解 P(X|C=c_k) 時做了一個非常強(qiáng)的假設(shè) —— 條件獨立性(conditional independence)。它的意思是在給定的類別 C = c_k 下,不同維度特征的取值之間是相互獨立的。比如令 X_1 和 X_2 代表 n 維里面的兩個維度,則? P(X_1=x_1|C=c_k) 的概率與 X_2 的取值無關(guān),即:
舉個例子,下雨、打雷和閃電是三種天氣。我們可以假設(shè)在閃電發(fā)生的條件下,下雨和打雷之間互為條件獨立。這是因為閃電通常會伴隨著打雷,而當(dāng)閃電發(fā)生時,是否打雷和之后是否一定會下雨就沒什么關(guān)系了。當(dāng)然,打雷和下雨通常在非條件下是相關(guān)的,我們僅僅假設(shè)在閃電發(fā)生的條件下,它們滿足條件獨立。
上述例子強(qiáng)調(diào)了在樸素貝葉斯中,我們僅僅假設(shè)特征之間滿足條件獨立性,而非一般的獨立性。在條件獨立性假設(shè)下,反復(fù)利用條件概率的定義,P(X = (x_1, x_2, …, x_n)|C=c_k) 可以寫成 P(X_1=x_1|C=c_k) × P(X_2=x_2|C=c_k) × … × P(X_n=x_n|C=c_k):
在前面提及的特征和類別均為 binary 的情況下,這將待估計的參數(shù)從 2×(2^n - 1) 個直接減少到 2n 個。這大大簡化了對樣本空間的要求以及求解的計算量,使得樸素貝葉斯算法非常簡單。條件獨立性的假設(shè)便是“樸素”一詞的來源。因此,樸素貝葉斯通常也被稱為簡單貝葉斯(simple Bayes)或獨立貝葉斯(independence Bayes)。
4 樸素貝葉斯分類器
通過上一節(jié)對“樸素”含義的說明,樸素貝葉斯分類器的大致輪廓已經(jīng)比較清晰了。本節(jié)就來正式說明其數(shù)學(xué)表達(dá)式。對于特征向量 X 和類別 C,利用貝葉斯定理和條件獨立性的假設(shè),寫出每個 C = c_k 的條件概率:
接下來使用訓(xùn)練集數(shù)據(jù),估計出所有的 P(C=c_k) 以及 P(X_i=x_i|C=c_k) 即可,而無需考慮上式中的分母,因為它和 C 的取值無關(guān)。對于新的待分類樣本,使用它的特征向量取值對每個 c_k 求出 P(C=c_k) × Π_i P(X_i=x_i|C=c_k),并比較這些值中最大的,就可以確定這個新樣本的分類:
以上就是樸素貝葉斯分類器的數(shù)學(xué)表達(dá)式。在實際的應(yīng)用中,根據(jù)特征變量是離散的還是了連續(xù)的,在使用訓(xùn)練集數(shù)據(jù)估計 P(X_i=x_i|C=c_k) 時,又有不同的處理方法。在離散的情況下,只需要 counting(計數(shù)),即:
其中 #{X_i=x_iΛC=c_k} 表示訓(xùn)練集中 X_i = x_i 和 C = c_k 共同發(fā)生的次數(shù);#{C=c_k} 表示訓(xùn)練集中 C = c_k 發(fā)生的次數(shù)。這個估計方法稱作最大似然估計(maximum likelihood estimate)。在一些情況下,由于樣本數(shù)據(jù)極度匱乏,很有可能出現(xiàn)某個特征的取值和某個類別的取值在訓(xùn)練集中從未同時出現(xiàn)過,即 #{X_i=x_iΛC=c_k} = 0,這會造成對 P(X_i=x_i|C=c_k) 的估計等于零。P(X_i=x_i|C=c_k) = 0 會導(dǎo)致對應(yīng)的 P(C=c_k) × Π_i P(X_i=x_i|C=c_k) = 0,即讓我們誤以為這個樣本屬于某個類別 c_k 的概率為 0。這是不合理的,不能因為一個事件沒有觀察到就認(rèn)為該事件不會發(fā)生。
解決這個問題的辦法是給每個特征和類別的組合加上給定個數(shù)的虛假樣本(“hallucinated” examples)。假設(shè)特征 X_i 的取值有 J 個,并假設(shè)為每個 x_i 對應(yīng)的 #{X_i=x_iΛC=c_k} 增加 s 個虛假樣本,這樣得到對 P(X_i=x_i|C=c_k) 的估計稱為平滑估計(smoothed estimate):
特別的,當(dāng) s = 1 時,上述平滑稱為拉普拉斯平滑(Laplace smoothing)。類似的,對于 P(C=c_k) 的估計也可以采用平滑的方式:
其中,t 為對每個類增加的虛假樣本數(shù),K 是類別個數(shù),#{C} 表示訓(xùn)練集的樣本數(shù)。當(dāng)特征是連續(xù)變量時,情況稍微復(fù)雜一些。在使用訓(xùn)練集求解 P(X_i=x_i|C=c_k) 時,需要假設(shè)該條件概率分布的形式。一種常見的假設(shè)是認(rèn)為對于給定的 c_k,P(X_i=x_i|C=c_k) 滿足正態(tài)分布,而正態(tài)分布的均值和標(biāo)準(zhǔn)差需要從訓(xùn)練集學(xué)習(xí)得到。這樣的模型稱為高斯樸素貝葉斯分類器(Gaussian Na?ve Bayes classifier)。
5 一個例子
下面我們用樸素貝葉斯分類來選股看看。假設(shè)描述上市公司的特征有 7 個維度:市盈率、市凈率、凈資產(chǎn)收益率、總資產(chǎn)周轉(zhuǎn)率變動率、預(yù)期盈利增長修正、20 日漲幅、以及市值。為了簡化討論,令每一個特征的取值都是 binary 的,即分為高或者低;進(jìn)一步令類別也是 binary 的,即好公司(買入后的一段時間內(nèi)股價上漲)或者差公司(買入后的一段時間內(nèi)股價下跌)。假設(shè)訓(xùn)練集中共有 20 個公司,它們的特征和類別如下表所示。
使用這個訓(xùn)練集來估計所有的 P(X_i=x_i|C=c_k) 和 P(C=c_k) 的取值。通過計數(shù)(counting)以及拉普拉斯平滑就可以求出這些參數(shù)的估計量(見下表)。
使用這些估計量就可以對任意給定的新公司分類。比如對于某上市公司,它的特征分別為:市盈率低、市凈率高、凈資產(chǎn)收益率高、總資產(chǎn)周轉(zhuǎn)率變動率高、預(yù)期盈利增長修正低、20 日漲幅高、市值低。使用樸素貝葉斯,對好公司和差公司這兩類,分別計算 P(C=c_k) × Π_i P(X_i=x_i|C=c_k) 的取值:
由于 0.00753 > 0.00036,因此樸素貝葉斯分類對該公司的分類結(jié)果是好公司。
6 結(jié)語
由于條件獨立性這個強(qiáng)假設(shè)的存在,樸素貝葉斯分類器十分簡單。但是,它仍然有非常不錯的效果。原因何在呢?人們在使用分類器之前,首先做的第一步(也是最重要的一步)往往是特征選擇(feature selection),這個過程的目的就是為了排除特征之間的共線性、選擇相對較為獨立的特征。其次,當(dāng)我們假設(shè)特征之間相互獨立時,這事實上就暗含了正則化的過程;而不考慮變量之間的相關(guān)性有效的降低了樸素貝葉斯的分類方差。雖然這有可能提高分類的偏差,但是如果這樣的偏差不改變樣本的排列順序,那么它對分類的結(jié)果影響不大。由于這些原因,樸素貝葉斯分類器在實際中往往能夠取得非常優(yōu)秀的結(jié)果。Hand and Yu (2001) 通過大量實際的數(shù)據(jù)表明了這一點。
最后,我們以 Wu et al. (2008) 中對樸素貝葉斯分類器的高度概括作為全文的收尾:
The naive Bayes model is tremendously appealing because of its simplicity, elegance, and robustness. It is one of the oldest formal classification algorithms, and yet even in its simplest form it is often surprisingly effective. It is widely used in areas such as text classification and spam filtering. A large number of modifications have been introduced, by the statistical, data mining, machine learning, and pattern recognition communities, in an attempt to make it more flexible, but one has to recognize that such modifications are necessarily complications, which detract from its basic simplicity.
參考文獻(xiàn)
Hand, D. J. and K. Yu (2001). Idiot's Bayes – not so stupid after all? International Statistical Review 69(3), 385 – 398.
Wu, X., V. Kumar, J. R. Quinlan, J. Ghosh, Q. Yang, H. Motoda, G. J. McLachlan, A. Ng, B. Liu, P. S. Yu, Z. Zhou, M. Steinbach, D. J. Hand, and D. Steinberg (2008). Top 10 algorithms in data mining. Knowledge and Information Systems 14(1), 1 – 37.
免責(zé)聲明:入市有風(fēng)險,投資需謹(jǐn)慎。在任何情況下,本文的內(nèi)容、信息及數(shù)據(jù)或所表述的意見并不構(gòu)成對任何人的投資建議。在任何情況下,本文作者及所屬機(jī)構(gòu)不對任何人因使用本文的任何內(nèi)容所引致的任何損失負(fù)任何責(zé)任。除特別說明外,文中圖表均直接或間接來自于相應(yīng)論文,僅為介紹之用,版權(quán)歸原作者和期刊所有。