了解朴素贝叶斯


47

来自StatSoft,Inc.(2013),电子统计教科书,“朴素贝叶斯分类器”

在此处输入图片说明

为了演示朴素贝叶斯分类的概念,请考虑上图中显示的示例。如图所示,对象可以分类为绿色或红色。我的任务是在新案例到达时对其进行分类,即根据当前存在的对象确定它们所属的类别标签。

由于GREEN对象的数量是RED的两倍,因此有理由相信,新案例(尚未发现)具有成员资格GREEN的可能性是RED的两倍。在贝叶斯分析中,此信念称为先验概率。先前概率基于先前的经验,在本例中为GREEN和RED对象的百分比,通常用于预测结果实际发生的时间。

因此,我们可以这样写:

在此处输入图片说明

由于总共有60个对象,其中40个是GREEN和20 RED,因此我们获得类成员资格的先验概率为:

在此处输入图片说明 在此处输入图片说明

在确定了先验概率之后,我们现在就可以对新对象进行分类(白色圆圈)。由于对象很好地聚集在一起,因此可以合理地假设X附近的绿色(或红色)对象越多,则新案例属于该特定颜色的可能性就越大。为了测量这种可能性,我们在X周围画了一个圆,该圆包含与点的类别标签无关的多个点(将被优先选择)。然后,我们计算属于每个类标签的圆圈中的点数。由此我们计算出可能性:

在此处输入图片说明

从上面的插图中可以明显看出,给定GREEN的X的似然性小于给定RED的X的似然性,因为该圆包含1个GREEN对象和3个RED对象。从而:

在此处输入图片说明

在此处输入图片说明

尽管先验概率表明X可能属于GREEN(假设GREEN的数量是RED的两倍),但可能性则相反;X的类成员资格是RED(假设X附近的RED对象比GREEN多)。在贝叶斯分析中,通过使用所谓的贝叶斯规则(以托马斯·贝叶斯(Bayes)1702-1761牧师命名),将信息的两个来源(即先验概率和可能性)组合在一起形成后验概率,从而产生最终分类。

在此处输入图片说明

最后,由于X的类成员资格具有最大的后验概率,因此我们将其分类为RED。

这就是我数学理解的困难所在。

在此处输入图片说明

p(Cj | x1,x2,x ...,xd)是类成员资格的后验概率,即X属于Cj的概率,但为什么这样写呢?

计算可能性?

在此处输入图片说明

后验概率?

在此处输入图片说明

我从来没有上过数学,但是我对朴素贝叶斯的理解很好,我认为就这些分解方法而言,这让我感到困惑。有人可以帮助可视化这些方法以及如何以一种易于理解的方式将数学写出来吗?


12
(+1)我钦佩您提出问题的方式非常认真和清晰。
rolando2 2012年

2
@ rolando2:此问题的所有数字和几乎所有文本均来自statsoft.com/textbook/naive-bayes-classifier
Franck Dernoncourt,2016年

请按照如何参考他人撰写的材料来编辑此帖子,以明确归因于其他地方的材料
Scortchi-恢复莫妮卡

在Stack Exchange网站上,始终始终要求正确地引用直接报价。无论如何,遗漏很容易纠正;我已经这样做了。无需删除您的帐户-请重新考虑。
Scortchi-恢复莫妮卡

Answers:


50

我将从头开始进行整个Naive Bayes流程,因为对我来说不清楚你在哪里挂断电话。

