朴素贝叶斯算法-分类算法
朴素贝叶斯算法-分类算法
1 概率基础
概率定义为一件事情发生的可能性
联合概率:包含多个条件,且所有条件同时成立的概率,记作P(A,B)
条件概率:事件A在另一个事件B已经发生条件下的发送概率,记作P(A|B)
在A1,A2相互独立的情况下,条件概率的特性:P(A1,A2|B)=P(A1|B)P(A2|B)
2 贝叶斯公式
W:特征向量 C:类别
贝叶斯公式最常用于文本分类,上式左边可以理解为给定一个文本词向量W,那么它属于类别C的概率是多少。式子右边分几部分,P(W∣C)为在给定类别的情况下,该文档的词向量(被预测文档中出现词)的概率,P(C)为每个文档类别的概率(某文档类型词数/总文档词数),P(F1,F2..)预测文档中每个词的概率
可以理解为:
C可以是不同类别
假如有个训练集统计结果如下:
特征/统计 | 科技 | 历史 | 汇总 |
诸葛亮 | 2 | 60 | 60 |
原子弹 | 55 | 20 | 75 |
飞机 | 60 | 23 | 83 |
卢沟桥事变 | 0 | 65 | 65 |
汇总 | 117 | 168 | 285 |
现有一篇被预测文档:出现了原子弹,飞机,卢沟桥事变属于科技、历史的类别概率?
因为P(原子弹,飞机,卢沟桥事变)在每个统计中都是一样的,所有忽略。
P(科技|原子弹,飞机,卢沟桥事变)=P(原子弹,飞机,卢沟桥事变|科技)P(科技)=(2/55)(60/117)(0/117)(117/285)=0
P(历史|原子弹,飞机,卢沟桥事变)=P(原子弹,飞机,卢沟桥事变|历史)P(历史)=(20/168)(23/168)(65/168)(168/285)
上面的例子中,因为某个某个词的出现概率为0导致属于某个类别为0,这是不合理的,所以引入拉普拉斯平滑
3 拉普拉斯平滑
为了避免训练集样本对一些特征的缺失,即某一些特征出现的次数为0,在计算P(X1,X2,X3,...,Xn∣Yi)的时候,各个概率相乘最终结果为零,这样就会影响结果。我们需要对这个概率计算公式做一个平滑处理,即拉普拉斯平滑系数
其中m为特征词向量的个数,α为平滑系数,当α=1,称为拉普拉斯平滑
4 sklearn朴素贝叶斯实现API
sklearn.naive_bayes.MultinomialNB
sklearn.naive_bayes.MultinomialNB(alpha = 1.0) 朴素贝叶斯分类 alpha:拉普拉斯平滑系数
常用方法:
名称 | 解释 |
fit(X y[,sample_weight]) |
根据X y拟合朴素贝叶斯分类器 |
get_params(deep=) | 获取此估计器的参数 |
set_params(PARAMS) | 设置此估计器的参数 |
partial_fit(X y[,classes,sample_weight]) | 增量拟合一批样本 |
predict(X) | 对测试向量X组执行分类 |
predict_log_proda(X) | 返回测试矢量X的对数概率统计 |
predict_proda(X) | 测试矢量X的返回概率估计 |
score(X y[,sample_weight]) | 返回给定测试数据和标签的平均精度 |
5 朴素贝叶斯算法案例
sklearn20类新闻分类 ,20个新闻组数据集包含20个主题的18000个新闻组帖子
步骤:①加载20类新闻数据,并进行分割
②生成文章特征词
③朴素贝叶斯estimator流程进行预估
from sklearn.naive_bayes import MultinomialNB from sklearn.datasets import fetch_20newsgroups from sklearn.model_selection import train_test_split from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.metrics import classification_report #1加载20类新闻数据,并进行分割 newsgroups = fetch_20newsgroups(subset='all') #分割 x_train,x_test,y_train,y_test = train_test_split(newsgroups.data,newsgroups.target,test_size=0.25)#2 生成文章特征词,对数据集进行特征抽取 tf = TfidfVectorizer() #以训练集当中的词的列表进行每篇文章重要性统计 x_train = tf.fit_transform(x_train) print(tf.get_feature_names()) x_test = tf.transform(x_test)# 进行朴素贝叶斯算法的预测 mlt = MultinomialNB(alpha=1.0) mlt.fit(x_train,y_train) y_predict = mlt.predict(x_test) print("预测的文章类别为",y_predict) score = mlt.score(x_test,y_test) print("准确率为:", score) print("每个类别的精确率,召回率和F1:", classification_report(y_test, y_predict, target_names=newsgroups.target_names)) |
6 朴素贝叶斯分类优缺点
优点: ①朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。 ②对缺失数据不太敏感,算法也比较简单,常用于文本分类。 ③分类准确度高,速度快
缺点:需要知道先验概率P(F1,F2,…|C),因此在某些时候会由于假设的先验模型的原因导致预测效果不佳。
特点:不需要调参,如果训练集误差大,结果肯定不好。
朴素贝叶斯算法-分类算法相关推荐
- 机器学习(十)分类算法之朴素贝叶斯(Naive Bayes)算法
贝叶斯定理 首先我们来了解一下贝叶斯定理: 贝叶斯定理是用来做什么的?简单说,概率预测:某个条件下,一件事发生的概率是多大? 了解一下公式 事件B发生的条件下,事件A发生的概率为: 这里写图片描述 同 ...
- ML之NB:朴素贝叶斯Naive Bayesian算法的简介、应用、经典案例之详细攻略
ML之NB:朴素贝叶斯Naive Bayesian算法的简介.应用.经典案例之详细攻略 目录 朴素贝叶斯Naive Bayesian算法的简介 1.朴素贝叶斯计算流程表述 2.朴素贝叶斯的优缺点 2. ...
- 基于朴素贝叶斯的垃圾分类算法(Python实现)
有代码和数据集的 https://blog.csdn.net/weixin_33734785/article/details/91428991 附有git库代码的 https://www.cnblog ...
- 朴素贝叶斯实现分类_关于朴素贝叶斯分类及其实现的简短教程
朴素贝叶斯实现分类 Naive Bayes classification is one of the most simple and popular algorithms in data mining ...
- r包调用legend函数_R语言实现基于朴素贝叶斯构造分类模型数据可视化
本文内容原创,未经作者许可禁止转载! 目录 一.前言 二.摘要 三.关键词 四.算法原理 五.经典应用 六.R建模 1.载入相关包(内含彩蛋): 1.1 library包载入 1.2 pacman包载 ...
- 八、朴素贝叶斯中文分类实战
1.朴素贝叶斯中文分类实战 文本分类的流程如下图所示: 朴素贝叶斯中文分类的目录结构 中文分类的目录机构包括停用词文件.训练集文件和和测试集文件,具体内容如下图所示: 2 数据准备与处理 2.1 数据 ...
- 朴素贝叶斯和AODE算法详解
文章目录 一.实验要求 (1)实验目的 (2)数据集简介 (3)实验内容 (4)评价指标 二.数据集的划分 三.朴素贝叶斯 (1)朴素贝叶斯原理 (2)拉普拉斯修正 (3)函数变量解析 (4)代码如下 ...
- 【AI数学原理】概率机器学习(四):半朴素贝叶斯之TAN算法实例
概率机器学习的系列博文已经写到第四篇了,依然关注者乏.虽说来只是自己的学习记录,不过这样下去显得自己贡献值比较低下.于是今天换一种模式来写博文--结合代码实现. 欢迎各位指点交流~ 预备知识: 1.朴 ...
- 构造matlab决策树分类器,Matlab建立逻辑回归,决策树,SVM,KNN和朴素贝叶斯模型分类绘制ROC曲线...
尽管对于较高的阈值,SVM可以产生更好的ROC值,但逻辑回归通常更擅长区分不良雷达收益与良好雷达.朴素贝叶斯的ROC曲线通常低于其他两个ROC曲线,这表明样本内性能比其他两个分类器方法差. 比较所 ...
- matlab绘制贝叶斯曲线,Matlab建立SVM,KNN和朴素贝叶斯模型分类绘制ROC曲线
原文链接:http://tecdat.cn/?p=15508 绘制ROC曲线通过Logistic回归进行分类 加载样本数据.load fisheriris通过使用与versicolor和virgini ...
最新文章
- [20161229]linux下使用oclumon命令(rac)
- oracle除法向上取整函数,ORACLE取整函数
- django orm 常用查询筛选
- C语言 | 使用牛顿法求非线性方程的一个实根(附代码)
- Python爬虫开发教程,一看就懂!
- 聊聊gcc参数中的-I, -L和-l
- activemq网页管理端使用_iCloud大更新,移动端网页版推出 安卓也能使用
- linux下MySQL安装及设置
- js面向对象写法及栈的实现
- KinhDown(度盘PC下载器)
- ASP.NET课设——新闻发布系统
- [译]nanomsg和ZeroMQ的区别
- pyqgis iface AttributeError: ‘NoneType‘ object has no attribute ‘mapCanvas‘
- Android快速开发之appBase——(1).appBase介绍
- [学习笔记-FPGA]Vivado出现信号差分问题
- html5另存为本地文件,javascript实现文件另存为(web api)
- 美团后台开发笔试-数字字符
- python-pcl函数_Python简介,第4章-函数
- 微信小程序按钮实现点击复制功能的步骤
- 软件定义网络技术现状分析