0基础讲解机器学习算法-朴素贝叶斯分类器
樸素貝葉斯分類器可以說是最經(jīng)典的基于統(tǒng)計的機(jī)器學(xué)習(xí)模型了。首先,暫且不管貝葉斯是什么意思,樸素這個名字放在分類器中好像有所深意。
一查,發(fā)現(xiàn)這個分類器的英文是“Na?ve Bayes”。Na?ve(讀作“哪義務(wù)”)即幼稚的、天真的(但是總不能叫“幼稚貝葉斯”阿),Bayes即貝葉斯。那么這里的na?ve是什么意思呢?其實就是代表著簡化問題復(fù)雜度,像一個小孩子一樣,不考慮復(fù)雜的東西。
一句話描述na?ve就是“特征獨(dú)立性假設(shè)”。詳細(xì)的說,這里的獨(dú)立性有兩個意思,一個是“條件獨(dú)立性“,一個是“位置獨(dú)立性”,分別是什么意思呢?
如果我們要識別一個人的肖像,要用到“身高”和“體重”這兩個特征。然而“身高”和“體重”明明是有關(guān)系的,身高1米8的人是不太能體重低于100斤的,但是在樸素貝葉斯分類器的眼里,身高和體重沒有關(guān)系。這個例子的數(shù)學(xué)表達(dá)就是P(B|A)=P(A)*P(B),意思即特征A與特征B相互獨(dú)立(毫無關(guān)系)。這種假設(shè)就叫“條件獨(dú)立性假設(shè)”。
位置獨(dú)立性的意思是先考慮特征A再考慮特征B,跟先考慮特征B再考慮特征A所帶來的結(jié)果是完全一樣的。很好理解,比如在文本挖掘中,“我|喜歡|狗”中有三個特征,分別是“我”“喜歡”“狗”,如果我們按照先后順序來考慮這三個特征的話,就能得出你喜歡狗這個事實。但是如果按照“狗”“喜歡”“我”這樣的順序的話,得到的意思就完全變了。顯然,這里各個特征之間的先后順序,即位置是很重要的。然而,樸素貝葉斯的假設(shè)就是位置之間是獨(dú)立的,即毫無關(guān)系的。因此在樸素貝葉斯看來,“我|喜歡|狗”與“狗|喜歡|我”是同一個分類任務(wù)。
好,樸素的意思我們懂了,那么核心就是貝葉斯了。
顯然,在統(tǒng)計理論中,與貝葉斯最相關(guān)的就是貝葉斯定理,也叫貝葉斯公式。不用管能不能看懂,先貼公式:
這個公式看似有點(diǎn)繞,其實如果我們把公式里的A看作我們已經(jīng)知道的特征的值,(注意這里我們僅僅考慮一個特征,即僅考慮用一個特征對目標(biāo)進(jìn)行分類的任務(wù))把B看作分類目標(biāo)的一個類別,就會發(fā)現(xiàn)非常非常簡單啦。所以呢,這個公式的意思就是,已知特征的值為A的情況下,目標(biāo)類別為B的概率(P(B|A))就等于已知目標(biāo)類別是B的情況下,特征的值為A的概率(P(A|B))乘以什么都不知道的情況下,目標(biāo)類別為B的概率(P(B),專業(yè)說法叫B的先驗概率),再除以什么都不知道的情況下,特征的值為A的概率。
誒?細(xì)心的讀者有沒有發(fā)現(xiàn)什么呢?相信此時肯定已經(jīng)有人激動了!我們這里看一個栗子。
就是這個栗子。
哈哈,是下面的栗子啦。
假如小夕捕獲了一批魚,這批魚中只有黑魚和三文魚。雖然小夕并不認(rèn)識這兩種魚,但是小夕有設(shè)備可以測量出每條魚肚皮的亮度等級(比如最白為10級,最黑為1級。然后有一位好心的粉絲送給了小夕一批標(biāo)好類別的黑魚和三文魚。那么小夕借助上面這些已經(jīng)知道的東西,用樸素貝葉斯分類器來給小夕捕的那些魚的類別貼標(biāo)簽,怎么做呢?
誒?這里不是說魚肚皮的亮度等級都能測出來嘛?那魚肚皮的亮度等級不就是一個特征咯,每條魚測出來的亮度等級不就是特征的值嘛。有沒有靈光一現(xiàn)?
對!還記得貝葉斯定理的等式左邊的P(B|A)的意思嗎?假如某條魚測得的亮度等級為2,那么我們只需要計算并比較 P(類別=黑魚|特征=2) 與 P(類別=三文魚|特征=2) 的大小不就可以啦!肯定是值更大的,也就是概率更大的,就是我們要輸出的類別呀!專業(yè)說法叫取最大后驗概率。
那么怎么計算呢?顯然就是用等式右邊那三坨(噗,好不文明的說)。為了方便閱讀,在這里再貼一遍。
首先,這三坨中,除號底下的P(A)代表特征取某值的概率,然而我們要預(yù)測某一條魚的類別,顯然這條魚的特征的值我們已經(jīng)知道了,即定值,因此不管是求 P(類別=黑魚|特征=2) 也好,求 P(類別=三文魚|特征=2) 也好, P(A) 是相同的值,對于比較這兩個概率的大小沒有任何幫助。因此干脆不計算了。
然后,這三坨中的 P(B) 代表 P(類別取某類) ,也就是某類別的先驗概率,怎么計算得到呢?還記得粉絲給了小夕一堆魚嗎?那我們直接用這一堆魚來近似得到 P(B) 不就可以啦!
(按照概率論的大數(shù)定律的意思,當(dāng)樣本足夠多時,樣本的統(tǒng)計比率就可以近似真實概率。回想一下拋10000次均勻硬幣時會有接近5000次正面向上,由此得到正面向上的概率為0.5)
因此,假如粉絲給了小夕10000條魚,其中3000條是黑魚,7000條是三文魚,那顯然 P(黑魚)=3000/10000=0.3 ,同理 P(三文魚)=0.7 。看,P(B) 解決了吧。
三坨中的最后一坨, P(A|B) ,也就是 P(特征為某值|已知類別為某類) 怎么得到呢?也很輕松啊,同樣是利用粉絲給的10000條魚,小夕用設(shè)備將這10000條魚的亮度等級測出來后,只需要從每個類別的魚群中,統(tǒng)計一下特征的每個取值下的魚占該類別的魚總數(shù)的比率就好啦。
比如黑魚有3000條,其中亮度等級為8的魚一共有1000條,那么 P(特征=8|類別=黑魚)=1000/3000=0.3 。同理可以得到其他 P(A|B) 的值啦。
至此,等式右邊全都解決了,因此等式左邊也能算出來了。所以對于下面這種情況的話(粉絲給了小夕100來條魚):
小夕做好的樸素貝葉斯分類器肯定會將亮度等級小于x*的魚都認(rèn)為是三文魚(在此情況下,類別判定為三文魚的概率總是比黑魚的概率大),反之都認(rèn)為是黑魚。
那么我們也發(fā)現(xiàn)了,誒?這樣的話,對于亮度等級為4-7之間的魚,很難判定呀。怎么辦呢?當(dāng)然是增加特征啦!比如小夕又買了個尺子,可以測量魚身的長度。
誒?那兩個特征的情況下,怎么做呢?還記得本文開頭時提到的獨(dú)立性假設(shè)嗎,就在這里派上用場了。對于多個特征的情況,只需要分別計算出每個特征的情況,然后將這些情況直接相乘就ok了~
也就是假設(shè)A為特征集合,包含M和N這兩個特征,那么只需要將等式右邊的這個 P(A|B) 展開成 P(M|B)*P(N|B) 就可以啦,也就是只需要在代碼里迭代一下可以啦。看吧,na?ve一點(diǎn)是可以避免很多麻煩的。
加上魚長這個特征后,可能就成這樣子了。
看,一下子好分多了吧~這樣出來的樸素貝葉斯分類器的精度就高多啦。至此小夕成功完成了揀魚任務(wù)!
喜歡小夕的文章可以關(guān)注小夕的微信訂閱號“夕小瑤的賣萌屋”哦,這里的干貨很好吃O(shè)(∩_∩)O
總結(jié)
以上是生活随笔為你收集整理的0基础讲解机器学习算法-朴素贝叶斯分类器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java动态追踪技术探究
- 下一篇: 阿里蚂蚁金服中间件(Java 4轮面试题