wushuhong 发表于 2025-6-13 16:34:04

AI red teamer (人工智能红队)系列06-人工智能基础-朴素贝叶斯

<p><img src="data/attachment/forum/202506/13/163401ad1zpaa6lapz93sd.png" alt="26s0h5-0.png" title="26s0h5-0.png" /></p>
<p>朴素贝叶斯是一种用于分类任务的概率算法。它基于贝叶斯定理,这是概率论中的一个基本概念,描述了基于先验知识和观察到的证据来描述事件概率。朴素贝叶斯因其简单性、效率以及在实际场景中出奇的好性能,在诸如垃圾邮件过滤和情感分析等任务中非常受欢迎。</p>
<h2>贝叶斯定理</h2>
<p>在深入了解 <code>朴素贝叶斯</code> 之前,让我们先了解一下它的核心概念:<code>贝叶斯定理</code>。该定理提供了一种根据新证据更新我们对某一事件的信念的方法。它允许我们在另一个事件已经发生的情况下计算该事件的概率。</p>
<p>数学上表示为</p>
<pre><code class="language-python">P(A|B) = / P(B)
</code></pre>
<p>Python</p>
<ul>
<li><code>P(A|B)</code>:在事件 <code>A</code> 已经发生的情况下,事件 <code>B</code> 发生的后验概率。</li>
<li><code>P(B|A)</code>:在事件 <code>A</code> 已经发生的情况下,事件 <code>B</code> 发生的可能性。</li>
<li><code>P(A)</code>:事件 <code>A</code> 发生的先验概率。</li>
<li><code>P(B)</code>:事件 <code>B</code> 发生的先验概率。</li>
</ul>
<p>假设我们想知道某人在某种疾病(<code>A</code>)检测呈阳性(<code>B</code>)的情况下患病的概率。<code>贝叶斯定理</code>允许我们使用患有该疾病的先验概率(<code>P(A)</code>)、该人患有该疾病时检测呈阳性的可能性(<code>P(B|A)</code>)和检测呈阳性的总概率(<code>P(B)</code>)来计算该概率。</p>
<p>假设我们有以下信息:</p>
<ul>
<li>该疾病在人群中的发病率为 1%,因此 <code>P(A) = 0.01</code>。</li>
<li>该测试的准确率为 95%,也就是说,如果有人患病,95% 的情况下测试结果呈阳性,因此 <code>P(B|A) = 0.95</code>。</li>
<li>检测的假阳性率为 5%,也就是说,如果一个人没有患病,他的检测结果也会有 5% 呈阳性。</li>
<li>检测呈阳性的概率,<code>P(B)</code>,可以用总概率定律来计算。</li>
</ul>
<p>首先,让我们计算 <code>P(B)</code> :</p>
<pre><code class="language-python">P(B) = P(B|A) * P(A) + P(B|¬A) * P(¬A)
</code></pre>
<p>Python</p>
<ul>
<li><code>P(¬A)</code>:不患病的概率,即 <code>1 - P(A)= 0.99</code>。</li>
<li><code>P(B|¬A)</code>:在患者未患病的情况下,检测结果呈阳性的概率,即假阳性率,<code>0.05</code>。</li>
</ul>
<p>现在,将数值代入:</p>
<pre><code class="language-python">P(B) = (0.95 * 0.01) + (0.05 * 0.99)
   = 0.0095 + 0.0495
   = 0.059
</code></pre>
<p>Python</p>
<p>接下来,我们使用贝叶斯定理求出 <code>P(A|B)</code> :</p>
<pre><code class="language-python">P(A|B) = / P(B)
      = (0.95 * 0.01) / 0.059
      = 0.0095 / 0.059
      ≈ 0.161
