分类算法——朴素贝叶斯(四)

概率基础

1概率定义

  • 概率定义为一件事情发生的可能性
    • 扔出一个硬币,结果头像朝上
  • P(X):取值在[0,1]

2女神是否喜欢计算案例
在讲这两个概率之前我们通过一个例子,来计算一些结果:
在这里插入图片描述

  • 问题如下:
    1、女神喜欢的概率?
    2、职业是程序员并且体型匀称的概率?
    3、在女神喜欢的条件下,职业是程序员的概率?
    4、在女神喜欢的条件下,职业是程序员,体重是超重的概率?

  • 计算结果为:

P(喜欢)=4/7
P(程序员,匀称)=1/7
P(程序员|喜欢)=2/4 = 1/2
P(程序员,超重|喜欢)=1/4

联合概率、条件概率与相互独立

  • 联合概率:包含多个条件,且所有条件同时成立的概率
    • 记作:P(A,B)
    • 例如:P(程序员,匀称),P(程序员,超重|喜欢)
  • 条件概率:就是事件A在另外一个事件B已经发生条件下的发生概率
    • 记作:P(A|B)
    • 例如:P(程序员|喜欢),P(程序员,超重|喜欢)
  • 相互独立:如果P(A,B)=P(A)P(B),则称事件A与事件B相互独立。

贝叶斯公式

1公式
在这里插入图片描述

注:W为给定文档的特征值(频数统计,预测文档提供),C为文档类别。

2实例计算
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
即:

P(喜欢|产品,超重)=P(产品,超重|喜欢)P(喜欢)/P(产品,超重)

上式中,P(产品,超重|喜欢)和P(产品,超重)的结果均为0,导致无法计算结果。这是因为样本量太少了,不具有代表性,本来现实生活中,肯定是存在职业是产品经理并且体重超重的人的,P(产品,超重)不可能为0;而且事件“职业是产品经理”和事件“体重超重”通常被认为是相互独立的事件,但是,根据我们有限的7个样本计算“P(产品,超重)=P(产品)P(超重)”不成立。
而朴素贝叶斯可以帮助我们解决这个问题
朴素贝叶斯,简单理解,就是假定了特征与特征之间相互独立的贝叶斯公式。也就是说,朴素贝叶斯,之所以朴素,就在于假定了特征与特征相互独立。
所以,思考题如果按照朴素贝叶斯的思路来解决,就可以是:

P(产品,超重)=P(产品)*P(超重):2/7*3/7=6/49
p(产品,超重|喜欢)=P(产品|喜欢)*P(超重|喜欢)=1/2*1/4=1/8
P(喜欢|产品,超重)=P(产品,超重|喜欢)P(喜欢)/P(产品,超重)=1/8 * 4/7 / 6/49 = 7/12

朴素:假定特征与特征之间是相互独立的
贝叶斯:贝叶斯公式

在这里插入图片描述

