链接分析:PageRank算法
这一节的内容主要从矩阵的角度来进行图的分析和学习,我们可以将互联网看成一张巨大的图,里面的网页就是图中的一个个节点,而网页可以通过超链接可以跳转到别的网页,称为链接link,可以把这种关系作为图中的有向边,因此互联网中的网页构成一张大而稀疏的有向图,可以用一个邻接矩阵来表示。类似的结构有论文引用图等等。
但是图中每个节点并不都是同等重要的,可以通过一系列链接分析的方法来分析出不同节点的重要性,一般认为一个网站如果有很多链接,那么它往往就比较重要。而出链接和入链接又是两种不同的链接,又应该有不同的考虑。PageRank算法认为被重要的网页指向的网页也往往更重要。
PageRank算法模型
节点的权重
我们可以在网络图中定义
图中的随机游走
在任何一个时间t时假设访问到了网页i中,下一个时刻t+1则访问i指向的其中一个网页j,这样就构成了一次随机游走,用
如何求解PageRank
可以给pagerank赋予一定的初始值,然后通过公式
不断迭代直到r的变化小于一定的阈值之后才结束,得到最终的pagerank的结果,这种方法也就是幂法,求出的结果实际上是M的特征之中范数最大的那一个 问题在于:
- 有一些页面时dead end,没有跳转到其他网页的链接,这可能会导致“泄漏”
- Spider-Trap问题:所有的外部链接都在一个组内,即随机游走会陷入一个循环中
- 这些情况都会导致上述计算方法最后不收敛,因此要想办法解决这个问题
解决方法:
对于dead end问题,可以重新调整矩阵M中的内容:
对于Spider-Trap问题,可以在每次做选择的过程中以一定的概率跳转到随机的网页中去,这样就可以从循环中跳出来
- Google矩阵上面的spider-trap问题的迭代形式
个性化的PageRank
- 通过几个特定的节点来衡量所有节点的rank,可以用带restart的随机游走高效计算,这是考虑到了不同用户之间的浏览偏好往往不同,不能用全局的所有节点作为衡量标准,这样一来可以实现个性化的推荐
消息传递和节点分类
- 这一节内容主要关注对于一个给定的网络结构,一些节点已经做好了标注,那么我们如何对图中的剩余节点进行标准,就比如一张图中已知部分节点是可疑的,另一部分节点是可信的,那么我们应该如何判定剩下那些没有标注的节点是否可信呢?
- 这类任务被称为半监督的节点分类问题
- 之前已经介绍了节点嵌入的方法可以识别相似的节点,而这一节主要介绍的方法是消息传递
- 一般我们认为网络中的关系是具有相关性的,也就是说相似的节点会互相连接,并且相近的节点可能属于相同的类型
- 同质性Homophily:指的就是相同或者类似的节点个体会和其他的节点相互连接
- 影响:网络中的连接关系可能会影响到单个节点,即节点可能会被与之相互连接的节点给带偏
- 这样的半监督学习经常被用在:
- 文本分类
- 语音标记
- 连接预测
- 光学字符识别
- 图像和3D分割
- 节点异常检测
- 这一节内容将主要介绍三种实现上述半监督图学习的技术:
- 关系分类Relational classification
- 可迭代分类Iterative classification
- 信任传播Belief propagation
关系分类
关系分类的基本想法:节点v的类概率
- 其中A表示每条边的权重
- 问题在于:收敛是没有保证的,并且模型没有用到节点的特征信息
迭代分类
相比于关系分类,迭代分类会使用节点v的一系列特征构成的特征向量
通过节点的特征来预测节点的标签 通过特征向量和邻近节点的标记来共同预测节点的标签 训练两个分类器只是第一阶段,第二阶段需要进行迭代训练直到结果收敛或者训练结束,但是结果是否收敛依然没有保证。
举例:网页分类
- 首先训练一个基于二维特征向量的分类器,用邻近节点(区分出和入节点)的特征向量作为
- 然后按照步骤训练出两个分类器,然后用测试集来测试分类器的效果,并对关系特征
和标签进行更新 - 进行迭代更新,直到收敛或者达到次数上限
协作分类:信任传播机制
信任传播机制是一种动态规划算法,通过一个节点和节点之间互相“通信”和传递消息的迭代过程,当节点直接达到共识的时候就可以计算出最后的结果
一个简单的消息传播的例子
举一个简单的例子来说明消息传递的作用,比如我们需要在一个图中计算节点总数,并且每个节点只能和与之相邻的节点之间进行通信,简单的消息传递算法的实现如下:
- 定义节点的顺序形成一条完整的路径
- 每次向下一个节点来传播当前统计到的节点个数,最后一个节点要发送出去的数据就是结果
- 这样的算法也可以在树状的结构中进行,区别就是要从叶节点将信息汇总到根节点
循环消息传递算法
加入一个节点i指向j,那么i将会给j传递消息,而传递什么消息需要根据i从指向i的节点中获得的信息来决定,循环消息传递算法中定义了这样几个关键的变量:
标签势能矩阵,
表示对于一个节点j,如果给定它的邻居节点i属于类别 时,节点j属于类别 的概率 先验信任
表示节点i属于 类别的概率 i向j传递的消息可以记成
,这表示i估计j的最终类型是 在循环消息传递算法中,传递的消息可以表示为:
这种计算方式的意思是,如果i预测j的最终标签是
,那么就需要考虑节点i所有可能的标签,并且对于每一个标签计算节点i收到的信息是节点i属于类别 进行求和,我们可以记 - 是先验概率和所有从邻居节点收到消息的和的乘积
如果我们遇到的图是有环的,那么这样一来节点就不存在一个确定的顺序,但我们依然可以用上述算法来计算信任的传播。当有顺序的时候可以从任意一个节点开始,然后依次更新其邻居节点的信息,但是当图有环的时候,从不同的子图中获得的信息就不是独立的了,这个时候信任传递依然可以使用,但是会出现循环传递的情况,可能会导致不收敛的情况,但是在实际操作中,这个算法依然比较好用