朴素貝葉斯算法
【轉載時請注明來源】:http://www.cnblogs.com/runner-ljt/
Ljt 勿忘初心 無畏未來
作為一個初學者,水平有限,歡迎交流指正。
朴素貝葉斯分類法是一種生成學習算法。
假設:在y給定的條件下,各特征Xi 之間是相互獨立的,即滿足 : P(x1,x2.....xm | y)=∏ P(xi | y) (該算法朴素的體現之處)
原理: 貝葉斯公式
思想:對於待分類樣本,求出在該樣本的各特征出現的條件下,其屬於每種類別的概率(P(Yi|X)),哪種類別的概率大就將該樣本判別為哪一種類別。
(P(X)為x的先驗概率,與Y無關,在具體計算是分母可以直接忽略,只計算分子)
P(xi | y)的估計
(1)特征屬性為離散值
直接用每一類別中各名錄出現的頻率作為其概率值P(xi|y)
(2)特征屬性為連續性值
假設特征屬性服從正太分布,用各類別的樣本均值及標准差作為正態分布的參數。
Laplace 平滑
在訓練樣本中,某一特征的屬性值可能沒有出現,為了保證一個屬性出現次數為0時,能夠得到一個很小但是非0的概率值。
在計算P(xi|y)時分子加上 Pi*U ; 分母加上 U 。
其中Pi 表示xi 出現的先驗概率,數值較大的U表示這些先驗值是比較重要的,數值較小的U表示這些先驗值的影響較小;
一般情況下,Pi=1/N . (N為該特征所含有的屬性類的數目)
R實現
包:e1071 ; 函數:naiveBayes
> > library(e1071) > head(iris) Sepal.Length Sepal.Width Petal.Length Petal.Width Species 1 5.1 3.5 1.4 0.2 setosa 2 4.9 3.0 1.4 0.2 setosa 3 4.7 3.2 1.3 0.2 setosa 4 4.6 3.1 1.5 0.2 setosa 5 5.0 3.6 1.4 0.2 setosa 6 5.4 3.9 1.7 0.4 setosa > classifier<-naiveBayes(iris[,c(1:4)],iris[,5]) > classifier Naive Bayes Classifier for Discrete Predictors Call: naiveBayes.default(x = iris[, c(1:4)], y = iris[, 5]) A-priori probabilities: iris[, 5] setosa versicolor virginica 0.3333333 0.3333333 0.3333333 Conditional probabilities: Sepal.Length iris[, 5] [,1] [,2] setosa 5.006 0.3524897 versicolor 5.936 0.5161711 virginica 6.588 0.6358796 Sepal.Width iris[, 5] [,1] [,2] setosa 3.428 0.3790644 versicolor 2.770 0.3137983 virginica 2.974 0.3224966 Petal.Length iris[, 5] [,1] [,2] setosa 1.462 0.1736640 versicolor 4.260 0.4699110 virginica 5.552 0.5518947 Petal.Width iris[, 5] [,1] [,2] setosa 0.246 0.1053856 versicolor 1.326 0.1977527 virginica 2.026 0.2746501 > #A-priori probabilities 為 樣本中個類別出現的頻率 > #Conditional probabilities (該樣本的特征屬於連續型值)該值表示各特征在各類別上的服從正太分布下的均值和標准差 > > > > #檢驗分類器效果 > table(predict(classifier,iris[,-5]),iris[,5]) setosa versicolor virginica setosa 50 0 0 versicolor 0 47 3 virginica 0 3 47 > > #構造新數據並進行預測 > newdata<-data.frame(Sepal.Length=5, Sepal.Width=2.3, Petal.Length=3.3, Petal.Width=1) > predict(classifier,newdata) [1] versicolor Levels: setosa versicolor virginica > >