機器學習從入門到放棄之樸素貝葉斯

簡介

此次咱們來談談機器學習中另一個數學氣息比較濃的算法樸素貝葉斯算法git

可能有朋友會看見數學氣息比較濃心理就咯噔一下,先別急着叉掉本文,說樸素貝葉斯算法算法的數學氣息比較濃,並不是它有什麼巨發雜的數學公式,而是它常見於機率統計之中,在本科教育就有對其比較詳細的描述,而以前體積的K鄰近決策樹,包括之後可能會談到的SVM,神經網絡網絡等,恐怕不是專業領域,很難知道這些名詞。github

固然,可能你已經忘記了,那咱們就先看看公式吧算法

$$P(B|A)=frac {P(A|B)P(B)} {P(A)}$$網絡

怎麼樣,是否有一種熟悉感?機器學習

上面就是貝葉斯公式,接下來,開始說一下算法該如何設計。函數

算法設計

第一步咱們須要對上述公式進行推廣至N維特徵學習

$$P(Y|X_1X_2.....X_N)=frac {P(X_1X_2.....X_N|Y)P(Y)}{P(X_1X_2.....X_N)}$$設計

上述公式可解析爲,當對象知足[X1,X2……Xn]這些特徵時,該對象屬於Y類的機率是多少。code

顯然,只要咱們算出每個Y的值,機率最大的那個類別,就是咱們想要的。對象

因爲做爲分母的P(X_1X_2.....X_N)在每一個類別的計算都是相同的,而咱們只需比較大小,並不須要每個的準確值,公式天然能夠簡化成

$$f(x)=P(X_1X_2.....X_N|Y)P(Y)$$

爲了進一步簡化計算,咱們假設每一個特徵都彼此獨立(這也是該算法被稱爲樸素貝葉斯的緣由),所以,公式將變成

$$f(x)=P(X_1|Y)P(X_2|Y).....P(X_n|Y)P(Y)$$

這一下就至關清晰明瞭。

P(X1|Y)P(X2|Y).....P(Xn|Y)與輸入變量有關(分別表示在訓練集中Y某值時,而後X1爲某值時的機率),但P(Y)是恆定的,所以該算法就是在訓練過程當中,根據訓練集,計算出每個Y的機率值,再在運行期與特徵進行運算。
最後只需進行簡單的排序,便可得到預測結果。

代碼實現

代碼也是在我以前的github倉庫中

github

若是你對機器學習的算法有足夠的認識,你會發現樸素貝葉斯和前些時候提到的K鄰近算法,算是比較容易本身實現的,由於其餘算法即便忽略數學證實和推導,你也不可避免的理解每個參數和函數的意義,這樣你才能理解調參後悔對模型有什麼影響,可是樸素貝葉斯K鄰近算法,只是單純的代數運算而已。

既然如此,對機器學習感興趣的同窗,爲何不本身實現一次呢?have fun~~~

相關文章
相關標籤/搜索