机器学习实战刻意练习 —— Task 02. 朴素贝叶斯

本文介绍了朴素贝叶斯分类器的基础知识,包括贝叶斯定理、贝叶斯推断、模型概述以及两个实战案例:屏蔽社区侮辱性言论和过滤垃圾邮件。通过案例展示了如何使用朴素贝叶斯进行文本分类,并分析了可能出现的问题。
摘要由CSDN通过智能技术生成
机器学习实战刻意练习

第 1 周任务
  分类问题:K-邻近算法
  分类问题:决策树

第 2 周任务
  分类问题:朴素贝叶斯
  分类问题:逻辑回归

第 3 周任务
  分类问题:支持向量机

第 4 周任务
  分类问题:AdaBoost

第 5 周任务
  回归问题:线性回归、岭回归、套索方法、逐步回归等
  回归问题:树回归

第 6 周任务
  聚类问题:K均值聚类
  相关问题:Apriori

第 7 周任务
  相关问题:FP-Growth

第 8 周任务
  简化数据:PCA主成分分析
  简化数据:SVD奇异值分解
    



朴素贝叶斯



1.简介

  朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法 。
  最为广泛的两种分类模型是决策树模型(Decision Tree Model)和朴素贝叶斯模型(Naive Bayesian Model,NBM)。和决策树模型相比,朴素贝叶斯分类器(Naive Bayes Classifier 或 NBC)发源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率。同时,NBC模型所需估计的参数很少,对缺失数据不太敏感,算法也比较简单。理论上,NBC模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为NBC模型假设属性之间相互独立,这个假设在实际应用中往往是不成立的,这给NBC模型的正确分类带来了一定影响。


 1.1.贝叶斯定理

  条件概率 (conditional probability) 是指在事件 B 发生的情况下,事件 A 发生的概率。通常记为 P(A | B)。
在这里插入图片描述
  因此
在这里插入图片描述
  可得
在这里插入图片描述
  由此可以推出贝叶斯公式
在这里插入图片描述
  这也是条件概率的计算公式。
  此外,由全概率公式,可得条件概率的另一种写法
在这里插入图片描述
  其中样本空间由A和A’构成,由此求得事件B的概率。


 1.2.贝叶斯推断

  贝叶斯公式中,P(A)称为"先验概率"(Prior probability),即在B事件发生之前,对A事件概率的一个判断。
  P(A|B)称为"后验概率"(Posterior probability),即在B事件发生之后,对A事件概率的重新评估。
  P(B|A)/P(B)称为"可能性函数"(Likelyhood),这是一个调整因子,使得预估概率更接近真实概率。
  所以,条件概率可以理解成下面的式子:后验概率=先验概率 x 调整因子
  这就是贝叶斯推断的含义。我们先预估一个"先验概率",然后加入实验结果,看这个实验到底是增强还是削弱了"先验概率",由此得到更接近事实的"后验概率"。因为在分类中,只需要找出可能性最大的那个选项,而不需要知道具体那个类别的概率是多少,所以为了减少计算量,全概率公式在实际编程中可以不使用。

  而朴素贝叶斯推断,是在贝叶斯推断的基础上,对条件概率分布做了条件独立性的假设。因此可得朴素贝叶斯分类器的表达式。因为以自变量之间的独立(条件特征独立)性和连续变量的正态性假设为前提,就会导致算法精度在某种程度上受影响。
在这里插入图片描述


 1.3.模型概述

  朴素(指特征条件独立)贝叶斯方法,是指根据贝叶斯定理,对一个分类问题,给定样本特征x,样本属于类别y的概率是

在这里插入图片描述

  在这里,x是一个特征向量,将设x维度为M。因为朴素的假设,即特征条件独立,根据全概率公式展开,公式(1)可以表达为
在这里插入图片描述
  这里,只要分别估计出,特征xi在每一类的条件概率就可以了。类别y的先验概率可以通过训练集算出,同样通过训练集上的统计,可以得出对应每一类上的,条件独立的特征对应的条件概率向量。


 1.4.举个栗子~

  某个医院早上来了六个门诊的病人,他们的情况如下表所示:

症状 职业 疾病
打喷嚏 护士 感冒
打喷嚏 农夫 过敏
头痛 建筑工人 脑震荡
头痛 建筑工人 感冒
打喷嚏 教师 感冒
头痛 教师 脑震荡

   问:现在又来了第七个病人,是一个打喷嚏的建筑工人。请问他患上感冒的概率有多大?

  根据贝叶斯定理:
   P ( 感 冒 ∣ 打 喷 嚏 ∗ 建 筑 工 人 ) = P ( 打 喷 嚏 ∗ 建 筑 工 人 ∣ 感 冒 ) P ( 打 喷 嚏 ∗ 建 筑 工 人 ) P(感冒|打喷嚏*建筑工人)=\frac{P(打喷嚏*建筑工人|感冒)}{P(打喷嚏*建筑工人)} P()=P()P()

