朴素贝叶斯算法及其实战
1.概率:
随机事件发生的可能性
2.定义
贝叶斯方法
贝叶斯方法是以贝叶斯原理为基础,使用概率统计的知识对样本数据集进行分类。由于其有着坚实的数学基础,贝叶斯分类算法的误判率是很低的。贝叶斯方法的特点是结合先验概率和后验概率,即避免了只使用先验概率的主观偏见,也避免了单独使用样本信息的过拟合现象。贝叶斯分类算法在数据集较大的情况下表现出较高的准确率,同时算法本身也比较简单。 [2]
朴素贝叶斯算法
朴素贝叶斯算法(Naive Bayesian algorithm) 是应用最为广泛的分类算法之一。
首先给出贝叶斯公式:
换成分类任务的表达式:
我们最终求的p(类别|特征)即可!就相当于完成了我们的任务。
3.结合具体实例理解
现在给我们的问题是,如果一对男女朋友,男生想女生求婚,男生的四个特点分别是不帅,性格不好,身高矮,不上进,请你判断一下女生是嫁还是不嫁?
这是典型的二分类问题,按照朴素贝叶斯的求解,转换为P(嫁|不帅、性格不好、矮、不上进)和P(不嫁|不帅、性格不好、矮、不上进)的概率,最终选择嫁与不嫁的答案。
4. 引子:
科技:P(科技|影院,支付宝,云计算) = P(影院,支付宝,云计算|科技)*P(科技)=(8/100)*(20/100)*(63/100)*(30/90)= 126 / 37500≈ 0.0036娱乐:P(娱乐|影院,支付宝,云计算) = P(影院,支付宝,云计算|娱乐)*P(娱乐)= (56/232)*(25/122)*(0/121)*(60/90)= 0
从公式和结果中,可以看出属于娱乐的概率为,具有不合理性,因此引入拉普拉斯平滑系数
5.Python中朴素贝叶斯算法API
sklearn.naive_bayes.MultinomialNB(alpha=1.0).朴素贝叶斯分类.alpha 拉普拉斯平滑系数
6.实战:对sklearn数据集中20类新闻数据分类
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer
def naviebayes():'''朴素贝叶斯进行文本分类:return: None'''news = fetch_20newsgroups(subset="all")#数据分割x_train,x_test,y_train,y_test = train_test_split(news.data,news.target,test_size=0.25)#对数据集进行特征抽取tf = TfidfVectorizer() #实例化x_train = tf.fit_transform(x_train)#以训练集单重的词的列表进行每篇文章重要性统计x_test = tf.transform(x_test)#进行朴素贝叶斯算法的预测mlt = MultinomialNB(alpha=1)mlt.fit(x_train,y_train)y_predict = mlt.predict(x_test)print("预测出的文章类别为:",y_predict)#准确率print("准确率为:",mlt.score(x_test,y_test))return Noneif __name__ == "__main__":naviebayes()
预测出的文章类别为: [15 9 9 ... 1 11 17]
准确率为: 0.8527164685908319
根据公式可知,不存在调参的算法优化, 唯一影响预测结果的因素: 训练集数据的准确性
7.分类模型评估
print("每个类别的精确率和召回率:",classification_report(y_test,y_predict,target_names=news.target_names))#news.target_names文章类别字符串
precision recall f1-score supportalt.atheism 0.90 0.77 0.83 195comp.graphics 0.91 0.79 0.84 240comp.os.ms-windows.misc 0.87 0.81 0.84 259
comp.sys.ibm.pc.hardware 0.64 0.89 0.75 219comp.sys.mac.hardware 0.93 0.83 0.88 240comp.windows.x 0.92 0.87 0.89 234misc.forsale 0.91 0.72 0.80 234rec.autos 0.92 0.90 0.91 258rec.motorcycles 0.95 0.97 0.96 250rec.sport.baseball 0.95 0.97 0.96 245rec.sport.hockey 0.93 0.98 0.95 242sci.crypt 0.83 0.97 0.90 264sci.electronics 0.95 0.80 0.87 253sci.med 0.98 0.93 0.95 259sci.space 0.89 0.96 0.92 257soc.religion.christian 0.62 0.98 0.76 263talk.politics.guns 0.76 0.97 0.85 233talk.politics.mideast 0.93 0.97 0.95 239talk.politics.misc 1.00 0.63 0.77 180talk.religion.misc 0.98 0.28 0.44 148avg / total 0.89 0.87 0.86 4712
*注:每次结果不一样,因为样本随机分,词语也是,导致结果稍微有偏差。
8.朴素贝叶斯分类优缺点:
https://baike.baidu.com/item/%E6%9C%B4%E7%B4%A0%E8%B4%9D%E5%8F%B6%E6%96%AF/4925905?fr=aladdin
朴素贝叶斯算法及其实战相关推荐
- 机器学习实战---朴素贝叶斯算法实现+使用K折交叉验证(代码详解+创新)
<机器学习实战朴素贝叶斯算法实现+使用K折交叉验证> 未经允许,不得擅自转载! 提供数据集如下(永久有效,需要的自行下载): 链接:https://pan.baidu.com/s/1Sv0 ...
- 机器学习(8)朴素贝叶斯算法(20条新闻分类)
目录 一.基础理论 二.实战:20条新闻分类 1.读取数据 2.训练集划分 3.特征工程(文本特征提取) 4.朴素贝叶斯算法训练 5.模型评估 方法一:预测值与真实值比对 方法二:计算准确率 总代码 ...
- 【机器学习入门】(3) 朴素贝叶斯算法:多项式、高斯、伯努利,实例应用(心脏病预测)附python完整代码及数据集
各位同学好,今天我和大家分享一下朴素贝叶斯算法中的三大模型.在上一篇文章中,我介绍了朴素贝叶斯算法的原理,并利用多项式模型进行了文本分类预测. 朴素贝叶斯算法 -- 原理,多项式模型文档分类预测,附p ...
- 【机器学习入门】(2) 朴素贝叶斯算法:原理、实例应用(文档分类预测)附python完整代码及数据集
各位同学好,今天我向大家介绍python机器学习中的朴素贝叶斯算法.内容有:算法的基本原理:案例实战--新闻文档的分类预测. 案例简介:新闻数据有20个主题,有10万多篇文章,每篇文章对应不同的主题, ...
- 朴素贝叶斯算法_机器学习第三篇:详解朴素贝叶斯算法
一.统计知识 01|随机事件: 1.概念 随机事件是在随机试验中,可能出现也可能不出现,而在大量重复试验中具有某种规律性的事件叫做随机事件(简称事件).随机事件通常用大写英文字母A.B.C等表示.随机 ...
- 机器学习第三篇:详解朴素贝叶斯算法
一.统计知识 01|随机事件: 1.概念 随机事件是在随机试验中,可能出现也可能不出现,而在大量重复试验中具有某种规律性的事件叫做随机事件(简称事件).随机事件通常用大写英文字母A.B.C等表示.随机 ...
- 利用朴素贝叶斯算法识别垃圾邮件
转载自:http://blog.csdn.net/wowcplusplus/article/details/25190809 朴素贝叶斯算法是被工业界广泛应用的机器学习算法,它有较强的数学理论基础,在 ...
- 朴素贝叶斯算法实现垃圾邮件过滤(Python3实现)
目录 1.朴素贝叶斯实现垃圾邮件分类的步骤 2.邮件数据 3.代码实现 4.朴素贝叶斯的优点和缺点 1.朴素贝叶斯实现垃圾邮件分类的步骤 (1)收集数据:提供文本文件. (2)准备数据:将文本文件解析 ...
- 从零开始学Python【38】--朴素贝叶斯模型(实战部分)
[前言] 在<从零开始学Python[37]--朴素贝叶斯模型(理论部分)>中我们详细介绍了朴素贝叶斯算法的基本概念和理论知识,在这一期我们继续介绍该算法的实战案例.将会对高斯贝叶斯.多项 ...
最新文章
- python lambda 逻辑_Python之lambda表达式和内置函数
- go网站服务器搭建,使用Go搭建服务器记录(一)
- SPSS数据记录的选择(Select Cases)
- u-boot nand flash read/write cmd
- php 修改文件访问时间,php获取文件的创建、修改时间及访问时间
- 信息学奥赛C++语言: 素数的统计
- 炫酷科技感超前的电子产品发布广告海报psd分层模板,带给你炫酷的未来感
- Java中Integer与String类型互转
- java在文本域内添加按钮_JAVA中在窗体中添加了一个文本框,然后再文本框中输入字符,如何...
- 在虚拟DOM和Diff算法中为什么不建议使用index作为key值?
- 给最后一个li增加样式
- 查阅我们JavaScript学习新指南
- 日记 - idea中的中文注释出现乱码的解决方案
- swiper禁用手动拖拽
- 一个EXCEL数组公式的解析
- Numpy一维array转置
- 走进科学之内存插槽插满不识别
- 关于this.name=name的理解
- 古典音乐CD购买经验谈
- 十年内将被人遗忘的15种技术:硬盘和鼠标