文章目录
- 一、说明
- 二、从一个简单例子入手
- 2.1 简单示例
- 2.2 朴素贝叶斯算法的直觉解释
- 三、在训练阶段,朴素贝叶斯内部会发生什么?
- 3.1 朴素贝叶斯如何处理数值数据?
- 3.2 如果数据分布不是高斯分布怎么办?
- 3.3 朴素贝叶斯的数值稳定性问题:
- 3.4 朴素贝叶斯的零概率问题:(拉普拉斯加法平滑)
- 四、使用没有拉普拉斯平滑的基本朴素贝叶斯方法,
- 五、朴素贝叶斯的类型
- 5.1 高斯朴素贝叶斯:
- 5.2 . 分类朴素贝叶斯:
- 5.3 多项式朴素贝叶斯:
- 5.4 伯努利朴素贝叶斯
一、说明
朴素贝叶斯算法是一系列概率分类算法,用于文本分类等任务,例如垃圾邮件过滤和情感分析。它假定特征彼此独立,这意味着一个特征的存在与否不会影响另一个特征的概率。这个假设虽然过于简单,但允许朴素的贝叶斯分类器在实践中表现良好,同时计算效率高。
该算法基于概率中的贝叶斯定理。
朴素贝叶斯分类器在同质类型的输入特征上给出了很好的结果,这就是为什么它在文本数据任务(如情感分析)上给出了非常好的结果。
二、从一个简单例子入手
2.1 简单示例
我们用一个简单的示例,我们假如要提取出天气对翻越可可西里无人区的影响,提取出气候影响的模型,便可预测任意天气下,考察对穿越可可西里的可能性预测。我们先将历史中,穿越可可西里的天气资料,如下表:
天气 | 气温 | 湿度 | 风天 | 是否成功 |
---|---|---|---|---|
日照天 | 热 | 高 | 无风 | 否 |
日照天 | 热 | 高 | 无风 | 否 |
阴天 | 热 | 高 | 无风 | 是 |
雨天 | 中等 | 高 | 无风 | 是 |
雨天 | 冷 | 常 | 无风 | 是 |
雨天 | 冷 | 常 | 有风 | 无 |
阴天 | 冷 | 常 | 有风 | 是 |
日照天 | 中等 | 高 | 无风 | 否 |
日照天 | 冷 | 正常 | 无风 | 是 |
雨天 | 中等 | 正常 | 无风 | 是 |
日照天 | 中等 | 正常 | 有风 | 是 |
阴天 | 中等 | 高 | 有风 | 是 |
阴天 | 热 | 常 | 无风 | 是 |
雨天 | 中等 | 高 | 有风 | 否 |
以下,我们将演示如何使用贝叶斯理论的用法。
2.2 朴素贝叶斯算法的直觉解释
下面显示的数据集基本上是基于这个人是否能穿越可可西里,基于天气条件,如天气、温度、湿度和风,四个要素。
为了解决根据天气条件(天气、温度、湿度和风力)预测一个人是否会穿越的问题,我们可以应用朴素贝叶斯算法。给定特定的天气条件,例如天气 = 晴天,温度 = 凉爽,湿度 = 正常,大风 = 真,我们想预测这个条件穿过可可西里的可能性。
根据贝叶斯定理, P ( A ∣ B ) = ( P ( B ∣ A ) ∗ P ( A )) / P ( B ) P(A|B) = (P(B|A) * P(A)) / P(B) P(A∣B)=(P(B∣A)∗P(A))/P(B)
对于我们的例子,假设 Y= 能穿越,N= 不能穿越
和 B = { 天气 = 晴天,温度 = 凉爽,湿度 = 正常,风 = 真 } B= \{天气 = 晴天,温度 = 凉爽,湿度 = 正常,风 = 真\} B={天气=晴天,温度=凉爽,湿度=正常,风=真}
因此,为了预测某个团队是否能穿越可可西里,我们需要计算以下概率:
P ( Y ∣ B ) P(Y|B) P(Y∣B)和 P ( N ∣ B ) P(N|B) P(N∣B)在两者之间,我们根据这一点来决定这个团队是否穿越成功。
根据贝叶斯定理,我们可以按如下方式计算这些概率:
P ( Y ∣ B ) = ( P ( B ∣ Y ) ∗ P ( Y )) / P ( B ) P ( N ∣ B ) = ( P ( B ∣ N ) ∗ P ( N )) / P ( B ) P(Y|B) = (P(B|Y) * P(Y)) / P(B) \\ P(N|B) = (P(B|N) * P(N)) / P(B) P(Y∣B)=(P(B∣Y)∗P(Y))/P(B)P(N∣B)=(P(B∣N)∗P(N))/P(B)
这里:
P(B|Y)是观察天气条件B的概率,假设这个团队成功穿越,
P(B|N)是观察天气条件B的概率,假设这个团队不能成功穿越;
P(Y)是成功穿越的先验概率(成功穿越的总概率),
P(N)是成功穿越的先验概率(不成功穿越的总概率),
P(B) 是观察天气条件 B 的概率,无论该人是否穿越。
在这两种情况下,我们用 P(B) 除法,这对两者都是通用的,所以我忽略了这个项,新方程变成了:
P ( Y ∣ B ) = P ( B ∣ Y ) ∗ P ( Y ) 和 P ( N ∣ B ) = P ( B ∣ N ) ∗ P ( N ) P(Y|B) = P(B|Y) * P(Y)\\ 和 P(N|B) = P(B|N) * P(N) P(Y∣B)=P(B∣Y)∗P(Y)和P(N∣B)=P(B∣N)∗P(N)
从上面的数据集中, P ( Y ) = 9 / 14 和 P ( N ) = 5 / 14 P(Y) = 9/14 和 P(N) = 5/14 P(Y)=9/14和P(N)=5/14
和 P(B|Y) = P(晴天∩凉爽∩正常∩ 真 |是)
和 P(B|N) = P(晴天∩凉爽∩正常∩ 真 |否)
但是在表中没有这样的条件同时匹配,
所以P(B|Y) = 0 和 P(B|N) =0
因此,P(Y|B) = 0 和 P(N|B) =0
那么,问题来了,我们将如何预测?
这里出现了一个朴素的假设,它假设所有输入列都是相互独立的。因此,我们改变了计算 P(晴天∩凉爽∩正常∩的方法 True |是的),我们计算如下:
P(晴天∩凉爽∩正常∩ 真 |是) = P(晴天 |是) * P(酷 |是) * P(正常 |是) * P(True |是的)
同样,
P(晴天∩凉爽∩正常∩ 真 |No) = P(晴天 |否) * P(酷 |否) * P(正常 |否) * P(真 |否)
在上表的帮助下,P(sunny |是)= 2/9,P(冷却 |是) = 3/9, P(正常 |是) = 6/9, P(True |是)= 3/9
并计算,P(Y|B) = 2/9 * 3/9 * 6/9 * 3/9 * 9/14 = 972/91854
类似地,我们可以计算 P(N |B)在给定的两个中哪个更大,这是我们的预测。
因此,机器学习算法中的朴素贝叶斯算法以这种方式工作。
三、在训练阶段,朴素贝叶斯内部会发生什么?
在朴素贝叶斯算法的训练阶段,所有可能的特征值和类组合的概率都以哈希格式计算和存储。这涉及估计给定每个类的类的先验概率和特征值的条件概率。在测试阶段,该算法根据观察到的特征值检索相应的概率,将它们相乘,并提供最终输出,指示预测的类别。通过在训练期间预计算和存储概率,测试阶段变得更加高效,因为它涉及简单的查找和乘法运算,而不是每次都重新计算概率。
3.1 朴素贝叶斯如何处理数值数据?
假设我有一个数据集,给出了该人的年龄以及是否结婚。
我今年 46 岁,我想使用朴素贝叶斯预测此人是否已婚。所以我需要计算 P(Y | 46) 和 P(N | 46)。但是在给定的表格中,给定的年龄可能不存在,那么这个时间这些概率就变成了零。为了解决这个问题,我们假设我们的 Age 列遵循高斯分布,并根据此分布计算 μ 和 σ 和 x= 46,并将所有值放入高斯分布函数中:
现在我们计算 f(x),它给出了相应年龄的概率。因此,通过这种方式,使用概率密度函数,我们可以对数值数据使用朴素贝叶斯算法。
3.2 如果数据分布不是高斯分布怎么办?
数据转换:根据数据的性质,可以应用变换以使其更正态分布。常见的变换包括对数变换、平方根变换和倒数变换。
替代发行版:如果您知道或怀疑您的数据遵循特定的非正态分布(例如,指数分布、泊松分布等),则可以在计算似然时修改朴素贝叶斯算法以假定该特定分布。
离散化:您可以通过对值进行分箱将连续数据转换为分类数据。有多种方法可以确定条柱,包括等宽条柱、等频条柱,或使用更复杂的方法,如 k-means 聚类。
对数据进行分箱后,可以使用标准的多项式或伯努利朴素贝叶斯方法。
核密度估计:一种估计随机变量概率密度函数的非参数方法。当分布未知时,可以使用核密度估计。
使用其他型号:如果上述选项都不起作用,则最好考虑使用不同的分类算法,该算法不会对特征的分布做出强有力的假设,例如决策树、随机森林或支持向量机。
3.3 朴素贝叶斯的数值稳定性问题:
在朴素贝叶斯算法中,数值稳定性可能是一个问题,尤其是在处理非常小的概率时。此问题是由于概率的乘法而产生的,这可能导致值极小,这些值可能会下溢或导致浮点计算中的精度损失。
用于解决朴素贝叶斯中数值稳定性的一种常用技术是使用对数概率而不是原始概率。通过采用概率对数,乘法运算转换为求和运算。这有助于缓解下溢问题,因为添加对数概率在数值上比直接乘以小概率更稳定。
在处理对数概率时,朴素贝叶斯分类的公式略有变化。不是将概率相乘,而是将对数概率相加,并选择结果值最高的类作为预测类。这种方法在解决数值稳定性问题的同时保持了概率的相对排序。
3.4 朴素贝叶斯的零概率问题:(拉普拉斯加法平滑)
拉普拉斯加法平滑是朴素贝叶斯算法中常用的一种技术,用于处理零概率问题。它用于避免在分类过程中遇到看不见的特征和类组合的问题。
在朴素贝叶斯中,在计算概率时,可能会遇到测试数据中未在训练数据中观察到的特征值。因此,此类组合的条件概率为零,这可能导致不准确的预测。
拉普拉斯加法平滑通过在估计概率时在分子和分母上添加一个小常数(通常为 1)来解决这个问题。这样,即使未在训练数据中观察到特定类的特定特征值,它仍然具有非零概率。
P(特征值 | 类) = (给定类 + α 的特征值计数) / (类计数 + n * α)
这里α通常取 1,n 的值取决于您使用的朴素贝叶斯类型。
让我们举个例子来更清楚地理解朴素贝叶斯中的拉普拉斯加法平滑:
假设我们有一个电影评论数据集,根据他们的情绪标记为正面 (+) 或负面 (-)。我们想使用朴素贝叶斯根据某些单词的出现将新评论分类为正面或负面。
下面是一个简化的训练数据集:
现在,假设我们想对新评论进行分类:“精彩的电影”。我们需要计算每个类(正和负)的概率,给定评论中出现的特定单词。
四、使用没有拉普拉斯平滑的基本朴素贝叶斯方法,
我们会遇到一个问题。“太棒了”这个词不会出现在正面或负面评论的训练数据中。因此,条件概率 P(“Fantastic” | +) 和 P(“Fantastic” | -) 将为零。当我们将这些概率相乘以计算 P(+ |“神奇的电影”)和P(- |“精彩的电影”),结果概率也为零。
如果没有拉普拉斯加法平滑,朴素贝叶斯分类器将无法提供任何预测,因为它遇到的概率为零。
现在,让我们通过在分子和分母上添加一个小常数(例如,1)来应用拉普拉斯平滑。应用拉普拉斯平滑后,正类和负类的“奇妙”概率变为非零。
这种调整允许朴素贝叶斯分类器对看不见的特征组合进行预测。通过添加常数,拉普拉斯平滑可确保概率不会变为零,并提供更稳健、更可靠的概率估计。
综上所述,朴素贝叶斯采用拉普拉斯加法平滑处理零概率问题,提高分类器的泛化能力。它允许在测试数据中遇到看不见的特征组合时进行预测。
使用拉普拉斯加法平滑系数“α”的朴素贝叶斯分类器中的偏差-方差权衡:
如果 alpha 值设置为零(无平滑),朴素贝叶斯分类器可能会过度拟合训练数据并产生过于自信的预测。这是因为分类器为看不见的特征值分配了零的概率,从而导致估计值有偏差。在这种情况下,模型可能具有低偏差但高方差。例如:
假设我们有一个二元分类问题,根据两个特征来预测电子邮件是否是垃圾邮件:“金钱”一词的存在和“彩票”一词的存在。我们在电子邮件及其相应标签的数据集上训练朴素贝叶斯分类器。
在没有平滑处理 (alpha = 0) 的情况下,我们假设训练数据中没有一个垃圾邮件包含“彩票”一词。在预测阶段,当分类器遇到包含单词“lottery”的测试电子邮件时,它会为事件“spam”分配零概率,给定特征“lottery”。这是因为它在训练期间没有观察到垃圾邮件类中的“彩票”一词。
因此,分类器将自信地将任何包含“彩票”一词的电子邮件归类为非垃圾邮件,即使它实际上是具有其他垃圾邮件相关功能的垃圾邮件。这种过度自信的预测是由于分配给看不见的特征值的概率为零。
在这种情况下,分类器将具有低偏差,因为它通过为看不见的特征值分配零概率来完美地拟合训练数据。但是,它将具有很高的方差,因为它无法很好地泛化到看不见的实例。
通过引入具有非零 alpha 值(如 alpha = 1)的拉普拉斯平滑,分类器将非零概率分配给看不见的特征值。它将观测到的特征值的概率质量重新分配到看不见的特征值,从而减少偏差并避免零概率。
使用拉普拉斯平滑,分类器将为给定特征“lottery”的事件“spam”分配一个小的非零概率。这允许模型做出更合理的预测,同时考虑其他特征和数据的整体分布。它减少了过度拟合,并改进了对看不见的实例的泛化,在偏差和方差之间取得了更好的平衡。
另一方面当 alpha 非常大时,添加的伪计数 (alpha) 在训练数据中实际观察到的计数中占主导地位。因此,平滑概率在所有特征值中变得非常相似,从而降低了模型的判别能力。这种过度平滑会导致朴素贝叶斯分类器变得过于保守,对数据中的特定模式不太敏感。
在极端情况下,当 alpha 设置为无穷大时,每个特征值的所有概率都相等,从而产生均匀分布。这基本上完全忽略了观察到的数据,并为所有可能的结果分配了相等的概率。这种极端的过度平滑导致泛化能力差和重要判别信息的丢失。
让我们考虑一个简单的例子,根据两个特征的存在将电子邮件分类为垃圾邮件或非垃圾邮件:“金钱”一词和“彩票”一词。我们有一个训练数据集,其计数如下:
垃圾邮件:100 次出现“金钱”,20 次出现“彩票”。
非垃圾邮件:“金钱”出现 10 次,“彩票”出现 90 次。
现在,让我们来看看不同 alpha 值对朴素贝叶斯分类器分配的概率的影响:
当然!让我们考虑一个简单的例子,根据两个特征的存在将电子邮件分类为垃圾邮件或非垃圾邮件:“金钱”一词和“彩票”一词。我们有一个训练数据集,其计数如下:
垃圾邮件:100 次出现“金钱”,20 次出现“彩票”。
非垃圾邮件:“金钱”出现 10 次,“彩票”出现 90 次。
现在,让我们来看看不同 alpha 值对朴素贝叶斯分类器分配的概率的影响:
无平滑 (alpha = 0):在没有任何平滑的情况下,如果我们遇到一封新电子邮件,其中包含训练数据中未看到的特征值,则其概率将为零。在这种情况下,如果电子邮件中不存在“金钱”一词,则无论是否出现“彩票”,它成为垃圾邮件的概率都将为零。这种灵活性的缺乏会导致过拟合。
中度平滑 (alpha = 1):使用拉普拉斯平滑,我们将伪计数 1 添加到所有特征出现中。概率计算如下:
P(“money” | spam) = (100 + 1) / (100 + 10 + 2) = 0.5038
P(“彩票”|垃圾邮件) = (20 + 1) / (100 + 10 + 2) = 0.1887
P(“money” | non-spam) = (10 + 1) / (10 + 90 + 2) = 0.1098
P(“彩票”|非垃圾邮件) = (90 + 1) / (10 + 90 + 2) = 0.8902
有了这些概率,我们可以对新电子邮件进行分类。但是,如果新电子邮件包含以前未见过的功能值(例如,“头奖”),则其概率仍为零。这限制了模型在观测特征值之外进行泛化的能力。
- 极端平滑 (alpha = 1000):现在,让我们考虑一个非常大的 alpha 值。概率计算如下:
P(“money” | spam) = (100 + 1000) / (100 + 10 + 2 * 1000) = 0.1887
P(“彩票” | 垃圾邮件) = (20 + 1000) / (100 + 10 + 2 * 1000) = 0.1887
P(“money” | 非垃圾邮件) = (10 + 1000) / (10 + 90 + 2 * 1000) = 0.1098
P(“彩票”|非垃圾邮件) = (90 + 1000) / (10 + 90 + 2 * 1000) = 0.1098
如您所见,垃圾邮件和非垃圾邮件类的所有概率都变得相同。这种极端的过度平滑会导致分类器变得过于保守,并失去根据观察到的特征值区分两个类的能力。因此,模型的性能会受到影响,并且与训练数据拟合不足。
总之,拉普拉斯平滑中非常大的 alpha 值会导致过度平滑,其中所有特征出现都被分配了相似的概率。这会导致欠拟合情况,即模型对观察到的数据变得不那么敏感,并且在泛化到新的、看不见的实例时表现不佳。
五、朴素贝叶斯的类型
**
5.1 高斯朴素贝叶斯:
当所有输入特征都是数值时,则使用高斯朴素贝叶斯。拉普拉斯加性平滑不适用于高斯朴素贝叶斯,因为对于任何输入特征,这里的概率永远不会为零。
5.2 . 分类朴素贝叶斯:
当所有输入特征都是分类的时,此时使用分类朴素贝叶斯。在本例中应用拉普拉斯加法平滑时,“n”表示特定输入列的唯一特征值或类别的数量。
5.3 多项式朴素贝叶斯:
多项式朴素贝叶斯是朴素贝叶斯算法的一种变体,专为文本分类问题而设计,其中特征表示文档中单词的频率或出现次数。它通常用于自然语言处理任务,例如情绪分析、垃圾邮件过滤、主题分类和文档分类。
在多项式朴素贝叶斯中,特征通常表示为术语频率(例如单词在文档中出现的次数)或 TF-IDF(术语频率-反向文档频率)值,该值同时考虑了文档中单词的频率及其在整个数据集中的稀有性。
让我们举个例子来理解多项式朴素贝叶斯。
上表表示 docID,该文档中出现了不同的单词。训练集包含四个不同的文档,根据单词,我们需要预测 docID 5 是否来自中国。现在应用基于计数的词袋,我将每个文档转换为词频表,其中列代表不同的单词,行代表每个文档。
现在对于文档 5,我们需要预测它是否是 c= 中国。
因此,对于上述预测,我们需要计算
,P(Yes |中文=3,北京=0,上海=0,澳门=0,东京=1,日本=1)和P(否 |中国=3,北京=0,上海=0,澳门=0,东京=1,日本=1)
假设,B=(中国=3,北京=0,上海=0,澳门=0,东京=1,日本=1)
P(是 |B) = P(是) * P(B |是)
P(是)= 3/4,
P(中文 |是的)= 5 + 1/8+6 = 6/14,这里在分子中加上 1,在分母中加上 6 表示拉普拉斯加法平滑,alpha=1 和 n=6,因为 n 表示不同单词的总数。
P(北京 |是)= 1+1/8+6 = 2/14
P(上海 |是) = 1+1/8+6 = 2/14
P(澳门 |是) = 1+1/8+6 = 2/14
P(东京 |是) = 0+1/8+6= 1/14
P(日本 |是)= 0+1/8+6= 1/14
同样,所有这些概率也是针对 No 选项计算的,
P(No) = 1/4
P(北京 |No)= 0+1/3+6 = 1/9
P(上海 |No) = 1+1/3+6 = 1/9
P(澳门 |No) = 0+1/3+6 = 1/9
P(东京 |No) = 1+1/3+6= 2/9
P(日本 |No) = 1+1/3+6= 2/9
P(中文 |否) = 1+1/3+6 = 2/9
P(是 |B) = 3/4 * (6/14)³ *1/14 * 1/14 = 0.0003
P(否 |B) = 1/4 * (2/9)³ * 2/9 * 2/9 = 0.0001
所以对于文档 5 来自中国,因为 P( 是 |B) > P(否 |B).
5.4 伯努利朴素贝叶斯
伯努利朴素贝叶斯常用于特征为二进制或布尔变量的场景。在伯努利朴素贝叶斯中,输入数据表示为二进制特征向量,其中每个特征表示特定属性的存在与否。例如,在文本分类中,每个特征都可以对应于文档中特定单词的存在与否。
让我们举个例子来理解伯努利朴素贝叶斯。
上表表示 docID,该文档中出现了不同的单词。训练集包含四个不同的文档,根据单词,我们需要预测 docID 5 是否来自中国。现在应用二进制词袋,我将每个文档转换为二进制词频表,其中列代表不同的单词,行代表每个文档。
现在对于文档 5,我们需要预测它是否是 c= 中国。
因此,对于上述预测,我们需要计算
,P(Yes |中文=1,北京=0,上海=0,澳门=0,东京=1,日本=1)和P(否 |中国=1,北京=0,上海=0,澳门=0,东京=1,日本=1)
假设,B=(中国=1,北京=0,上海=0,澳门=0,东京=1,日本=1)
P(是 |B) = P(是) * P(B |是)
P(是)= 3/4,
伯努利随机变量的概率由下式给出,
P(X=K) = PK + (1-P)(1-K)
P(中文=1 |是的) = 3 +1/3+2 =4/5 ,因为这里 K=1
和 P(X=1) = P*1 +0 = P ,P 表示概率为 1,我也对概率应用了拉普拉斯加法平滑。
P(北京=0 |是)= 2+1/3+2 = 3/5
P(上海=0 |是) = 2+1/3+2 = 3/5
P(澳门=0 |是) = 2+1/3+2 = 3/5
P(Tokyo=1 |是) = 0+1/3+2 = 1/5
P(日本=1 |是)= 0+1/3+2 = 1/5
同样,所有这些概率也是针对 No 选项计算的,
P(No) = 1/4
P(北京 =0|否)= 1+1/1+2 = 2/3
P(上海=0 |否) = 1+1/1+2=2/3
P(澳门=0 |否) = 1+1/1+2=2/3
P(东京=1 |否) = 1+1/1+2=2/3
P(日本=1 |No) = 1+1/1+2=2/3
P(中文=1 |否) = 1+1/1+2=2/3
P(是 |B) =3/4 *4/5 * 3/5 * 3/5 * 3/5 *1/5 *1/5 = 0.005
P(否 |B) = 1/4 * 2/3 * 2/3 * 2/3 * 2/3 * 2/3 * 2/3= 0.022
因此,对于文档 5 不是来自中国,因为 P( No| B) > P(Yes |B).
总之,朴素贝叶斯算法是一个强大而高效的概率分类器。它通过假设分布或应用变换来处理数值数据。数值稳定性通过使用对数概率来解决,拉普拉斯平滑用于处理零概率。平滑参数的选择会影响偏差-方差的权衡。