【机器学习算法】 朴素贝叶斯
来源:互联网 发布:php 数组转换字符串 编辑:程序博客网 时间:2024/06/05 23:44
【机器学习算法】 朴素贝叶斯
朴素朴素贝叶斯分类是贝叶斯分类中最简单,也是常见的一种分类方法
数学原理
其中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_nbplot(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 0
- 机器学习算法-朴素贝叶斯
- 机器学习:朴素贝叶斯算法
- 机器学习--朴素贝叶斯算法
- 机器学习算法-朴素贝叶斯
- 机器学习算法:朴素贝叶斯
- 【机器学习算法】 朴素贝叶斯
- 朴素贝叶斯算法--机器学习
- 机器学习算法之朴素贝叶斯算法
- 机器学习算法之朴素贝叶斯算法
- 机器学习经典算法3-朴素贝叶斯
- 机器学习_算法_朴素贝叶斯
- 机器学习算法-深入探讨朴素贝叶斯
- 机器学习算法-朴素贝叶斯实战
- 机器学习实战-朴素贝叶斯算法
- 机器学习--朴素贝叶斯算法案例
- 机器学习算法-朴素贝叶斯Python实现
- 机器学习之实战朴素贝叶斯算法
- 机器学习之实战朴素贝叶斯算法
- 基于Unity3D的相机功能的实现(三)——第一人称相机(FPS)
- CodeForces-876C Classroom Watch
- c++:浅谈强制类型转换
- python两个集合合并
- linux常用文件处理命令
- 【机器学习算法】 朴素贝叶斯
- CodeForces-876B Divisiblity of Differences
- 如何扩展virtualbox linux 磁盘
- 时间类型的加减SimpleDateFormat,Calendar,Scanner,Date,parse,format
- 1058. 选择题(20)
- python colormap(颜色映射)
- Javase—分支语句
- 习题6.18
- eclipse 创建maven 项目 动态web工程完整示例