Naive Bayes Classification
Motivation
机器学习中反复出现的问题是需要将输入分类为一些预先存在的类。 请考虑以下示例。
假设我们想要对我们发现的随机水果进行分类。 在这个例子中,我们有三个现有的水果类别:苹果,蓝莓和椰子。 这些水果中的每一种都有三个我们关心的特征:大小,重量和颜色。 该信息如图1所示。
我们观察到我们发现的那块水果,并确定它的大小适中,它很重,而且是红色的。 我们可以将这些特征与我们已知类的特征进行比较,以猜测它是什么类型的水果。 未知的水果像椰子一样沉重,但它与苹果类有更多的特征。 未知的水果与苹果类共享3个特征中的2个,所以我们猜测它是一个苹果。 我们使用了这样一个事实:随机水果的大小适中,红色像苹果一样让我们猜测。
这个例子有点傻,但它突出了一些关于分类问题的基本要点。 在这些类型的问题中,我们将未知输入的特征与我们数据集中已知类的特征进行比较。 朴素贝叶斯分类是这样做的一种方式。
What is it?
朴素贝叶斯是一种分类技术,它使用我们已知的概率来确定如何对输入进行分类。 这些概率与现有类及其具有的功能有关。 在上面的例子中,我们选择最类似于我们输入的类作为其分类。 该技术基于贝叶斯定理。 如果您不熟悉贝叶斯定理,请不要担心! 我们将在下一节中解释它。
Bayes’ Theorem
贝叶斯定理[方程1]是一个非常有用的结果,它出现在概率论和其他学科中。
通过贝叶斯定理,我们可以检验条件概率(事件发生的概率,发生另一个事件)。 P(A | B)是事件A发生的概率,因为事件B已经发生。 我们可以使用我们知道的有关事件A和B的其他信息来确定这个值。我们需要知道P(B | A)(事件B发生时事件B将发生的概率),P(B)(概率) 事件B将发生)和P(A)(概率事件A将发生)。 我们甚至可以将贝叶斯定理应用于机器学习问题!
Naive Bayes
朴素贝叶斯分类使用贝叶斯定理和一些额外的假设。 我们要假设的主要是功能是独立的。 假设独立性意味着给定特定类别时出现的一组特征的概率与给定该类别时出现的每个特征的所有概率的乘积相同。 在我们上面的水果例子中,红色不会影响中等大小的可能性,因此假设颜色和大小之间的独立性很好。 在特征可能具有复杂关系的现实问题中通常不是这种情况。 这就是为什么“天真”的名字。 如果数学看起来很复杂,不要担心! 代码将为我们处理数字运算。 请记住,我们假设功能彼此独立以简化计算。
在这种技术中,我们采取一些输入并计算它发生的概率,因为它属于我们的一个类。 我们必须为每个班级做这个。 在我们拥有所有这些概率之后,我们只取一个最大的概率作为我们对输入属于哪个类的预测。
Algorithms
以下是一些用于朴素贝叶斯分类的常用模型。 我们根据它们使用的特征分布类型将它们分成两个一般情况:连续或离散。 连续意味着实值(您可以有小数答案)而离散意味着计数(您只能有整数答案)。 还提供了每种算法的相关代码片段。
Gaussian Model (Continuous)
高斯模型假设特征遵循正态分布。 就您所知,正态分布只是一种特定类型的概率分布,其中值往往接近平均值。 正如您在图2中看到的那样,正态分布图具有钟形。 价值最常见于情节的高峰附近,往往越远越远。 这是另一个重要的假设,因为许多功能不遵循正态分布。 虽然这是事实,假设正态分布使我们的计算变得更加容易。 当特征不计数时我们使用高斯模型并包括小数值。
相关代码可在gaussian.py文件中找到。
在代码中,我们尝试从给定的RGB百分比中猜测颜色。 我们创建一些数据来处理每个数据点代表RGB三元组的位置。 三元组的值是从0到1的小数,每个都有一个与之关联的颜色类。 我们创建一个高斯模型并将其与数据拟合。 然后,我们使用新输入进行预测,以查看应将其分类为哪种颜色。
Multinomial Model (Discrete)
当我们使用离散计数时,使用多项模型。 具体来说,我们想要在计算特征出现的频率时使用它们。 例如,我们可能想要计算此页面上“计数”一词的出现频率。 图3显示了我们可能与多项模型一起使用的数据类型。 如果我们知道计数只是两个值中的一个,我们应该使用伯努利模型。
multinomial.py文件中提供了相关代码。
代码基于我们的水果示例。 在代码中,我们尝试从给定的特征中猜出水果。 我们创建了一些数据来处理每个数据点是三重表示水果的特征,即大小,重量和颜色。 三元组的值是从0到2的整数,每个都有一个与之相关的水果类。 整数基本上只是与特征相关的标签,但使用它们而不是字符串允许我们使用多项式模型。 我们创建一个Multiomial模型并将其与数据相匹配。 然后,我们使用新输入进行预测,以查看应将其分类为哪种水果。
Bernoulli Model (Discrete)
当我们使用离散计数时,也会使用伯努利模型。 与多项式案例不同,我们在这里计算一个特征是否发生。 例如,我们可能想要检查此页面上是否显示“count”一词。 当功能只有2个可能的值(如红色或蓝色)时,我们也可以使用伯努利模型。 图4显示了我们可能与伯努利模型一起使用的数据类型。
bernoulli.py文件中提供了相关代码。
在代码中,我们根据它具有的某些特征,尝试猜测某些东西是否是鸭子。 我们创建了一些数据来处理每个数据点是表示特征的三元组:像鸭子一样走路,像鸭子一样说话,而且很小。 对于真或假,三元组的值为1或0,并且每个都是鸭子或鸭子。 我们创建一个伯努利模型并将其与数据相匹配。 然后,我们使用新输入进行预测,以查看它是否是鸭子。
Conclusion
在本单元中,我们了解了朴素贝叶斯分类。 朴素贝叶斯分类允许我们基于现有类和特征的概率对输入进行分类。 如代码所示,您不需要大量的Naive Bayes训练数据就可以使用。 另一个好处是速度,它可以派上用场进行实时预测。 我们做了很多假设来使用朴素贝叶斯,所以结果应该用一粒盐。 但是,如果您没有太多数据并且需要快速结果,Naive Bayes是分类问题的不错选择。