统计学习方法学习总结(三):朴素贝叶斯法

本文介绍了朴素贝叶斯分类算法的基本概念,包括其工作原理、假设条件和贝叶斯定理的应用。通过水果分类和文本分类的实例,展示了算法如何在假设特征独立的情况下进行决策。同时,文章提及了朴素贝叶斯在实际中的应用和其在小数据集上的优势与局限性。
摘要由CSDN通过智能技术生成

概念

朴素贝叶斯 (naive     Bayes)法是基于贝叶斯定理与特征条件独立假设的分类方 法①。对于给定的训练数据集,首先基于特征条件独立假设学习输入输出的联合概率 分布;然后基于此模型,对给定的输入x,   利用贝叶斯定理求出后验概率最大的输出 y。朴素贝叶斯法实现简单,学习与预测的效率都很高,是一种常用的方法。 

 

朴素贝叶斯算法它在做分类决策时,会假设各特征之间是相互独立的。下面我用一个简单的例子来说明它的工作原理:

想象你有一个水果篮,里面装有苹果、香蕉和橘子。每种水果都有一些特征,比如颜色和形状。现在,如果我给你一个水果,让你根据它的颜色和形状来判断它是哪种水果,你可以怎么做呢?

  1. 收集数据:首先,你需要知道篮子里每种水果的数量以及它们各自的特征。比如,苹果大多是红色,香蕉是黄色,而橘子是橙色。

  2. 贝叶斯定理:这时候,朴素贝叶斯算法就要用到贝叶斯定理了。这个定理帮助我们计算在已知某特征的情况下,这个水果是某一种水果的概率。比如,如果一个水果是红色的,那它是苹果的概率有多大?

  3. 假设特征独立:朴素贝叶斯算法的“朴素”之处在于它假设各个特征之间是相互独立的。在我们的例子中,这就意味着水果的颜色和形状是互不影响的。

  4. 分类决策:最后,算法会比较这个水果是每种水果的概率,然后选择概率最高的那个作为它的分类。

朴素贝叶斯算法因其简单和高效,在文本分类(如垃圾邮件和情感分析)等领域被广泛应用。尽管它的“朴素”假设有时可能过于简化,但在很多情况下,这个算法仍然能够给出令人满意的结果。

 贝叶斯定理

 

贝叶斯定理是概率论中非常重要的一个定理,它告诉我们如何根据新的证据更新我们对一个事件的概率估计。贝叶斯定理的数学表达式相对简单,我会尽量用简洁的方式来解释。

贝叶斯定理的公式是:

P(A|B)=\frac{P(B|A)*P(A)}{P(B)}

这个公式中包含了以下几个部分:

  1. P(A∣B):这是我们想要计算的东西,称为后验概率。它表示在已知事件B发生的条件下,事件A发生的概率。

  2. P(B∣A):这是似然概率。它表示在事件A发生的条件下,事件B发生的概率。

  3. P(A):这是事件A的先验概率,即在没有考虑B的影响之前,A发生的概率。

  4. P(B):这是事件B的边际概率,即无论事件A是否发生,B发生的总概率。

贝叶斯定理的关键在于,它允许我们使用新的证据(即B的发生)来更新对A发生概率的估计。这是一个迭代过程,随着我们获取更多信息,我们可以更精确地估计概率。

朴素贝叶斯法原理 

设 C 是类别变量,X=(x1​,x2​,...,xn​) 是一个特征向量,其中 x1​,x2​,...,xn​ 是独立特征。我们的目标是在给定特征的情况下找到类别的概率,即计算 P(C∣X)。根据贝叶斯定理,我们有:

P(C|X)=\frac{P(X|C)*P(C)}{P(C)}

在朴素贝叶斯中,因为特征被假设为条件独立,所以 P(X∣C) 可以分解为:

P(X∣C)=P(x1​,x2​,...,xn​∣C)=P(x1​∣C)×P(x2​∣C)×...×P(xn​∣C)

将这个分解后的表达式代入贝叶斯定理,我们得到:

P(C|X)=\frac{P(x1|C)P(x2|C)..P(xn|C)*P(C)}{P(X)}