</code></pre>
<p>Python</p>
<p>因此,如果某人的检测结果呈阳性,那么他患病的概率约为 16.1%。</p>
<p>本例演示了 <code>贝叶斯定理</code>如何用于根据新证据更新我们对事件可能性的信念。在本例中,尽管检测结果相当准确,但疾病的低流行率意味着检测结果呈阳性表明疾病实际存在的概率仍然相对较低。</p>
<h2>朴素贝叶斯工作原理</h2>
<p><code>朴素贝叶斯</code> 分类器利用 <code>贝叶斯定理</code>来预测一个数据点在其特征条件下属于某个特定类别的概率。为此,它会 &quot;天真 &quot;地假设特征之间的条件独立性。这意味着,在我们知道类别标签的情况下,它假设一个特征的存在或不存在不会影响任何其他特征的存在或不存在。</p>
<p>让我们来分析一下如何实际操作:</p>
<p><code>计算先验概率</code>:算法首先计算每个类别的先验概率。这是在考虑数据特征之前,数据点属于某一特定类别的概率。例如,在垃圾邮件检测场景中,一封邮件是垃圾邮件的概率可能是 0.2(20%),而不是垃圾邮件的概率是 0.8(80%)。</p>
<p><code>计算可能性:</code> 接下来,算法会计算在每个类别中观察到每个特征的可能性。这包括确定在数据点属于特定类别的情况下看到特定特征值的概率。例如,如果一封邮件是垃圾邮件,那么在邮件中看到 &quot;免费 &quot;一词的可能性有多大?如果不是垃圾邮件,看到 &quot;会议 &quot;一词的可能性有多大?</p>
<p><code>应用贝叶斯定理:</code> 对于一个新数据点,算法会使用 <code>贝叶斯定理</code>将先验概率和似然结合起来,计算出该数据点属于每个类别的 <code>后验概率</code>。<code>后验概率</code>是在考虑了新信息(观察到的特征)后,事件(在本例中,数据点属于某个类别)的更新概率。这表示在考虑观察到的特征后,对类别标签的修正信念。</p>
<p><code>预测类别:</code> 最后,算法会将数据点分配给后验概率最高的类别。</p>
<p>尽管在现实数据中,这种特征独立性的假设往往被违反(例如,“免费”和“伟哥”这样的词在垃圾邮件中确实更可能同时出现),但在实际应用中,朴素贝叶斯通常表现得相当出色。</p>
<h2>朴素贝叶斯分类器的类型</h2>
<p><code>朴素贝叶斯</code>的具体实现取决于特征类型及其假定分布:</p>
<ul>
<li>高斯朴素贝叶斯:当特征是连续的并且假设遵循高斯分布(钟形曲线)时使用。例如,如果根据客户的年龄和收入预测客户是否会购买产品,可以使用高斯朴素贝叶斯,假设年龄和收入是正态分布的。</li>
<li>多项式朴素贝叶斯:适用于离散特征,常用于文本分类。例如,在垃圾邮件过滤中,像“免费”或“金钱”这样的词的频率可能是特征,多项式朴素贝叶斯将建模这些词出现在垃圾邮件和非垃圾邮件中的概率。</li>
<li>伯努利朴素贝叶斯:这种类型用于二元特征,其中特征要么存在,要么不存在。在文档分类中,一个特征可能是特定单词是否存在于文档中。伯努利朴素贝叶斯将模拟每个类别的存在或不存在概率。</li>
</ul>
<p>选择使用哪种类型的 <code>朴素贝叶斯</code> 取决于数据的性质和要解决的具体问题。</p>
<h2>数据假设</h2>
<p>虽然朴素贝叶斯相对稳健,但了解一些数据假设还是有帮助的:</p>
<ul>
<li><code>特征独立性:</code> 如前所述,核心假设是给定类的特征是有条件独立的。</li>
<li><code>数据分布:</code>朴素贝叶斯 分类器(高斯、多项式、伯努利)的选择取决于假定的特征分布。</li>
<li><code>足够的训练数据:</code> 尽管 朴素贝叶斯 可以使用有限的数据,但拥有足够的数据来准确估计概率是非常重要的。</li>
</ul>

洪枫 发表于 2025-6-19 16:30:03

原理阐述挺详细

wuyou008 发表于 2025-6-29 09:00:02

这算法还挺有意思

danssion 发表于 2025-7-7 11:30:03

这算法还挺复杂哈

洪枫 发表于 2025-8-1 08:00:04

原来这就是贝叶斯
页: [1]
查看完整版本: AI red teamer (人工智能红队)系列06-人工智能基础-朴素贝叶斯