[数据挖掘]朴素贝叶斯分类
寫在前面的話:
? 我現(xiàn)在大四,畢業(yè)設(shè)計(jì)是做一個(gè)基于大數(shù)據(jù)的用戶畫像研究分析。所以開始學(xué)習(xí)數(shù)據(jù)挖掘的相關(guān)技術(shù)。這是我學(xué)習(xí)的一個(gè)新技術(shù)領(lǐng)域,學(xué)習(xí)難度比我以往學(xué)過的所有技術(shù)都難。雖然現(xiàn)在在一家公司實(shí)習(xí),但是工作還是挺忙的,經(jīng)常要加班,無(wú)論工作多忙,還是決定要寫一個(gè)專欄,這個(gè)專欄就寫一些數(shù)據(jù)挖掘算法、數(shù)據(jù)結(jié)構(gòu)、算法設(shè)計(jì)和分析的相關(guān)文章。通過寫博文來(lái)督促自己不斷學(xué)習(xí)。以前對(duì)于數(shù)學(xué)沒有多大的興趣愛好,從小到大,學(xué)數(shù)學(xué)也是為了考試能考個(gè)好的成績(jī),學(xué)過的很多數(shù)學(xué)知識(shí),并沒有深刻的感受到它的用途,不用也就慢慢遺忘,但自從我看了數(shù)學(xué)之美這本書和開始學(xué)習(xí)數(shù)據(jù)挖掘后,使我對(duì)數(shù)學(xué)有了很大的興趣。數(shù)學(xué)源于生活,用于生活。數(shù)據(jù)挖掘中涉及到很多統(tǒng)計(jì)學(xué)、線性代數(shù)、微積分等相關(guān)知識(shí),而我的很多數(shù)學(xué)知識(shí)都已經(jīng)還給我以前的老師了,所以現(xiàn)在只能慢慢一點(diǎn)一點(diǎn)撿起來(lái)。要感謝網(wǎng)上有很多作者寫出的好的文章,讓我受益匪淺,也算是站在他們的肩膀上學(xué)習(xí)。減少了我的學(xué)習(xí)困難,而我今天開始寫的專欄里的一系列文章,很多例子都是借鑒于他們文章中的例子。想了想,這個(gè)專欄名稱就叫<<算法大雜燴>>,以后我會(huì)把我工作中用到的、自己學(xué)習(xí)的新算法、以及回顧梳理的每一個(gè)算法的學(xué)習(xí)筆記和心得都更新到這個(gè)專欄里。寫的博文難免會(huì)有寫得不好的地方,歡迎大家指正,我也喜歡和有共同學(xué)習(xí)愛好的人一起學(xué)習(xí)交流。
不一定每天都更會(huì)更新,但是肯定會(huì)堅(jiān)持寫下去。
今天寫的第一篇博文,是關(guān)于樸素貝葉斯分類的。幾年前,我就聽說過這個(gè)算法,只是稍微了解一點(diǎn)點(diǎn),僅僅停留在只知道它是通過貝葉斯定理來(lái)分類的。寫這篇文章之前,我看了很多的相關(guān)知識(shí),包括書籍和網(wǎng)上的一些優(yōu)秀的博文。哈哈,到現(xiàn)在也應(yīng)該算對(duì)于這個(gè)算法入門了吧。后面的參考鏈接中會(huì)附上一些參考的文章地址。
樸素貝葉斯分類
引子
樸素貝葉斯分類是一種常用的分類算法,他根據(jù)研究對(duì)象的某些特征,來(lái)推斷出該研究對(duì)象屬于該研究領(lǐng)域的哪個(gè)類別。 數(shù)學(xué)是解決我們生活中產(chǎn)生的各種問題的。所以,數(shù)學(xué)源于生活,生活中也處處體現(xiàn)數(shù)學(xué),我們編程,不過是把人能夠理解的數(shù)學(xué)知識(shí)轉(zhuǎn)換成計(jì)算機(jī)能夠理解的形式來(lái)解決實(shí)際問題。拿樸素貝葉斯分類來(lái)說,其實(shí)生活中比比皆是,舉個(gè)例子: 我們?cè)诖蠼稚峡吹揭粋€(gè)人,猜測(cè)他屬于哪個(gè)職業(yè)。這就是一種分類,你是根據(jù)什么來(lái)判斷的。可能是根據(jù)這個(gè)人的穿著打扮,言行舉止。 穿著打扮:胡子拉碴、頭發(fā)亂七八糟,背著大的電腦包 言行舉止:雙眼無(wú)神(估計(jì)在想哪個(gè)bug的解決辦法),黑眼圈重,頭發(fā)沒洗。 所以,我大概能看出這個(gè)人職業(yè)是程序員(開個(gè)玩笑,這只是程序員自黑而已,我身邊的程序員都不是這樣的,當(dāng)然也包括我)。 其實(shí)穿著打扮、言行舉止就是人的特征屬性 我們要對(duì)某個(gè)對(duì)象分類,必須根據(jù)他的特征屬性來(lái)判斷。概述
要了解貝葉斯分類,必須了解貝葉斯定理,貝葉斯定理離不開條件概率 條件概率定義: 事件A在另外一個(gè)事件B已經(jīng)發(fā)生條件下的發(fā)生概率。條件概率表示為P(A|B),讀作“在B條件下A的概率”。 根據(jù)文氏圖,可以很清楚地看到在事件B發(fā)生的情況下,事件A發(fā)生的概率就是P(A∩B)除以P(B)。根據(jù)文氏圖,可以很清楚地看到在事件B發(fā)生的情況下,事件A發(fā)生的概率就是P(A∩B)除以P(B)。
?
P(A|B)=P(A∩B)/P(B)
? ???
?
因此,
?
P(A∩B)=P(A|B)P(B)
? ??
所以,
?
P(A|B)P(B)=P(B|A)P(A)
????
即
?
P(A|B)=P(B|A)P(A)/P(B)
????
?
上面的公式就是貝葉斯定理 生活中,我們經(jīng)常知道這種情況 ,P(A|B),但是不知道P(B|A).比如: A: ? 表示用戶收入高 B:表示訂購(gòu)2G流量套餐 P(A|B) 表示訂購(gòu)2G流量套餐的用戶收入高的概率,這個(gè)可以通過統(tǒng)計(jì)的樣本算出得到。 但是現(xiàn)在有一個(gè)用戶收入高(A),他購(gòu)買2G流量套餐(B)的概率是多少,即P(B|A),這才是我們關(guān)注 所以通過貝葉斯定理,我們可以把這兩者掛上鉤,求出我們想知道的P(B|A)病人疾病預(yù)測(cè)分類例子
? 看一個(gè)簡(jiǎn)單的形式化的列子,來(lái)說明貝葉斯分類的作用 這個(gè)例子來(lái)自:阮一峰老師的介紹貝葉斯應(yīng)用博文中的一個(gè)病人分類的例子 如下:其中特征屬性是癥狀和職業(yè),類別是疾病(包括感冒,過敏、腦震蕩) 某個(gè)醫(yī)院早上收了六個(gè)門診病人,如下表。 [plain]?view plaincopy print?貝葉斯分類的定義
1、設(shè)為一個(gè)待分類項(xiàng),而每個(gè)a為x的一個(gè)特征屬性。
????? 2、有類別集合。
????? 3、計(jì)算。
????? 4、求出在X個(gè)屬性條件下,所有類別的概率,選取概率最大的。則X屬于概率最大的類別
,則。?
?根據(jù)貝葉斯定理,要求P(A|B),只要求出P(B|A)即可 .這里Y指A,X指B.把B分解為各個(gè)特征屬性,求出每個(gè)類別的每個(gè)特征屬性即可,如下
? ?1、找到一個(gè)已知分類的待分類項(xiàng)集合,這個(gè)集合叫做訓(xùn)練樣本集。???
?? 2、統(tǒng)計(jì)得到在各類別下各個(gè)特征屬性的條件概率估計(jì)。即。
? ?3、如果各個(gè)特征屬性是條件獨(dú)立的,則根據(jù)貝葉斯定理有如下推導(dǎo):
??????
????? 因?yàn)榉帜笇?duì)于所有類別為常數(shù),因?yàn)槲覀冎灰獙⒎肿幼畲蠡钥伞S忠驗(yàn)楦魈卣鲗傩允菞l件獨(dú)立的,所以有:
??????
上式等號(hào)右邊的每一項(xiàng),都可以從統(tǒng)計(jì)資料中得到,由此就可以計(jì)算出每個(gè)類別對(duì)應(yīng)的概率,從而找出最大概率的那個(gè)類。
注意:各個(gè)特征屬性是條件獨(dú)立的,這是樸素貝葉斯所要求的,如果各個(gè)特征屬性不獨(dú)立,就不屬于樸素貝葉斯,屬于貝葉斯網(wǎng)絡(luò),后面的文章會(huì)講解。
?
賬號(hào)真假檢測(cè)例子
再看一個(gè)例子,該例子來(lái)自網(wǎng)上張陽(yáng)的算法雜貨鋪博文
?
根據(jù)某社區(qū)網(wǎng)站的抽樣統(tǒng)計(jì),該站10000個(gè)賬號(hào)中有89%為真實(shí)賬號(hào)(設(shè)為C0),11%為虛假賬號(hào)(設(shè)為C1)。
C0 = 0.89
C1 = 0.11
接下來(lái),就要用統(tǒng)計(jì)資料判斷一個(gè)賬號(hào)的真實(shí)性。假定某一個(gè)賬號(hào)有以下三個(gè)特征:
F1: 日志數(shù)量/注冊(cè)天數(shù)?
F2: 好友數(shù)量/注冊(cè)天數(shù)?
F3: 是否使用真實(shí)頭像(真實(shí)頭像為1,非真實(shí)頭像為0)
F1 = 0.1?
F2 = 0.2?
F3 = 0
請(qǐng)問該賬號(hào)是真實(shí)賬號(hào)還是虛假賬號(hào)?
方法是使用樸素貝葉斯分類器,計(jì)算下面這個(gè)計(jì)算式的值。
P(F1|C)P(F2|C)P(F3|C)P(C)
雖然上面這些值可以從統(tǒng)計(jì)資料得到,但是這里有一個(gè)問題:F1和F2是連續(xù)變量,不適宜按照某個(gè)特定值計(jì)算概率。
一個(gè)技巧是將連續(xù)值變?yōu)殡x散值,計(jì)算區(qū)間的概率。比如將F1分解成[0, 0.05]、(0.05, 0.2)、[0.2, +∞]三個(gè)區(qū)間,然后計(jì)算每個(gè)區(qū)間的概率。在我們這個(gè)例子中,F1等于0.1,落在第二個(gè)區(qū)間,所以計(jì)算的時(shí)候,就使用第二個(gè)區(qū)間的發(fā)生概率。
根據(jù)統(tǒng)計(jì)資料,可得:
P(F1|C0) = 0.5, P(F1|C1) = 0.1?
P(F2|C0) = 0.7, P(F2|C1) = 0.2?
P(F3|C0) = 0.2, P(F3|C1) = 0.9
因此,
P(F1|C0) P(F2|C0) P(F3|C0) P(C0)?
= 0.5 x 0.7 x 0.2 x 0.89?
= 0.0623
P(F1|C1) P(F2|C1) P(F3|C1) P(C1)?
= 0.1 x 0.2 x 0.9 x 0.11?
= 0.00198
可以看到,雖然這個(gè)用戶沒有使用真實(shí)頭像,但是他是真實(shí)賬號(hào)的概率,比虛假賬號(hào)高出30多倍,因此判斷這個(gè)賬號(hào)為真。
?
貝葉斯分類的含義
?長(zhǎng)久以來(lái),人們對(duì)一件事情發(fā)生或不發(fā)生的概率,只有固定的0和1,即要么發(fā)生,要么不發(fā)生,從來(lái)不會(huì)去考慮某件事情發(fā)生的概率有多大,不發(fā)生的概率又是多大。比如如果問那時(shí)的人們一個(gè)問題:“有一個(gè)袋子,里面裝著若干個(gè)白球和黑球,請(qǐng)問從袋子中取得白球的概率是多少?”他們會(huì)想都不用想,會(huì)立馬告訴你,取出白球的概率就是1/2,要么取到白球,要么取不到白球,即θ只能有一個(gè)值,不是1/2,就是0,而且不論你取了多少次,取得白球的概率θ始終都是1/2,即不隨觀察結(jié)果X 的變化而變化。
直到貝葉斯定理的出現(xiàn),貝葉斯定理不把概率θ看做一個(gè)固定的值(比如上面取白球的概率一直都是1/2),而看做一個(gè)隨機(jī)變量,他會(huì)隨著觀察結(jié)果變化
?
貝葉斯及貝葉斯派提出了一個(gè)思考問題的固定模式:
- 先驗(yàn)分布?+ 樣本信息??后驗(yàn)分布
? ? 上述思考模式意味著,新觀察到的樣本信息將修正人們以前對(duì)事物的認(rèn)知。換言之,在得到新的樣本信息之前,人們對(duì)的認(rèn)知是先驗(yàn)分布,在得到新的樣本信息后,人們對(duì)的認(rèn)知為。
?
?
條件概率公式進(jìn)行變形,可以得到如下形式:
?
?? ??P(A|B)=P(A) ? ?* ? ?P(B|A)/P(B)
我們把P(A)稱為"先驗(yàn)概率",即在事件B發(fā)生之前,事件A發(fā)生的概率,在事件B發(fā)生之前,它是一個(gè)無(wú)條件分布,因?yàn)锳還沒有與事件B關(guān)聯(lián)上,他是先驗(yàn)分布。
?
P(A|B)稱為"后驗(yàn)概率"(Posterior probability),即在B事件發(fā)生之后,我們對(duì)A事件概率的重新評(píng)估。P(B|A)/P(B)稱為"可能性函數(shù)"(Likelyhood),這是一個(gè)調(diào)整因子,使得預(yù)估概率更接近真實(shí)概率。它的分布就是后驗(yàn)分布
所以,條件概率可以理解成下面的式子:
后驗(yàn)概率 = 先驗(yàn)概率 x 調(diào)整因子
這就是貝葉斯推斷的含義。我們先預(yù)估一個(gè)"先驗(yàn)概率",然后加入實(shí)驗(yàn)結(jié)果,看這個(gè)實(shí)驗(yàn)到底是增強(qiáng)還是削弱了"先驗(yàn)概率",由此得到更接近事實(shí)的"后驗(yàn)概率"。
在這里,如果"可能性函數(shù)"P(B|A)/P(B)>1,意味著"先驗(yàn)概率"被增強(qiáng),事件A的發(fā)生的可能性變大;如果"可能性函數(shù)"=1,意味著B事件無(wú)助于判斷事件A的可能性;如果"可能性函數(shù)"<1,意味著"先驗(yàn)概率"被削弱,事件A的可能性變小。
?
水果糖問題例子
這個(gè)例子同樣來(lái)自阮一峰老師的博文,加深對(duì)貝葉斯推斷的理解
?
?
第一個(gè)例子。兩個(gè)一模一樣的碗,一號(hào)碗有30顆水果糖和10顆巧克力糖,二號(hào)碗有水果糖和巧克力糖各20顆。現(xiàn)在隨機(jī)選擇一個(gè)碗,從中摸出一顆糖,發(fā)現(xiàn)是水果糖。請(qǐng)問這顆水果糖來(lái)自一號(hào)碗的概率有多大?
我們假定,H1表示一號(hào)碗,H2表示二號(hào)碗。由于這兩個(gè)碗是一樣的,所以P(H1)=P(H2),也就是說,在取出水果糖之前,這兩個(gè)碗被選中的概率相同。因此,P(H1)=0.5,我們把這個(gè)概率就叫做"先驗(yàn)概率",即沒有做實(shí)驗(yàn)之前,來(lái)自一號(hào)碗的概率是0.5。
再假定,E表示水果糖,所以問題就變成了在已知E的情況下,來(lái)自一號(hào)碗的概率有多大,即求P(H1|E)。我們把這個(gè)概率叫做"后驗(yàn)概率",即在E事件發(fā)生之后,對(duì)P(H1)的修正。
根據(jù)貝葉斯定理,得到
?
P(H1|E)=P(H1) ?* ?P(E|H1)/P(E)
已知,P(H1)等于0.5,P(E|H1)為一號(hào)碗中取出水果糖的概率,等于0.75,那么求出P(E)就可以得到答案。根據(jù)全概率公式(不懂全概率公式的可以查找相關(guān)資料理解),
? ??
?P(E)=P(E|H1) * P(H1) ?+ ?P(E|H2)*P(H2)
?
所以,將數(shù)字代入原方程,得到
?
?
P(H1|E)=0.5* ? 0.75/0.625=0.6
????
?
?
這表明,來(lái)自一號(hào)碗的概率是0.6。也就是說,取出水果糖之后,H1事件的可能性得到了增強(qiáng)。
?
?
連續(xù)型特征屬性和零概率事件處理
上面講的特征屬性值,都是離散的,賬號(hào)真假檢測(cè)例子中把連續(xù)的轉(zhuǎn)換成區(qū)間,每個(gè)區(qū)間也可以看成離散的,但是如果在不能這樣轉(zhuǎn)換的情況下怎么解決?如果特征屬性值是不是離散的,而是連續(xù)的怎么辦?
我們是站在巨人的肩膀上,前人早已經(jīng)為我們找到了應(yīng)對(duì)之策
?
當(dāng)特征屬性為連續(xù)值時(shí),通常假定其值服從高斯分布(也稱正態(tài)分布)。即:
??????
????? 而
????? 因此只要計(jì)算出訓(xùn)練樣本中各個(gè)類別中此特征項(xiàng)劃分的各均值和標(biāo)準(zhǔn)差,代入上述公式即可得到需要的估計(jì)值。(ak為觀察到的屬性值)
????? 另一個(gè)需要討論的問題就是當(dāng)P(a|y)=0怎么辦,當(dāng)某個(gè)類別下某個(gè)特征項(xiàng)劃分沒有出現(xiàn)時(shí),就是產(chǎn)生這種現(xiàn)象,這會(huì)令分類器質(zhì)量大大降低。為了解決這個(gè)問題,引入了拉普拉斯校準(zhǔn),它的思想非常簡(jiǎn)單,就是對(duì)沒類別下所有劃分(概率為零的)的計(jì)數(shù)加1,這樣如果訓(xùn)練樣本集數(shù)量充分大時(shí),并不會(huì)對(duì)結(jié)果產(chǎn)生影響,并且解決了上述頻率為零的尷尬局面。
?
買電腦是否和收入相關(guān)的例子
?
驗(yàn)證買電腦,是否和收入有關(guān)的場(chǎng)景下:
類 buys_computer=yes包含1000個(gè)元組,有0個(gè)元組income=low ?,990個(gè)元組 income=medium,10個(gè)元組income=high,這些事件的概率分別是0, ? ?0.990, ? ?0.010.
有概率為0,肯定不行.使用拉普拉斯校準(zhǔn),對(duì)每個(gè)收入-值對(duì)應(yīng)加1個(gè)元組,分別得到如下概率
?
?
[plain]?view plaincopy print?這些校準(zhǔn)的概率估計(jì)與對(duì)應(yīng)的未校準(zhǔn)的估計(jì)很接近,但是避免了零概率值
?
性別分類的例子
再看一個(gè)阮一峰老師的樸素貝葉斯應(yīng)用一文中摘自維基百科的例子,關(guān)于處理連續(xù)變量的另一種方法。
下面是一組人類身體特征的統(tǒng)計(jì)資料。
?
?
[plain]?view plaincopy print?
?
已知某人身高6英尺、體重130磅,腳掌8英寸,請(qǐng)問該人是男是女?
根據(jù)樸素貝葉斯分類器,計(jì)算下面這個(gè)式子的值。
P(身高|性別) x P(體重|性別) x P(腳掌|性別) x P(性別)
這里的困難在于,由于身高、體重、腳掌都是連續(xù)變量,不能采用離散變量的方法計(jì)算概率。而且由于樣本太少,所以也無(wú)法分成區(qū)間計(jì)算。怎么辦?
這時(shí),可以假設(shè)男性和女性的身高、體重、腳掌都是正態(tài)分布,通過樣本計(jì)算出均值和方差,也就是得到正態(tài)分布的密度函數(shù)。有了密度函數(shù),就可以把值代入,算出某一點(diǎn)的密度函數(shù)的值。
比如,男性的身高是均值5.855、方差0.035的正態(tài)分布。所以,男性的身高為6英尺的概率的相對(duì)值等于1.5789(大于1并沒有關(guān)系,因?yàn)檫@里是密度函數(shù)的值,只用來(lái)反映各個(gè)值的相對(duì)可能性)。
有了這些數(shù)據(jù)以后,就可以計(jì)算性別的分類了。
P(身高=6|男) x P(體重=130|男) x P(腳掌=8|男) x P(男)?
= 6.1984 x e-9
P(身高=6|女) x P(體重=130|女) x P(腳掌=8|女) x P(女)?
= 5.3778 x e-4
可以看到,女性的概率比男性要高出將近10000倍,所以判斷該人為女性。
?
下一篇會(huì)寫貝葉斯網(wǎng)絡(luò)。
?
參考文章:
http://www.ruanyifeng.com/blog/2011/08/bayesian_inference_part_one.html
http://www.ruanyifeng.com/blog/2013/12/naive_bayes_classifier.html
http://www.cnblogs.com/leoo2sk/archive/2010/09/17/naive-bayesian-classifier.html
http://blog.csdn.net/zdy0_2004/article/details/41096141
?
參考書籍:數(shù)據(jù)挖掘概念與技術(shù)。數(shù)據(jù)挖掘十大算法,統(tǒng)計(jì)學(xué)概率論方面的數(shù)學(xué)知識(shí)
碼字不易,轉(zhuǎn)載請(qǐng)指明出自http://blog.csdn.net/tanggao1314/article/details/66478782
?
轉(zhuǎn)載于:https://www.cnblogs.com/csguo/p/7804355.html
總結(jié)
以上是生活随笔為你收集整理的[数据挖掘]朴素贝叶斯分类的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android技巧分享——Android
- 下一篇: 【USACO Feb 2014】Cow