天天看點

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

簡介

這次我們來談談機器學習中另外一個數學氣息比較濃的算法樸素貝葉斯算法。

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

當然,可能你已經忘記了,那我們就先看看公式吧

$$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類的機率是多少。

顯然,隻要我們算出每一個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倉庫中

如果你對機器學習的算法有足夠的認識,你會發現樸素貝葉斯和前些時候提到的K鄰近算法,算是比較容易自己實作的,因為其他算法即使忽略數學證明和推導,你也不可避免的了解每一個參數和函數的意義,這樣你才能了解調參後悔對模型有什麼影響,但是樸素貝葉斯和K鄰近算法,隻是單純的代數運算而已。

既然如此,對機器學習感興趣的同學,為什麼不自己實作一次呢?have fun~~~