天天看點

機器學習實戰——樸素貝葉斯機器學習實戰——樸素貝葉斯

機器學習實戰——樸素貝葉斯

思想如下:

有一個物體,具有屬性1,2,那麼它屬于類别A的機率是多少呢?屬于類别B的機率又是多少呢?如果屬于A的機率大于輸入B的機率,那麼我們就認為這個物體很可能屬于A。這就是樸素貝葉斯機率理論的思想。

思想很簡單,目标就是求出一個未知物體的所有屬性值對應的各分類的機率。用一個簡單的例子表示這個方法:

假設有兩個籃子A和B,其中一個籃子A有4000個紅色的球和4000個白色的球,另一個籃子B裡有1600個紅色的球和400個白色的球。現在我們從其中一個籃子裡拿出一個球,是紅色,那麼這個球是從A裡拿出來的機率有多少?是從B裡拿出來的機率又是多少?

這裡涉及到機率論的簡單知識:

如果用P(X|Y)表示在條件Y下發生X的機率,那麼P(X|Y)=P(XY)/P(Y),上面的例子下,令條件Y為從A籃子取一個球,X條件為拿出一個紅色球,那麼P(Y)=8000/10000=4/5,P(XY)指同時發生X和Y,很容易計算出來4000/10000=2/5

而P(X|Y)=(2/5)/(4/5)=1/2。

接下來,我們的目标是計算出在發生條件X(拿出一個紅球)下條件Y發生的機率,即P(Y|X),從上面的公式可以看出P(Y|X)=P(YX)/P(X)=P(X|Y)P(Y)/P(X),這就是整個算法的核心了,在上面的例子中為(1/2)(4/5)/(5600/10000)。

這裡的球色就對應了屬性值,而A、B籃子對應的就是類别。

如何計算P(X|Y)、P(Y)、P(X)?

從上面的例子可以看出,P(拿出紅球|從A籃子裡拿出)=A籃子裡紅球數/A籃子裡的總數(也可以表示為所有球中屬于A籃子的數量)。

P(Y)=P(A籃子取球)=A籃子裡的球數量/總數量

P(X)=P(取紅球)=紅球的數量/總球數

是以P(Y|X)就可以按上述公式計算出來了。

之是以用如此費勁的描述這麼一個簡單的例子,是因為接下來會将這個球的例子轉換為類别和屬性。弄清楚這每部分的計算方式,才能了解屬性值機率的計算方法。

用圖表表示算法:

第一步(計算每個屬性值對于每個類别的條件機率):

機器學習實戰——樸素貝葉斯機器學習實戰——樸素貝葉斯

第二步(計算每個類别出現的機率):

機器學習實戰——樸素貝葉斯機器學習實戰——樸素貝葉斯

第三步(計算P(X)):

需要注意,這一步在機率比較的時候是不需要計算的,因為樣本不變的話,無論拿出來的球是白球還是紅球,P(X)都是不會變的,是以比較大小的時候就不用計算這個了。

對訓練的樣本,把每個屬性經過上述方法處理後,就變成了幾個機率矩陣,每個矩陣對應了屬性值對類别的條件機率。

那麼對于遇到的未知類别的物體,其屬性x1,x2,x3……,那麼求它屬于類别A的機率即計算 p(x1)*p(x2)*p(x3)……*p(A),注意,這裡之是以可以直接相乘,是假設了所有屬性是獨立的,這個假設條件也是樸素貝葉斯機率這個“樸素”的來源。如果屬性之間有相關性,那麼p(x1x2)!=p(x1)*p(x2),就必須計算p(X1X2……Xn),這不在這章的算法中。

在計算中會遇到兩個問題,一個是p(Xi)可能是0,那麼算出來p(A|X)=0,書中的方法是把Xi出現的次數至少置為1,另外一個問題就是連續的機率(<1)相乘會下溢出進而輸出0,這個處理也很簡單,取ln之後相加就行了(機率論中的常用處理方法)。

心得總結:

1、 從上面的算法描述就可以看到,屬性值必須是有限的,否則無法用次數來計算機率,是以這個算法隻适合标稱型資料;

2、 書中用words來舉例子,用一個words出現與否來作為屬性值的0,1計算,如果是一個屬性有多個值,此時的計算方法需要稍微處理一下,将每個值出現與否看作是0,1來處理,也就是說,這個算法裡其實沒有屬性,隻有值。

3、 這一節中涉及到向RSS提取句子,因為總所周知的原因,書裡的網站無法通路,結果我用了個中文網站,才發現中文的詞語和英文的word完全不是一個概念,用非字元号分割隻能分割成句子,這個問題以後再想想怎麼處理。

4、 這個算法一旦建立了樣本,每次隻需要對輸入的物體屬性,依次周遊類别數*屬性個數次,計算log和乘法,再比較大小,是以耗時很短,比kNN的時間要短很多,而決策樹有一個問題就是,對于樣本裡屬性完全一樣的情況,決策樹沒有很好的反應出類别機率的影響(即p(Y)),而是采用葉子結點裡的局部高機率,是以有時候決策樹結果不如貝葉斯機率。

5、因為之前網絡上很多關于酒鬼問題,三門問題之類的争論,其中很多都是因為例子問題導緻的,比如這裡我用兩個籃子來舉例,估計會有人說從A籃子和從B籃子取東西機率不是1/2嗎?這是例子不當造成的,如果換個說法,這些球放在布上,球上有标記屬于A還是B,然後蒙着眼随便抓一個,發現是紅球,那麼這個紅球屬于A籃子的機率是多少。這樣就可以知道,肯定不是1/2了,因為有A籃子标記的有8000個球,B籃子标記隻有2000個。

繼續閱讀