1.介绍

分类是一种监督机器学习问题是,我们给观察值分配类标签。在本教程中,我们将学习一种快速而简单的分类方法:朴素贝叶斯分雷竞技app官网网站类器。

朴素贝叶斯分类器在文本分类问题上的表现尤为出色。一些被广泛采用的用例包括垃圾邮件过滤和欺诈检测。的垃圾邮件过滤基线是与朴素贝叶斯算法相关联的,从20世纪90年代开始。作为另一个例子,我们可以使用朴素贝叶斯分类器来猜测如果一个句子在一个未知的语言中谈论动物或不雷竞技app官网网站

首先,我们将研究这个分类器背后的理论,并理解它是如何工作的。掌握了基础知识后,我们将探讨如何提高分类性能。

2.朴素贝叶斯分类器

朴素贝叶斯分类器输入离散变量,输出每个候选类的概率分数。预测的类标签是概率分数最高的类标签。

它根据观察到的属性确定类标签的概率。假设每个特性都是独立的。类标签概率分数由贝叶斯定律计算:

\ [P (C |) = \压裂{P(\帽C)} {P (A)} = \压裂{P (A | C) (C)} {P (A)} \]

从技术上讲,贝叶斯定律计算条件概率P (C |),表示的概率C考虑到一个是观察到的。在这个公式,C表示一组可用的类标签n类和一个表示观察结果米属性:

\[A = {a_1, a_2,…], a_m} \]

对于每一个观察一个,我们将计算每个类标签的概率I = 1, 2,…n

\ [P(为C_i |) = \压裂{P (a_1,,…,a_m |为C_i) P(为C_i)} {P (a_1,,…,a_m)} \]

只有这样我们才能决定预定的班级为C_i,概率得分最高(为C_i |页)。我们将应用以下技巧来简化计算:

  • 由于每个属性都是条件独立的,我们可以直接将不同属性的条件概率相乘:

    \ [P (a_1,…,a_m |为C_i) = \ prod_ {j = 1} ^ {m} P (a_j |为C_i) \]

  • 的概率(一页)分母部分是常数。因此,我们可以在比较不同班级的分数时忽略它。

因此,我们可以通过比较简化公式的输出来确定类标签:

\ [P(为C_i |) \ propto \大(\ prod_ {j = 1} ^ {m} P (a_j |为C_i) \大)P(为C_i) \]

C \ boldsymbol {} _ {\ boldsymbol{我}}选择概率最大的类作为预测类。换句话说,我们称之为观察一个属于类为C_i

我们用于计算类概率的公式的有效性依赖于条件独立假设。如果两个特征编码相同的信息,朴素贝叶斯分类器将重复计算它们的效果,并得出错误的结论。

朴素贝叶斯分类器带来了另一个隐含假设。算法没有区别对待特征。所以,所有的特征对结果都有相同的影响。有时这种假设会导致过度简化。

在实践中,我们通过从训练集中提取统计信息来训练模型。利用频率表和可能性表的每一个特点的计算方便了过程:

由观察所得的频率表包括可能的特征值。似然表包含的是概率值,而不是不同类别的出现次数。使用这些表,我们通过乘法和比较操作来决定观察的类:

3.改进朴素贝叶斯分类性能的方法

朴素贝叶斯分类器模型的性能可以通过合作的方法或者根据数据集进行交叉验证。我们可以评估模型性能用一个合适的度量。在本节中,我们提出了一些提高朴素贝叶斯分类器模型性能的方法:

呈现由QuickLaTeX.com

我们需要记住,朴素贝叶斯是一个非常简单而优雅的分类算法。一些常用的方法在朴素贝叶斯情况下不起作用。

例如,首先想到的方法之一就是调优模型的超参数。然而,朴素贝叶斯分类器的参数集非常有限。根据实现的不同,有时类的数量是唯一的参数,在实践中,我们无法控制它。因此,超参数调优并不是提高朴素贝叶斯分类器精度的有效方法。

