朴素贝叶斯分类算法被广泛应用于文本分类场景中、包含垃圾邮件、互联网新闻等分类任务,属于有监督学习算法。它独立考量每一维度特征被分类的条件概率,然后综合这些概率对其所在的特征向量做出分类预测,即“假设各个维度上的特征被分类的条件概率之间是相互独立的”,该假设使得模型预测需要计算的参数规模从指数级降至线性级,极大地提升计算效率。该算法在模型训练过程中没考虑各个维度特征的相互联系,对于关联性较强的数据特征分类效果较差。

朴素贝叶斯的优缺点

优点:数据集较小时模型表现很好,适合增量式训练、多分类任务。

缺点:对输入数据的表达形式很敏感,由于其“朴素”的特点,也会带来一些准确率上的损失。


MultinomialNB算法的一般流程

  1. 数据采集:使用NumPy与pandas以及sklearn.datasets等方式获取或处理数据集
  2. 数据预处理:测试集、训练集构建,进行数据标准化处理,提取文本特征向量矩阵。
  3. 模型训练:MultinomialNB算法
  4. 模型测试:使用测试集,验证模型性能。
  5. 模型优化:使用交叉验证法优化K值取值。

MultinomialNB(多项式模型)的Python实现

1. 数据采集

该数据集包含分布在20个不同新闻组中的18846篇文档,

数据来源:from sklearn.datasets import fetch_20newsgroups

数据标签:

'alt.atheism', 'comp.graphics', 'comp.os.ms-windows.misc', 'comp.sys.ibm.pc.hardware', 'comp.sys.mac.hardware', 'comp.windows.x', 'misc.forsale', 'rec.autos', 'rec.motorcycles', 'rec.sport.baseball', 'rec.sport.hockey', 'sci.crypt', 'sci.electronics', 'sci.med', 'sci.space', 'soc.religion.christian', 'talk.politics.guns', 'talk.politics.mideast', 'talk.politics.misc', 'talk.religion.misc'

数据样例:

From: Alexander Samuel McDiarmid

Subject: driver ??

Organization: Sophomore, Mechanical Engineering, Carnegie Mellon, Pittsburgh, PA

Lines: 15

NNTP-Posting-Host: po4.andrew.cmu.edu

1) I have an old Jasmine drive which I cannot use with my new system ……

使用sklearn.datasets.fetch_20newsgroups(新闻数据抓取器),加载数据集,Python实现如下:

2. 数据预处理

使用 sklearn.model_selection.train_test_split方式,将整个数据集随机抽取80%作为训练集、剩余的20%作为测试集,并且进行数据标准化处理,且重复运行时,训练集与测试集不发生变化,Python实现如下:

尝试使用四种方式实现文本特征向量的提取,并查看不同文本特征提取方式对算法分类识别率的影响:

  • CountVectorizer提取特征向量。
  • CountVectorizer提取特征向量且去掉停词。
  • TfidfVectorizer提取文本特征向量。
  • TfidfVectorizer提取文本特征向量且去掉停词。

CountVectorizer只考虑每种词汇在训练文本中出现的频率,而TfidfVectorizer除了考量某词汇在训练文本中出现的频率之外,能够降低出现频率高没有意义的词汇出现带来的影响,训练文本的数量越多,TfidfVectorizer方式更有优势,Python实现如下:

3. 模型训练及测试

测试集验证结果如下:

扩展:生成模型和判别模型的区别

有监督机器学习方法可以分为生成模型和判别模型。

生成模型

无穷样本 -> 概率密度模型 = 产生式模型 -> 预测

生成式模型求得联合概率P(Y,X),对于未见示例X,需要求出X与不同标签之间的联合概率分布,然后概率大的获胜。

  • 常见生成模型:朴素贝叶斯、KNN、高斯混合模型、隐马尔可夫模型、限制玻尔兹曼机、文档主题生成模型(LDA)
  • 生成模型举例:利用生成模型是根据哈士奇的特征首先学习出一个哈士奇的模型,然后根据边境牧羊犬的特征学习出一个边境牧羊犬的模型,然后从这只羊中提取特征,放到哈士奇羊模型中看概率是多少,在放到边境牧羊犬模型中看概率是多少,哪个概率大就是哪种品种的狗,求的是P(X,Y),即联合概率。

判别模型

有限样本 -> 判别函数 = 判别式模型 -> 预测

对于判别式模型来说求得P(Y|X),对未见示例X,根据P(Y|X)可以求得标记Y,即可以直接判别出标签。

  • 常见判别模型:K-近邻、决策树、SVM、线性判别分析(LDA)、支持向量机、线性回归、传统的神经网络、逻辑斯蒂回归。
  • 判别模型举例:要确定一个狗是哈士奇还是边境牧羊犬,用判别模型的方法是从训练集中学习到模型,然后通过提取这只狗的特征来直接预测出这只狗的品种(正例)概率,其根据X“判别”Y,求的是P(Y|X),即后验概率。

判别式模型是根据一只狗的特征可以直接给出这只狗品种(正例)的概率(比如 概率为0.8),而生成式模型是要都试一试((X,Y¹), (X,Y²), (X,Y³),…),概率最大的那个就是这只狗的品种结果。

