推薦 | 樸素貝葉斯演算法基於R語言的案例實現

、樸素貝葉斯分類的R函數介紹

1、樸素貝葉斯分類演算法的實現函數

R中的e1071包中的naiveBayes函數可以實現樸素貝葉斯演算法,具體的函數格式如下:

naiveBayes(x, y,laplace=0)

常用變數具體的參數解釋如下:

naiveBayes(formula,data,laplace=0,subset)

常用變數具體的參數解釋如下:

2、樸素貝葉斯分類演算法的預測函數

predict(object, newdata, type=c("class", "raw"))

常用變數具體的參數解釋如下:

、具體案例演示

用具體的一個實例來演示樸素貝葉斯演算法,並用ROC曲線對模型性能進行評價,具體數據集來自R中mlbench包的自帶數據集PimaIndiansDiabetes2,來基於樸素貝葉斯演算法識別糖尿病患者。

1、數據解讀

其中最後一個為分類變數,其餘為自變數

2、代碼解釋

註:

⑴str函數在查看數據結構時候,類變數必須為因子型變數,如果是其他類型的變數,則在後續分析的時候程序會報錯。

(2)summary函數是對數據進行描述性統計,觀察有無異常值的情況,如果出現異常值等情況,還可以通過boxplot ,boxplot.stats等函數來進行後續分析

註:

⑴VIM包和mice包可用來對缺失值進行探索,具體的函數有md.pattern,aggr,na.omit,

complete.cases等,以前兩個函數居多。aggr對缺失值的可視化探索結果如下:

(2)caret包中的preProcess函數可以進行缺失值的插補工作,由於preProcess函數的用處大大滴,這裡重點寫一下

preProcess函數可以進行數據的標準/歸一化處理,還可以進行數據缺失值的插補工作,具體的函數格式如下:

preProcess(x, method, na.remove = TRUE, k = 5)

常用變數具體的參數解釋如下:

註:

⑴caret包中的createDataPartition函數可以對數據進行等比抽樣,具體的函數格式如下:

createDataPartition(x, times=1, p,list=FALSE)

其中times是抽取的次數,1就好;p是抽取的概率,即數據量;list是是否以列表的形式輸出,用FALSE,用TRUE後續程序會報錯哦

(2)提到抽樣,大家會想到sample函數,sample函數是隨機抽樣(當然具體代碼也可以實現等比,但是很麻煩),caret包中的createDataPartition函數是實現等比抽樣的好方法。

補充:當要處理不平衡分類的情況,記得想起DMwR包中的SMOTE函數哈!

註:

⑴ gmodels包中的CrossTable函數可以來進行模型評估,得到的結果如下:

上面這個圖可以得到很多模型性能的指標,比如:靈敏性、特異性、精度、假正率等等,下面敘述的ROC曲線就是基於假正率和靈敏性這兩個指標繪製的。

(2) ROCR包中的prediction和performance函數可以聯袂繪製ROC曲線,先看一下這兩個函數的函數格式如下和常用變數具體的參數解釋如下:

pROC包也可以完成ROC曲線,具體代碼如下:

建議用pROC包,AUC值也給出。AUC值的範圍是0.5-1,越大說明模型效果越好。

、總結

模型的預測正確率為73.44%,但是通過gmodels包中的CrossTable函數得到的結果,有31個是陽性卻預測為陰性(假陰性),這是很可怕的,說明模型擬合的不好。

本文的目的是為了讓大家了解樸素貝葉斯演算法的建模流程以及回憶相關函數。

-----------------------------------

作者:張龍祥

專欄:張小胖專欄

大家也可以加小編微信:tswenqu (備註:知乎),進R語言中文社區 交流群,可以跟各位老師互相交流


推薦閱讀:

C 1.1 無需數學基礎如進行機器學習
長鏈剖分之O(nlgn)-O(1)求k級祖先
天天演算法 | Medium | 7. 最長不重複子字元串:Longest Substring Without Repeating Characters
萬物演算法
【數學】數學規劃簡介

TAG:R编程语言 | 算法 | 数据挖掘 |