其中:

  • P(xi​∣C) 是在类别 C 下特征 xi​ 出现的概率。
  • P(C) 是类别 C 的先验概率,可以根据训练集中类别 C 的相对频率来估计。
  • P(X) 是特征向量 X 出现的概率,通常作为归一化常数。

在实际应用中,为了找到给定特征向量 X 最可能的类别,我们计算每个类别 C 下 P(C∣X) 的值,然后选择具有最大后验概率的类别:

C^=argmaxC​P(C∣X)

由于 P(X) 对于所有类别都是相同的,所以在比较不同类别的 P(C∣X) 时,通常可以忽略它。

朴素贝叶斯方法在处理具有大量特征的数据集(如文本分类)时特别有效,因为它的简化假设(特征条件独立)使得模型即使在小数据集上也能够有效地训练,并且计算效率高。不过,这种独立性假设有时可能过于简化,不适用于所有问题。

 假设我们有一个很小的数据集,它涉及判断天气条件下是否会进行网球比赛。我们的目标是基于天气条件预测是否会进行网球比赛。

假设我们有以下数据集:

| 天气  | 温度  | 湿度  | 风速  | 网球比赛 |
|-------|-------|-------|-------|----------|
| 晴朗  | 炎热  | 高    | 弱    | 是       |
| 晴朗  | 炎热  | 高    | 强    | 否       |
| 阴天  | 炎热  | 高    | 弱    | 是       |
| 雨天  | 适中  | 高    | 弱    | 是       |
| 雨天  | 寒冷  | 正常  | 弱    | 是       |
| 雨天  | 寒冷  | 正常  | 强    | 否       |
| 阴天  | 寒冷  | 正常  | 强    | 是       |

我们想预测在下列条件下会不会有网球比赛:天气=阴天,温度=适中,湿度=高,风速=强。

首先,我们需要计算各个特征的概率以及类别的先验概率。

1. 类别的先验概率:在这个数据集中,有5天进行了网球比赛(是),2天没有进行(否)。
   P(是) = \frac{5}{7}
   P(否) = \frac{2}{7}

2. 计算特征的条件概率:以“天气=阴天”且“网球比赛=是”为例,

 

   同样的方法计算其他特征的条件概率。

3. 应用朴素贝叶斯公式:我们计算在给定特征条件下进行网球比赛的概率 P(是|X)  和不进行网球比赛的概率 P(否|X) ,其中 X 是给定的特征组合。

   

   因为我们只是比较这两个概率的相对大小,所以可以忽略分母 \( P(X) \)。

4. 比较两个概率:比较 P(是|X)  和 P(否|X)的大小,选择较大的那个作为预测结果。

现在,让我们根据这些步骤计算具体的概率。

根据计算结果:

- 进行网球比赛的概率 P(是|X)约为 0.0274。
- 不进行网球比赛的概率  P(否|X) 为 0。

在这个特定的例子中,由于在给定的条件(天气=阴天,温度=适中,湿度=高,风速=强)下没有出现过“不进行网球比赛”的情况,因此 P(否|X) 的值为 0。这意味着,在这些特定条件下,根据我们的模型和数据集,比赛是会进行的。

需要注意的是,这个结果完全取决于我们的数据集大小和分布。在实际应用中,朴素贝叶斯模型的准确性会受到数据集质量和数量的影响。此外,由于我们的数据集非常小,所以这个结果可能并不具有强大的预测力。在更大和更复杂的数据集上应用朴素贝叶斯时,结果通常会更加可靠和准确。

 

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import confusion_matrix
import seaborn as sns
import matplotlib.pyplot as plt

# 创建数据集
data = [
    ("体育 新闻 足球 比赛", "体育"),
    ("科技 新闻 科学 探索", "科技"),
    ("体育 赛事 直播", "体育"),
    ("科技 世界 发展", "科技"),
    ("足球 比赛 观看", "体育"),
    ("科学 实验", "科技")
]
texts, labels = zip(*data)

# 特征提取
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(texts)

# 模型训练
model = MultinomialNB()
model.fit(X, labels)

# 模型测试
test_texts = ["足球 赛事", "科学 新发现"]
test_X = vectorizer.transform(test_texts)
predicted = model.predict(test_X)

# 结果展示
for text, category in zip(test_texts, predicted):
    print(f"{text} => {category}")

足球 赛事 => 体育
科学 新发现 => 科技

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值