1.概率:

随机事件发生的可能性

2.定义

贝叶斯方法

贝叶斯方法是以贝叶斯原理为基础,使用概率统计的知识对样本数据集进行分类。由于其有着坚实的数学基础,贝叶斯分类算法的误判率是很低的。贝叶斯方法的特点是结合先验概率和后验概率,即避免了只使用先验概率的主观偏见,也避免了单独使用样本信息的过拟合现象。贝叶斯分类算法在数据集较大的情况下表现出较高的准确率,同时算法本身也比较简单。 [2]

朴素贝叶斯算法

朴素贝叶斯算法(Naive Bayesian algorithm) 是应用最为广泛的分类算法之一。

朴素贝叶斯方法是在贝叶斯算法的基础上进行了相应的简化,即假定给定目标值时属性之间相互条件独立。也就是说没有哪个属性变量对于决策结果来说占有着较大的比重,也没有哪个属性变量对于决策结果占有着较小的比重。虽然这个简化方式在一定程度上降低了贝叶斯分类算法的分类效果,但是在实际的应用场景中,极大地简化了贝叶斯方法的复杂性。

首先给出贝叶斯公式:
    换成分类任务的表达式:
     我们最终求的p(类别|特征)即可!就相当于完成了我们的任务。

则,朴素贝特斯公式为:

3.结合具体实例理解

数据:

现在给我们的问题是,如果一对男女朋友,男生想女生求婚,男生的四个特点分别是不帅,性格不好,身高矮,不上进,请你判断一下女生是嫁还是不嫁?

这是典型的二分类问题,按照朴素贝叶斯的求解,转换为P(嫁|不帅、性格不好、矮、不上进)和P(不嫁|不帅、性格不好、矮、不上进)的概率,最终选择嫁与不嫁的答案。

这里我们根据贝特斯公式:

由此,我们将(嫁|不帅、性格不好、矮、不上进)转换成三个可求的P(嫁)、P(不帅、性格不好、矮、不上进|嫁)、P(不帅、性格不好、矮、不上进)。进一步分解可以得:
     P(不帅、性格不好、矮、不上进)=P(嫁)P(不帅|嫁)P(性格不好|嫁)P(矮|嫁)P(不上进|嫁)+P(不嫁)P(不帅|不嫁)P(性格不好|不嫁)P(矮|不嫁)P(不上进|不嫁)。
    P(不帅、性格不好、矮、不上进|嫁)=P(不帅|嫁)P(性格不好|嫁)P(矮|嫁)P(不上进|嫁)

将上面的公式整理一下可得:

P(嫁)=1/2、P(不帅|嫁)=1/2、P(性格不好|嫁)=1/6、P(矮|嫁)=1/6、P(不上进|嫁)=1/6。
     P(不嫁)=1/2、P(不帅|不嫁)=1/3、P(性格不好|不嫁)=1/2、P(矮|不嫁)=1、P(不上进|不嫁)=2/3
 但是由贝叶斯公式可得:对于目标求解为不同的类别,贝叶斯公式的分母总是相同的。所以,只求解分子即可:

于是,对于类别“嫁”的贝叶斯分子为:P(嫁)P(不帅|嫁)P(性格不好|嫁)P(矮|嫁)P(不上进|嫁)=1/2 * 1/2 * 1/6 * 1/6 * 1/6=1/864     
对于类别“不嫁”的贝叶斯分子为:P(不嫁)P(不帅|不嫁)P(性格不好|不嫁)P(矮|不嫁)P(不上进|不嫁)=1/2 * 1/3 * 1/2 * 1* 2/3=1/18。
经代入贝叶斯公式可得:P(嫁|不帅、性格不好、矮、不上进)=(1/864) / (1/864+1/18)=1/49=2.04%
P(不嫁|不帅、性格不好、矮、不上进)=(1/18) / (1/864+1/18)=48/49=97.96%
则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类新闻数据分类

其中:该数据集包含20个新闻类别及18000条新闻数据

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.分类模型评估

正确率:estimator.score():即预测结果的正确百分比
       精确率(Precision): 预测结果为正例样本中真实为正例的比例(查得准)
       召回率(Recall):真实为正例样本中预测结果为正例的比例(查得全,对正样本的区分能力)
        API:
            sklearn.metrics.classification_report
        使用:
            classification_report(y_true,y_pred,target_names= None)
                y_true:真实目标值
                y_pred:估计器预测目标值
                target_names:目标类别名称
                return : 每个类别精确率与召回率

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.朴素贝叶斯分类优缺点:

     优点
    (1)朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。
    (2)对小规模的数据表现很好,能个处理多分类任务,适合增量式训练,尤其是数据量超出内存时,我们可以一批批的去增量训练。
    (3)对缺失数据不太敏感,算法也比较简单,常用于文本分类。
  缺点
    (1)理论上,朴素贝叶斯模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为朴素贝叶斯模型给定输出类别的情况下,假设属性之间相互独立,这个假设在实际应用中往往是不成立的,在属性个数比较多或者属性之间相关性较大时,分类效果不好。而在属性相关性较小时,朴素贝叶斯性能最为良好。对于这一点,有半朴素贝叶斯之类的算法通过考虑部分关联性适度改进。
    (2)需要知道先验概率,且先验概率很多时候取决于假设,假设的模型可以有很多种,因此在某些时候会由于假设的先验模型的原因导致预测效果不佳。
    (3)由于我们是通过先验和数据来决定后验的概率从而决定分类,所以分类决策存在一定的错误率。
    (4)对输入数据的表达形式很敏感。

文章参考链接:

