【机器学习算法】 朴素贝叶斯

【机器学习算法】 朴素贝叶斯

朴素朴素贝叶斯分类是贝叶斯分类中最简单,也是常见的一种分类方法

数学原理

这里写图片描述

其中C叫做类别集合,其中每一个元素是一个类别,而I叫做项集合(特征集合),其中每一个元素是一个待分类项,f叫做分类器。分类算法的任务就是构造分类器f。

分类算法的内容是要求给定特征,让我们得出类别,这也是所有分类问题的关键。

这里写图片描述

当我们用A替换类别,用B替换特征,整个公式就明朗了许多。

适用情况

算法前提:

(1)自变量是独立的。
(2)样本发生的概率是已知的,即知道先验概率。

核心:

通过事件发生的先验概率来预测新事件发生的后验概率,并进行相应的惩罚和优化,从而较高正确率地进行分类。朴素贝叶斯预测模型是一种概率分类器。

当有许多自变量,一个因变量,因变量的标签很多时,我们可以这样做 :

(1)用随机森林函数和10重交叉验证抽样方法进行变量的特征选择,进行变量筛选。
(2)分出训练集和预测集,用于模型的正确性的验证。
(3)用朴素贝叶斯算法,计算根据自变量的取值来预测因变量的标签取值。
(4)评价模型,计算模型的正确性,AUC值,ROC 值。

R软件安装包 https://mirror.lzu.edu.cn/CRAN/bin/windows/base/R-3.4.2-win.exe

## 大神写的代码:
## R 语言

# 准备工作
# 下载并加载所需的应用包
if(!suppressWarnings(require(‘caret’))){
install.packages(‘caret’)
require(‘caret’)
}
if(!suppressWarnings(require(‘klaR’))){
install.packages(‘klaR’)
require(‘klaR’)
}
if(!suppressWarnings(require(‘pROC’))){
install.packages(‘pROC’)
require(‘pROC’)
}
# 读取蘑菇数据集
mydata <- read.csv(file = file.choose())
# 简单的了解一下数据
str(mydata)
summary(mydata)

# step 1
# 抽样,并将总体分为训练集和测试集
set.seed(12)
index <- sample(1:nrow(mydata), size = 0.75*nrow(mydata))
train <- mydata[index,]
test <- mydata[-index,]
# 大致查看抽样与总体之间是否吻合
prop.table(table(mydata$type))
prop.table(table(train$type))
prop.table(table(test$type))

# 抽样,并将总体分为训练集和测试集
set.seed(12)
index <- sample(1:nrow(mydata), size = 0.75*nrow(mydata))
train <- mydata[index,]
test <- mydata[-index,]
# 大致查看抽样与总体之间是否吻合
prop.table(table(mydata$type))
prop.table(table(train$type))
prop.table(table(test$type))

#构建rfe函数的控制参数(使用随机森林函数和10重交叉验证抽样方法,并抽取5组样本)
rfeControls_rf <- rfeControl(
functions = rfFuncs,
method = ‘cv’,
repeats = 5)
#使用rfe函数进行特征选择
fs_nb <- rfe(x = train[,-1],
y = train[,1],
sizes = seq(4,21,2),
rfeControl = rfeControls_rf)
fs_nb
plot(fs_nb, type = c(‘g’,’o’))
fs_nb$optVariables

结果显示,21个变量中,只需要选择6个变量即可

# step 2 
接下来,我们就针对这6个变量,使用朴素贝叶斯算法进行建模和预测:

# 使用klaR包中的NaiveBayes函数构建朴素贝叶斯算法
vars <- c(‘type’,fs_nb$optVariables)
fit <- NaiveBayes(type ~ ., data = train[,vars])
# 预测
pred <- predict(fit, newdata = test[,vars][,-1])
# 构建混淆矩阵
freq <- table(pred$class, test[,1])
freq

#step3  

# 模型的准确率
accuracy <- sum(diag(freq))/sum(freq)
accuracy
# 模型的AUC值
modelroc <- roc(as.integer(test[,1]),
as.integer(factor(pred$class)))
# 绘制ROC曲线
plot(modelroc, print.auc = TRUE, auc.polygon = TRUE,
grid = c(0.1,0.2), grid.col = c(‘green’,’red’),
max.auc.polygon = TRUE, auc.polygon.col = ‘steelblue’)

通过朴素贝叶斯模型,在测试集中,模型的准确率约为97%,而且AUC的值也非常高,一般超过0.8就说明模型比较理想了。

一般模型的准确率在80%以上,这个模型就可以用,当然准确率越高越好。

谢谢阅读 ~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 38
    评论
评论 38
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值