公式分为三个部分:

  • P(C):每个文档类别的概率(某文档类别数/总文档数量)
  • P(W | C):给定类别下特征((被预测文档中出现的词)的概率
    • 计算方法:P(F1 | C)=Ni/N(训练文档中去计算)
      • Ni为该F1词在C类别所有文档中出现的次数
      • N为所属类别C下的文档所有词出现的次数和
  • P(F1,F2…)预测文档中每个词的概率

如果计算两个类别概率比较:
所以我们只要比较前面的大小就可以,得出谁的概率大

### 朴素贝叶斯算法计算题示例 #### 题目背景 假设有一个数据集用于判断一封电子邮件是否为垃圾邮件。该数据集中有三个属性:`含有免费` (`Free`)、`含有一等奖` (`Prize`) 和 `来自特定发件人` (`Sender`),以及标签 `是否为垃圾邮件` (`Spam`)。 | Free | Prize | Sender | Spam | |------|-------|--------|------| | 是 | 否 | 是 | 是 | | 否 | 是 | 否 | 是 | | 否 | 否 | 是 | 否 | | 是 | 是 | 否 | 是 | | 否 | 否 | 否 | 否 | 现在收到一封新邮件,其特征为 `{Free=否, Prize=是, Sender=否}`,试用朴素贝叶斯分类器来预测这封邮件是否为垃圾邮件。 #### 数据准备与预处理 为了简化问题,假定所有变量都是离散型,并且已知先验概率 P(Spam) 及条件概率表如下: - **P(Spam)** = (数量为 "是" 的记录数 / 总记录数) = 3/5 - **P(Not Spam)** = (数量为 "否" 的记录数 / 总记录数) = 2/5 对于每个属性 A_i,在给定类别 C 下的概率可以通过频率统计得到: \[ P(A_i \mid C)=\frac{\text { 属性 } A_{i}=\alpha \text { 并且属于类别 } C}{\text { 类别 } C \text { 中的总样本数 }} \] #### 条件概率计算 根据上述表格可以得出以下条件概率值: - \( P(\mathrm{Free}=N o \mid S p a m)\approx0.67 \)[^1] - \( P(P r i z e=Y e s \mid S p a m)\approx0.67 \) - \( P(S e n d e r=N o \mid S p a m)\approx0.67 \) 同样地,也可以获得非垃圾邮件对应的条件概率: - \( P(Free=No \mid Not Spam)≈1.0 \) - \( P(Prize=Yes \mid Not Spam)≈0.0 \) - \( P(Sender=No \mid Not Spam)≈0.67 \) 注意这里出现了零概率的情况 (\(P(Prize=Yes \mid Not Spam)\)) ,实际应用中通常会采用拉普拉斯平滑或其他技术避免这种情况发生。 #### 应用贝叶斯公式求解后验概率 利用贝叶斯定理可得两个类别的后验概率分别为: \[ P(Spam \mid X )=\frac{P(X \mid Spam)*P(Spam)}{P(X)} \] 其中, \(X\) 表示观测到的数据向量 `(Free=No, Prize=Yes, Sender=No)`; 而分母 \(P(X)\),即边缘似然度,则可通过全概率定律由各个可能原因加权平均而来,但在比较不同类别时可以直接忽略这个常数因子不影响最终结果判定。 因此只需要关注分子部分即可做出决策: \[ P(Spam \mid X ) ∝ P(X \mid Spam)*P(Spam) \] 代入具体的数值进行运算: \[ P(Spam \mid X ) ∝ 0.67 * 0.67 * 0.67 * 0.6 ≈ 0.189 \] 同理, \[ P(Not Spam \mid X ) ∝ 1.0 * 0.0 * 0.67 * 0.4 ≈ 0.0 \] 显然,前者远大于后者,所以应该将此条消息标记为垃圾邮件。 ```python def naive_bayes_classifier(features, spam_probabilities, not_spam_probabilities): # Calculate the product of probabilities for each class given features. prob_spam_given_features = ( spam_probabilities['free_no'] * spam_probabilities['prize_yes'] * spam_probabilities['sender_no'] * spam_probabilities['prior'] ) prob_not_spam_given_features = ( not_spam_probabilities['free_no'] * not_spam_probabilities['prize_yes'] * not_spam_probabilities['sender_no'] * not_spam_probabilities['prior'] ) return 'Spam' if prob_spam_given_features > prob_not_spam_given_features else 'Not Spam' spam_probs = {'free_no': 0.67, 'prize_yes': 0.67, 'sender_no': 0.67, 'prior': 0.6} not_spam_probs = {'free_no': 1.0, 'prize_yes': 0.0, 'sender_no': 0.67, 'prior': 0.4} features_to_classify = ['no', 'yes', 'no'] result = naive_bayes_classifier(features_to_classify, spam_probs, not_spam_probs) print(f"The email is classified as: {result}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值