[笔记] 朴素贝叶斯与拉普拉斯修正的R应用
既然是"Naive"贝叶斯,封面当然要Naive一点啦!
*朴素贝叶斯的“朴素”Naive又译作"天真的",感觉用naive bayes更能感觉到统计学的丝丝趣味~
------------------------
贝叶斯最优决策通过最大化后验概率来预测max P(y[i]=k | x=x[i]),但对于高维的稀疏矩阵(x[i]的维度很高,且x[i]可以是连续、离散或混合型随机向量),不适用。
朴素贝叶斯分类器Naive Bayes Classifier,假设在给定类别y[i]=k的情况下,x[i]的各分量属性之间条件独立,即将高维问题降为一维问题,只要分别估计p个单变量的条件概率P(x[ij] | y[i]=k), 其中j=1, …, p,然后连乘在一起即可。
拉普拉斯修正Laplacian correction将x[ij]的不同取值在第k类数据中的出现次数均加上1,从而共有(n[k]+1)次取值为0,而有1次取值为1。因此,避免了后验概率之样本估计为0时导致P计算结果为0的情况。
朴素贝叶斯R命令
set.seed(1)
train_index<-sample(1000,700)
train<-dataframe[train_index, ]
test<-dataframe[-train_index, ]
install.packages(“e1071”)
library(e1071)
训练集
fit<-naiveBayes(y~. , data=train) #朴素贝叶斯估计
pred_train<-predict(fit, newdata=train)#在训练集中预测
(table<-table(Predicted=pred_train,Actual=train$y)) #混淆矩阵
(Train_error_rate<-1-sum(diag(table))/sum(table))
---->0.2882533训练集预测错误率28.8%
测试集
pred_test<-predict(fit, newdata=test) #在测试集中预测
(table<-table(Predicted=pred_test,Actual=test$y)) #混淆矩阵
(Test_error_rate<-1-sum(diag(table))/sum(table)) #测试集预测错误率
----> 28.6%
拉普拉斯修正
fit<-naiveBayes(y~., data=train,laplace=1) #拉普拉斯平滑参数设为1
pred_test<-predict(fit, newdata=test)
(table<-table(Predicted=pred_test,Actual=test$y))
(Test_error_rate<-1-sum(diag(table))/sum(table))
----> 28.6%
#此案例中,拉普拉斯修正对于测试误差并没有影响,说明朴素贝叶斯对这个dataframe的预测效果不好。
End