后续会继续分享线性、决策树、SVM、随机森林、K均值聚类等算法介绍及Python实现,若对你有所帮助,欢迎大家评论、留言、关注,感谢支持!

python实现排列组合公式算法_朴素贝叶斯算法的Python实现相关推荐

  1. 用python实现朴素贝叶斯算法_朴素贝叶斯算法 python 实现

    应用贝叶斯准则: 使用上面这些定义,可以定义贝叶斯分类准则为: 如果 P(c1|x, y) > P(c2|x, y), 那么属于类别 c1; 如果 P(c2|x, y) > P(c1|x, ...

  2. java mllib 算法_朴素贝叶斯算法原理及Spark MLlib实例(Scala/Java/Python)

    朴素贝叶斯 算法介绍: 朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法. 朴素贝叶斯的思想基础是这样的:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,在没有其它可用信息下,我 ...

  3. 朴素贝叶斯算法_朴素贝叶斯算法原理

    摘要:本文介绍了贝叶斯公式,并根据公式而产生的朴素贝叶斯分类算法在机器学习中的应用,并列举了朴素贝叶斯分类算法的优缺点. 1贝叶斯公式的理解 贝叶斯定理(Bayes' theorem)是概率论中的一个 ...

  4. k近邻算法,朴素贝叶斯算法,分类模型评估,模型调优

    k近邻算法,朴素贝叶斯算法,分类模型评估,模型调优 k近邻算法 k近邻算法概述 k近邻算法代码实现 k近邻算法的评价 朴素贝叶斯算法 朴素贝叶斯算法概述 朴素贝叶斯代码实现 朴素贝叶斯的评价 分类模型 ...

  5. k近邻算法与朴素贝叶斯算法

    机器学习--k近邻算法与朴素贝叶斯算法 k近邻算法 朴素贝叶斯 理论基础: 精确率和召回率 交叉验证与网格搜索 k近邻算法 定义:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大 ...

  6. python贝叶斯算法的论文_朴素贝叶斯算法从入门到Python实践

    1,前言 很久不发文章,整理些干货,希望相互学习吧.进入主题,本文主要时说的为朴素贝叶斯分类算法.与逻辑回归,决策树一样,是较为广泛使用的有监督分类算法,简单且易于理解(号称十大数据挖掘算法中最简单的 ...

  7. python程序员买西瓜代码_朴素贝叶斯python代码实现(西瓜书)

    本文将要为您介绍的是朴素贝叶斯python代码实现(西瓜书),具体完成步骤:朴素贝叶斯python代码实现(西瓜书) 摘要: 朴素贝叶斯也是机器学习中一种非常常见的分类方法,对于二分类问题,并且数据集 ...

  8. 算法的优缺点_朴素贝叶斯算法的优缺点

      机器学习算法与自然语言处理推荐  来源:http://www.cnblogs.com/pinard/p/6069267.html 作者:刘建平Pinard [机器学习算法与自然语言处理导读]朴素贝 ...

  9. k-近邻算法及朴素贝叶斯算法

    目录 一.k-近邻算法的定义 二.k近邻算法实例-预测入住位置 三.k-临近算法优缺点 四.精确率与召回率 1.精确率 2.召回率 3.F1-score 4.classification_report ...

最新文章

  1. 信步漫谈之Git—环境搭建及入门
  2. c++获取sqlite3数据库表中所有字段的方法
  3. U-Time巡回完美收官:精细化数据将主导未来运营趋势(数据应用篇)
  4. 刚聊完就弹窗推荐,这些 APP 是在偷听吗?
  5. 区块链开发指南_区块链软件开发详解
  6. 一些有趣的 CSS 魔法和布局(下)(结尾有岗位内推哦~)
  7. hadoop三大组件
  8. 精选西门子PLC工程实例源码【共300套】
  9. java http 手机浏览器下载word文档失败的问题
  10. aspose转pdf不显示中文_Word转PDF后有空白页是怎么回事?
  11. WPS如何将金额快速改为万元显示
  12. 为什么中国软件不咋样
  13. 无人机优化无线传感器网络matlab代码
  14. 常见的分类算法及分类算法的评估方法
  15. css动画结束闪烁,CSS秘密花园: 闪烁动画
  16. LeetCode 2035. 将数组分成两个数组并最小化数组和的差
  17. python爬虫真假网址,python爬取福利网站图片完整代码,懂得人都懂
  18. mac的python换字体_在Mac OS X 10.6上,无法在Python的Matplotlib中将字体更改为Helvetica...
  19. 通过vnc远程linux方法,如何通过VNC远程访问Linux虚拟机
  20. javascript 弹出对话框

热门文章

  1. 类的序列化[Serializable]
  2. php cpu缓存 执行 代码,缓存PHP页面的代码,可以减轻CPU和MYSQL负担
  3. java 文本排序_如何使用Java按最高编号对文本文件进行排序
  4. jquery ajax 解决跨域访问问题
  5. pm2 守护 nuxt
  6. java spring注入 静态方法_java相关:spring为类的静态属性实现注入实例方法
  7. matlab画线不同颜色_怎样画线框图才有意义?
  8. 乒乓球单循环赛_重庆市首届乒乓球业余锦标赛开拍 冠军奖3万 总奖金近10万
  9. ORM是什么?如何理解ORM
  10. MapReduce计数器