与所有机器学习算法一样,我们可以通过对数据集应用一些简单的技术,如数据预处理和特征选择,来增强朴素贝叶斯分类器。

数据预处理的一个主要步骤是处理缺失值。对于大多数模型来说,如何处理丢失的数据是一个重要的决定。然而,朴素贝叶斯分类器不受缺失值的影响。我们可以忽略它们,因为算法在模型构建和预测阶段分别处理输入特征。

3.1.删除相关特性

正如我们已经提到的,高度相关的特征在模型中被计算了两次。重复计算会导致高估这些功能的重要性。因此,朴素贝叶斯分类器的性能下降。

我们需要消除相关的特征并遵守独立功能的假设。为了检测和消除它们,我们可以使用相关矩阵来比较特征对。

或者,我们可以执行基于概率的特征选择。我们可以探索不同特征的组合概率,并尝试理解它们对输出变量的预测能力。

在Python中,我们可以使用Seaborn库绘制相关热图和集群图。假设我们的数据驻留在数据帧df中:

Import seaborn as SNS #计算相关相关= df.corr() #绘制热图SNS。热图(关联、xticklabels =相关性。列,yticklabels =相关性。列,annot = True)# plot the clustermap sns.clustermap(correlations, xticklabels=correlations.columns, yticklabels=correlations.columns, annot=True)

热图是我们用来可视化特征相关矩阵的常用工具。clustermap将相关性显示为一个层次聚集的热图。因此,读取集群映射来消除相关的特性是更容易的:

3.2.使用日志概率

很小的数相乘会得到更小的数。很难精确地存储和比较这些非常小的数字。在处理概率值时,我们会遇到这些问题。

为了避免处理非常小的数字,我们可以通过对概率值取对数来在对数概率空间内处理。

log函数将概率值从[0,1]范围映射到(-)\正, 0]范围。因此,对数概率值将是负的。实际概率值越小,对数函数会将其映射为一个较大的负值:

我们需要记住乘法运算在对数空间里变成了加法。对整个方程取对数,得到:

\[登录\大(P(为C_i |) \) \ propto \大(\ sum_ {j = 1} ^ {m}日志\大(P (a_j |为C_i)大)\ \大)日志\大(P(为C_i) \大)\]

这种映射方法之所以有效,是因为要在朴素贝叶斯中进行分类,我们需要知道哪个类的概率最大,而不是具体的概率是多少。取对数不会改变类标签概率分数的顺序。因此,我们仍然可以决定哪个类别的概率最高。

3.3.消除零观测问题

如果训练数据与测试集的频率分布不同,朴素贝叶斯分类器的性能较差。分类器特别受训练集中未表示的值的影响。

如果模型遇到训练集中不存在的分类特征,则将0的概率分配给新类别。这是非常危险的,因为0与其他特征的概率相乘将得到0。

即使我们使用对数概率,零观测问题仍然存在。因为日志(0)= - \正无穷,和\正将取消来自其他功能的所有有效信息。

我们需要检查这些情况,并采取措施,如果测试数据集有零频率问题。最著名的方法是使用拉普拉斯平滑。在这种技术中,当计算类的概率时,我们在分子和分母上都添加了一个参数。

例如,我们可以在计算类的概率时添加一个平滑参数(1):

\[P(C) |A) = \frac{P(A) |C) P(C) + 1}{P(A) + 1}\]

平滑参数确保概率值不为零。应用平滑技术将极小的概率估计赋给这样的零频率出现,因此,正则化朴素贝叶斯分类器。

3.4.处理连续变量

我们已经介绍了如何计算分类特征的概率值。但是,计算出现的次数等于某个值对实数不起作用。

一个简单的方法,以表示类别的实际数字是离散化。我们将间隔映射到类别标签。这样,我们就有了代表不同范围的标签。然后我们使用这些标签作为类别,并相应地计算概率。

