vlambda博客
学习文章列表

[笔记] 朴素贝叶斯与拉普拉斯修正的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