https://baike.baidu.com/item/%E6%9C%B4%E7%B4%A0%E8%B4%9D%E5%8F%B6%E6%96%AF/4925905?fr=aladdin

朴素贝叶斯算法的理解与实现

带你彻彻底底搞懂朴素贝叶斯公式

某机构视频

朴素贝叶斯算法及其实战相关推荐

  1. 机器学习实战---朴素贝叶斯算法实现+使用K折交叉验证(代码详解+创新)

    <机器学习实战朴素贝叶斯算法实现+使用K折交叉验证> 未经允许,不得擅自转载! 提供数据集如下(永久有效,需要的自行下载): 链接:https://pan.baidu.com/s/1Sv0 ...

  2. 机器学习(8)朴素贝叶斯算法(20条新闻分类)

    目录 一.基础理论 二.实战:20条新闻分类 1.读取数据 2.训练集划分 3.特征工程(文本特征提取) 4.朴素贝叶斯算法训练 5.模型评估 方法一:预测值与真实值比对 方法二:计算准确率 总代码 ...

  3. 【机器学习入门】(3) 朴素贝叶斯算法:多项式、高斯、伯努利,实例应用(心脏病预测)附python完整代码及数据集

    各位同学好,今天我和大家分享一下朴素贝叶斯算法中的三大模型.在上一篇文章中,我介绍了朴素贝叶斯算法的原理,并利用多项式模型进行了文本分类预测. 朴素贝叶斯算法 -- 原理,多项式模型文档分类预测,附p ...

  4. 【机器学习入门】(2) 朴素贝叶斯算法:原理、实例应用(文档分类预测)附python完整代码及数据集

    各位同学好,今天我向大家介绍python机器学习中的朴素贝叶斯算法.内容有:算法的基本原理:案例实战--新闻文档的分类预测. 案例简介:新闻数据有20个主题,有10万多篇文章,每篇文章对应不同的主题, ...

  5. 朴素贝叶斯算法_机器学习第三篇:详解朴素贝叶斯算法

    一.统计知识 01|随机事件: 1.概念 随机事件是在随机试验中,可能出现也可能不出现,而在大量重复试验中具有某种规律性的事件叫做随机事件(简称事件).随机事件通常用大写英文字母A.B.C等表示.随机 ...

  6. 机器学习第三篇:详解朴素贝叶斯算法

    一.统计知识 01|随机事件: 1.概念 随机事件是在随机试验中,可能出现也可能不出现,而在大量重复试验中具有某种规律性的事件叫做随机事件(简称事件).随机事件通常用大写英文字母A.B.C等表示.随机 ...

  7. 利用朴素贝叶斯算法识别垃圾邮件

    转载自:http://blog.csdn.net/wowcplusplus/article/details/25190809 朴素贝叶斯算法是被工业界广泛应用的机器学习算法,它有较强的数学理论基础,在 ...

  8. 朴素贝叶斯算法实现垃圾邮件过滤(Python3实现)

    目录 1.朴素贝叶斯实现垃圾邮件分类的步骤 2.邮件数据 3.代码实现 4.朴素贝叶斯的优点和缺点 1.朴素贝叶斯实现垃圾邮件分类的步骤 (1)收集数据:提供文本文件. (2)准备数据:将文本文件解析 ...

  9. 从零开始学Python【38】--朴素贝叶斯模型(实战部分)

    [前言] 在<从零开始学Python[37]--朴素贝叶斯模型(理论部分)>中我们详细介绍了朴素贝叶斯算法的基本概念和理论知识,在这一期我们继续介绍该算法的实战案例.将会对高斯贝叶斯.多项 ...

最新文章

  1. python lambda 逻辑_Python之lambda表达式和内置函数
  2. go网站服务器搭建,使用Go搭建服务器记录(一)
  3. SPSS数据记录的选择(Select Cases)
  4. u-boot nand flash read/write cmd
  5. php 修改文件访问时间,php获取文件的创建、修改时间及访问时间
  6. 信息学奥赛C++语言: 素数的统计
  7. 炫酷科技感超前的电子产品发布广告海报psd分层模板,带给你炫酷的未来感
  8. Java中Integer与String类型互转
  9. java在文本域内添加按钮_JAVA中在窗体中添加了一个文本框,然后再文本框中输入字符,如何...
  10. 在虚拟DOM和Diff算法中为什么不建议使用index作为key值?
  11. 给最后一个li增加样式
  12. 查阅我们JavaScript学习新指南
  13. 日记 - idea中的中文注释出现乱码的解决方案
  14. swiper禁用手动拖拽
  15. 一个EXCEL数组公式的解析
  16. Numpy一维array转置
  17. 走进科学之内存插槽插满不识别
  18. 关于this.name=name的理解
  19. 古典音乐CD购买经验谈
  20. 十年内将被人遗忘的15种技术:硬盘和鼠标

热门文章

  1. 【RPA学习天地:版本解读】艺赛旗iS-RPA2021.2版本亮点
  2. linux可视化界面黑屏,Fedora 14 不能进入图形界面 显示黑屏的解决办法
  3. 特征锦囊:怎么找出数据集中有数据倾斜的特征?
  4. 判断链表是否有环及环入口点的求法
  5. 易语言特征码定位工具源码
  6. navicat怎么备份数据和同步两个数据库
  7. html文本框颜色填充颜色设置,文本框填充色怎么设置
  8. 关于resharper激活
  9. 零基础学C语言设计难吗,【经验分享】零基础想学C语言,过来人提醒大家几点...
  10. 有了花呗还需要办信用卡吗?