R 中的資料探勘演算法/分類/樸素貝葉斯
本章介紹了用於分類的樸素貝葉斯演算法。樸素貝葉斯 (NB) 基於對貝葉斯定理(來自機率論)的應用,並帶有強烈的(樸素的)獨立性假設。它特別適合輸入維度很高的情況。儘管它很簡單,但樸素貝葉斯通常可以勝過更復雜的分類方法。
樸素貝葉斯分類器可以處理任意數量的獨立變數,無論它們是連續的還是分類的。給定一組變數, = {}, 我們希望為事件 在可能的結果集合 = {} 中構建後驗機率。用更熟悉的語言來說, 是預測器, 是因變數中存在的分類級別集。使用貝葉斯規則
其中 是類成員資格的後驗機率,即 屬於 的機率。
實際上,我們只對該分數的分子感興趣,因為分母不依賴於,並且特徵的值是給定的,因此分母實際上是常數。分子等價於聯合機率
這裡引入了“樸素”條件獨立假設:假設每個特徵在條件上與其他任何特徵統計獨立,當。這意味著
當,因此聯合模型可以表示為
這意味著在以上獨立性假設下,類變數上的條件分佈可以表示為
其中 (證據)是一個僅依賴於 的縮放因子,即,如果特徵變數的值已知,則為常數。
最後,我們可以用一個類別等級 對一個新案例 F 進行標記,該等級實現最高的後驗機率。
可用實現
[edit | edit source]在 CRAN 上至少有兩個 R 實現的樸素貝葉斯分類可用
安裝和執行樸素貝葉斯分類器
[edit | edit source]E1071 是一個 CRAN 包,因此可以從 R 中安裝。
> install.packages('e1071', dependencies = TRUE)
安裝後,可以將 e1071 載入為庫。
> library(class) > library(e1071)
它附帶了一些著名的資料集,可以作為 ARFF 檔案(Weka 的預設檔案格式)載入。我們現在載入一個示例資料集,著名的鳶尾花資料集 [1],並使用預設引數學習一個樸素貝葉斯分類器。首先,讓我們看一下鳶尾花資料集。
資料集
[edit | edit source]鳶尾花資料集包含 150 個例項,對應於三種等頻的鳶尾花品種(山鳶尾、雜色鳶尾和維吉尼亞鳶尾)。下圖展示了雜色鳶尾,來自維基共享資源。

每個例項包含四個屬性:萼片長度(釐米)、萼片寬度(釐米)、花瓣長度(釐米)和花瓣寬度(釐米)。下一張圖片顯示了每個屬性與其他屬性的對比圖,不同類別用顏色區分。
> pairs(iris[1:4], main = "Iris Data (red=setosa,green=versicolor,blue=virginica)",
pch = 21, bg = c("red", "green3", "blue")[unclass(iris$Species)])

執行和結果
[edit | edit source]首先,我們需要指定要使用的基數。
> data(iris)
> summary(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width
Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
Median :5.800 Median :3.000 Median :4.350 Median :1.300
Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
Species
setosa :50
versicolor:50
virginica :50
之後,我們就可以使用前 4 列建立資料集的樸素貝葉斯模型,來預測第五列。(透過以下方式對目標列進行因子化:dataset$col <- factor(dataset$col) )
> classifier<-naiveBayes(iris[,1:4], iris[,5])
> table(predict(classifier, iris[,-5]), iris[,5])
setosa versicolor virginica
setosa 50 0 0
versicolor 0 47 3
virginica 0 3 47
分析
[edit | edit source]這個簡單的案例研究表明,樸素貝葉斯分類器在資料集上犯的錯誤很少,儘管資料集很簡單,但它不是線性可分的,如散點圖所示,並且透過檢視混淆矩陣也可以看出,所有誤分類都在雜色鳶尾和維吉尼亞鳶尾例項之間。
參考文獻
[edit | edit source]- ^ Fisher, R.A. (1936); The use of multiple measurements in taxonomic problems. Annual Eugenics, 7, Part II, 179-188.