P(class|feature1,feature2,...,featuren

P(A|B)=P(B|A)P(A)P(B)
P(class|features)=P(features|class)P(class)P(features)

P(features)P(class|features)classP(features)class

P(class|features)P(features|class)P(class)

P(class)

P(features|class)P(feature1,feature2,...,featuren|class)

P(feature1,feature2,...,featuren|class)=iP(featurei|class)

离散示例数据

示例:训练分类器

为了训练分类器,我们计算点的各种子集,并使用它们来计算先验概率和条件概率。

P(class=green)=4060=2/3 and P(class=red)=2060=1/3

feature1feature2

  • P(feature1=A|class=red)
  • P(feature1=B|class=red)
  • P(feature1=A|class=green)
  • P(feature1=B|class=green)
  • P(feature2=X|class=red)
  • P(feature2=Y|class=red)
  • P(feature2=X|class=green)
  • P(feature2=Y|class=green)
  • (以防万一,这是所有可能的要素值和类别对)

P(feature1=A|class=red)feature1P(feature1=A|class=red)=20/20=1P(feature1|class=red)=0/20=0P(feature1=A|class=green)=5/40=1/8P(feature1=B|class=green)=35/40=7/8feature2

  • P(feature1=A|class=red)=1
  • P(feature1=B|class=red)=0
  • P(feature1=A|class=green)=1/8
  • P(feature1=B|class=green)=7/8
  • P(feature2=X|class=red)=3/10
  • P(feature2=Y|class=red)=7/10
  • P(feature2=X|class=green)=8/10
  • P(feature2=Y|class=green)=2/10

那十个概率(两个先验加八个条件)是我们的模型

分类新示例

feature1feature2

P(class=red|example)P(class=red)P(feature1=A|class=red)P(feature2=Y|class=red)

P(class=red|example)131710=730
P(class=green|example)P(class=green)P(feature1=A|class=green)P(feature2=Y|class=green)

2/302/10

笔记

P(feature=value|class)通过为每个类别插入适当的均值和方差。其他分布可能更合适,具体取决于数据的详细信息,但是高斯将是一个不错的起点。

我对DARPA数据集不太熟悉,但是您基本上会做同样的事情。您可能最终会计算出诸如P(attack = TRUE | service = finger),P(attack = false | service = finger),P(attack = TRUE | service = ftp)之类的内容,然后将它们合并到与示例相同。附带说明一下,这里技巧的一部分是要提供良好的功能。例如,源IP可能会变得非常稀疏-给定IP可能只有一个或两个示例。如果对IP进行地理定位并使用“ Source_in_same_building_as_dest(true / false)”或某些功能代替,则可能会做得更好。

希望对您有所帮助。如果有任何需要澄清的地方,我很乐意再试一次!


3
当然。如果您还可以,我将编辑我的答案,以便有更多的空间(并且我可以LaTex东西)。
Matt Krause 2012年

1
我扩展了培训和测试部分,并将它们分成自己的部分。前几段内容相同...
Matt Krause 2012年

2
马特,这比我遇到的任何朴素贝叶斯的教科书定义都清晰得多。这可能是迄今为止我在此网站上看到的任何问题的最佳答案。
2013年

@Berkan,谢谢;非常感谢您(尽管还有很多其他很好的答案!)如果您有任何建议,我很乐意尝试解决!
Matt Krause

+ 1和stackoverflow.com/questions/10059594/…那里有类似的解释
Drey

6

DP(CjD)

P(CjD)=P(DCj)P(Cj)P(D), j=1,2,
jP(C1D)P(C2D),P(CjD)P(D)P(DCj)P(Cj)P(DCj)P(Cj)P(D)CjP(CjD)P(DCj) P(Cj)
P(CjD)P(DCj)P(Cj).
D(x1,x2,,xd)Cj)
P(DCj)=P(x1,x2,,xdCj)=P(x1Cj)P(x2Cj)P(xdCj)=1=1dP(xiCj)

1

朴素贝叶斯模型背后的主要假设是,给定类时,每个特征(x_i)有条件地独立于所有其他特征。这种假设使我们能够将可能性写为简单乘积(如您所示)。

这也是帮助朴素贝叶斯模型在实践中很好地推广的原因。考虑训练阶段:如果我们不做这个假设,那么学习将涉及估计一个复杂的高维分布:p(x1,x2,...,xn,c),其中所有特征都联合分布。相反,我们可以通过估计p(x1,c),p(x2,c),...,p(xn,c)进行训练,因为知道值c会使所有其他特征的值不相关(它们提供了没有有关x_i的其他信息)。

我不知道一种可视化此方法的好方法(除了标准的图形模型符号外),但是要使其更加具体,您可以编写一些代码来学习Naive Bayes模型(您可以在此处获取一些示例数据)。训练和测试。现在删除条件独立性假设并修改代码。训练,测试并与以前的模型进行比较。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.