根据朴素贝叶斯条件独立性的假设可知,"打喷嚏"和"建筑工人"这两个特征是独立的,因此,上面的等式就变成了
P ( 感 冒 ∣ 打 喷 嚏 ∗ 建 筑 工 人 ) = P ( 打 喷 嚏 ∣ 感 冒 ) ∗ P ( 建 筑 工 人 ∣ 感 冒 ) ∗ P ( 感 冒 ) P ( 打 喷 嚏 ∗ 建 筑 工 人 ) P(感冒|打喷嚏*建筑工人)=\frac{P(打喷嚏|感冒)*P(建筑工人|感冒)*P(感冒)}{P(打喷嚏*建筑工人)} P()=P()P()P()P()

  通过计算得出
P ( 感 冒 ∣ 打 喷 嚏 ∗ 建 筑 工 人 ) = 0.66 ∗ 0.33 ∗ 0.5 0.5 ∗ 0.33 = 0.66 P(感冒|打喷嚏*建筑工人)=\frac{0.66*0.33*0.5}{0.5*0.33}=0.66 P()=0.50.330.660.330.5=0.66

  因此,这个打喷嚏的建筑工人,有66%的概率是得了感冒。同理,可以计算这个病人患上过敏或脑震荡的概率。比较这几个概率,就可以知道他最可能得什么病。

  这就是贝叶斯分类器的基本方法:在统计资料的基础上,依据某些特征,计算各个类别的概率,从而实现分类。

  同样,在编程的时候,如果不需要求出所属类别的具体概率,P(打喷嚏) = 0.5和P(建筑工人) = 0.33的概率是可以不用求的。





2. 动手实战

2.1. 项目案例1:屏蔽社区留言板的侮辱性言论

项目概述
  为了不影响社区的发展,我们要屏蔽侮辱性的言论,所以要构建一个快速过滤器,如果某条留言使用了负面或者侮辱性的语言,那么就将该留言标志为内容不当。过滤这类内容是一个很常见的需求。对此问题建立两个类型:侮辱类和非侮辱类,使用1和0分别表示。

开发流程
  我们把文本看成单词向量或者词条向量,也就是说将句子转换为向量。考虑出现所有文档中的单词,再决定将哪些单词纳入词汇表或者说所要的词汇集合,然后必须要将每一篇文档转换为词汇表上的向量。简单起见,我们先假设已经将本文切分完毕,存放到列表中,并对词汇向量进行分类标注。编写代码如下:

"""
函数说明:创建实验样本

Parameters:
    无
Returns:
    postingList - 实验样本切分的词条
    classVec - 类别标签向量
"""
def loadDataSet():
    postingList=[['my', 'dog', 'has', 'flea', 'problems', 'help', 'please'],                #切分的词条
                 ['maybe', 'not', 'take', 'him', 'to', 'dog', 'park', 'stupid'
Python中的朴素贝叶斯算法可以通过sklearn库来实现。在sklearn中,有三种朴素贝叶斯算法的实现:伯努利朴素贝叶斯、高斯朴素贝叶斯和多项式朴素贝叶斯。伯努利朴素贝叶斯适用于二值型特征,高斯朴素贝叶斯适用于连续型特征,而多项式朴素贝叶斯适用于离散型特征。\[1\] 下面是使用sklearn库实现朴素贝叶斯算法的示例代码: ```python # 导入所需库 from sklearn.naive_bayes import GaussianNB, BernoulliNB # 实例化高斯朴素贝叶斯算法 gaussian_nb = GaussianNB() # 实例化伯努利朴素贝叶斯算法 bernoulli_nb = BernoulliNB() # 使用高斯朴素贝叶斯算法进行拟合和预测 gaussian_nb.fit(X_train, y_train) y_pred_gaussian = gaussian_nb.predict(X_test) # 使用伯努利朴素贝叶斯算法进行拟合和预测 bernoulli_nb.fit(X_train, y_train) y_pred_bernoulli = bernoulli_nb.predict(X_test) # 查看预测结果和预测概率 print('高斯朴素贝叶斯预测结果:', y_pred_gaussian) print('高斯朴素贝叶斯预测概率:', gaussian_nb.predict_proba(X_test)) print('伯努利朴素贝叶斯预测结果:', y_pred_bernoulli) print('伯努利朴素贝叶斯预测概率:', bernoulli_nb.predict_proba(X_test)) # 查看准确率 score_gaussian = gaussian_nb.score(X_test, y_test) score_bernoulli = bernoulli_nb.score(X_test, y_test) print('高斯朴素贝叶斯准确率:', score_gaussian) print('伯努利朴素贝叶斯准确率:', score_bernoulli) ``` 以上代码展示了如何使用sklearn库中的高斯朴素贝叶斯和伯努利朴素贝叶斯算法进行拟合、预测和评估准确率。你可以根据自己的数据类型选择适合的朴素贝叶斯算法进行分类任务。\[2\]\[3\] #### 引用[.reference_title] - *1* *2* *3* [Python机器学习--分类算法--朴素贝叶斯算法](https://blog.csdn.net/qq_43214331/article/details/120026248)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值