仅使用网络的贝叶斯分类器伪代码

13

我正在尝试使用 igraph python 实现用于单变量网络数据的分类工具包。

然而,我的问题实际上更多地涉及关系分类领域的算法问题,而不是编程问题。

我正在参照《Classification in Networked Data》一文。

我很难理解这篇论文中提到的“仅网络贝叶斯分类器”(NBC),这是该论文中解释的关系分类器之一。

我之前使用词袋特征表示为文本数据实现了朴素贝叶斯分类器。而且,在我脑海中,对于文本数据的朴素贝叶斯的想法很清晰。

我认为这种方法(NBC)是将相同的想法简单地翻译成关系分类领域的。但是,我对方程式中使用的符号感到困惑,因此无法弄清楚发生了什么。我还对文章中使用的符号有一个问题 here

NBC在该论文的第14页有解释。

enter image description here

摘要:

我需要解释《论文》第14页中“仅网络贝叶斯分类器”(NBC)的伪代码。

伪代码符号说明:

  1. 称列表中的顶点为vs。长度为len(vs),第i个顶点为vs[i]
  2. 假设我们有一个单变量和二进制场景,即vs[i].class01,并且没有其他给定节点特征。
  3. 假设我们先运行了一个本地分类器,以便每个节点都有一个初始标签,这些标签由本地分类器计算得出。我只对关系分类器部分感兴趣。
  4. 将要预测的顶点称为vv.neighbors()是与v相邻的顶点列表。
  5. 假设所有边缘权重都为1

现在,我需要以下伪代码:

def NBC(vs, v):
   # v.class is 0 or 1
   # v.neighbors is list of neighbor vertices
   # vs is the list of all vertices

   # This function returns 0 or 1

编辑:

为了让你的工作更轻松,我做了这个example。我需要最后两个方程式的答案。


1
问题提得很好。我会关注它的进展(即使没有实际答案 ;))。 - WestCoastProjects
1个回答

3

用语言描述...

节点x_i属于类别c的概率等于:

  • 如果x确实属于类别c,那么它的邻域(称为N_i)的概率;乘以...
  • 类别c本身的概率;除以...
  • x_i节点的邻域N_i本身的概率。

就邻域N_ix_i的邻域)如果x属于类别c的概率而言,它等于:

  • 某种概率的产品; (哪种概率?)
  • 如果x确实属于类别c,则某个邻域(N_i)中的某个节点(v_j)属于类别c的概率
    • (提高正在检查的节点和正在分类的节点之间连接的边缘权重...但你现在不感兴趣...). (我认为符号有点问题,为什么他们定义了v_j然后从未使用它?...无论如何).
  • 最后,将某些概率的乘积1/Z相乘。为什么?因为所有的p都是概率,因此都在0到1的范围内,但权重w可以是任何值,这意味着最终计算出的概率可能超出范围。

  • 给定其邻域的证据,某个x_i属于类别c的概率是一个后验概率。(在某事之后...这是什么?...请见下文)

  • 如果x_i属于类别c,邻域N_i出现的概率是似然度

  • 类别c本身的概率是先验概率。在某事之前...这是什么?证据。先验概率告诉你在没有任何证据的情况下类别的概率,但后验概率告诉你一个特定事件(即x_i属于c)在其邻域的证据下发生的概率。

“先验概率”可以是主观的,即通过有限的观察得出或者是一个知情的意见。换句话说,它不一定是一个总体分布,只需要足够准确,而不是绝对已知。

“似然度”则更具挑战性。虽然我们在这里有一个公式,但是必须从足够大的人群或尽可能多的“物理”知识中估计出似然度的值。

在表达“似然度”的第二个方程中的乘积(大写字母Pi)中,有一个条件式。条件式是指当x属于类别c时,邻居节点属于某个类别的概率。

朴素贝叶斯分类器的典型应用中,即文档分类(例如垃圾邮件),条件给定其正文中特定单词的外观,一封电子邮件是垃圾邮件是通过大量观测数据或我们确实知道它们属于哪个类别的大量电子邮件派生出来的。换句话说,我必须知道垃圾邮件的外观,并且最终,大多数垃圾邮件会收敛到具有某些共同主题的内容(例如:我是银行官员,我有一个赚钱机会,请给我您的银行详细信息,我将向您汇款并让您致富...)。
没有这种知识,我们无法使用贝叶斯规则。
所以,回到您的具体问题。在您的PDF中,在乘积的推导中有一个问号。
没错。
因此,这里真正的问题是:您的图/数据的似然度是什么?

(...或者你将从哪里获得它?(显然,要么是大量已知观察结果或者对该现象的一些了解。例如,如果一个节点的邻域中有一定比例的感染节点,那么该节点被感染的可能性是多少)。

我希望这可以帮到你。


谢谢您的回答,很有帮助。不过,我实际上正在寻找“伪代码”。 - Sait

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接