一些朴素贝叶斯实现假设连续变量上的高斯分布。因此,朴素贝叶斯分类器使用的概率来自z表,该z表由观测值的均值和标准差推导而来。在这种情况下,最好检查任何数值变量的分布并相应地处理它们。

如果连续特征不服从正态分布,我们可以使用核密度估计等非参数方法对概率密度函数进行更真实的估计。我们不需要局限于正态分布。相反,我们需要适当地表示特性。

3.5.处理文本数据

文本数据集需要特殊的预处理步骤。删除停止字,通过切换到小写使字规范化,并应用阻止或词元化是常见的技术。

创造词语嵌入有助于我们理解哪些词语是一起使用的,哪些词语出现在同一个语境中。利用word2vec或者另一种嵌入算法可以更好地用向量表示单词。

后,处理文字的最佳实践文档帮助我们提高机器学习模型的性能。

3.6。重新训练模型

对于一些复杂的机器学习算法,从头开始训练模型需要很长时间。为此,提出了在线训练等改进模型的方法。对模型的再培训通常需要大量的资源。

然而,随着新数据的积累,我们可能需要重新训练模型:

  • 使用更大的数据集进行训练可以确保更好的模型泛化
  • 动态环境中数据变化的趋势
  • 在对抗的环境中,新的模式会形成

与大多数算法相反,重新训练朴素贝叶斯模型的速度非常快。该算法是计算效率的。它可以轻松地处理高维数据而不受诅咒的维度。具有高基数的分类特征也不会增加计算复杂度。因此,朴素贝叶斯分类器比其他分类方法执行得更快。

当新的数据可用时,我们可以很容易地重建模型。通过这种方式,我们可以检测数据集中的偏移或漂移。因此,我们保证模型的性能不会随着时间的推移而降低。

3.7。并行化概率计算

在建立朴素贝叶斯分类模型时,我们可以通过并行计算获得额外的性能。

由于独立假设,每个属性的概率都可以独立计算。因此,我们分别计算每个特征的概率。划分工作可以加快计算速度,使我们能够更容易地处理大型数据集。

3.8。使用小数据集

朴素贝叶斯分类器否认输入特征之间存在任何关系。因此,它只对输入特性和输出类标签之间的关系建模。与其他更复杂的算法相比,假设函数更简单。作为一个结果,训练阶段需要较少的数据。

此外,用有限的数据进行过度拟合的可能性较小。由于该模型忽略了特征之间的任何交互作用,它离创建一个高方差模型还差得很远。相反,它有很高的偏差。

3.9。整体方法

整体学习证明可以提高性能。常用的套袋、增压和叠加的集合方法将多个模型的结果结合起来生成另一个结果。对结果进行集成的主要目的是减小方差。

然而,我们已经知道朴素贝叶斯分类器具有低方差。所以,把它和其他分类器混在一起并没有什么帮助。不需要尝试集成方法来提高分类器的准确性。

3.10。使用作为生成模型

生成模型能够生成新的数据实例。例如,生成式对抗网络(generative adversarial networks, GAN)已被证明对合成数据集的生成非常有用。给定一个数据集,它会根据原始分布生成新的数据点。

朴素贝叶斯也是一种生成模型。它根据数据分布的特征来学习类。我们可以使用这个模型来创建一个新的虚拟数据集,该数据集遵循相同的概率分布。

4.结论

在本文中,我们研究了朴素贝叶斯分类器,它是一种非常健壮且易于实现的机器学习算法。

我们从概率原理开始。然后我们深入研究了如何在实践中训练和使用算法。最后,我们研究了提高分类性能的方法。

综上所述,我们已经看到一些提高分类器性能的常见做法并不适用于朴素贝叶斯分类器。概率方法有不同的挑战,需要特殊处理。不过,我们可以应用本文中讨论的方法来克服可能的性能问题。

这篇文章的评论已经关闭!