我打算使用Graph Kernel在不同的计算机程序之间执行相似性度量。在编译计算机程序期间,它们被表示为某种形式的图形,如图中所示,带有控制流程。
该图摘自论文“使用基于图形的程序表征进行预测建模”
我打算使用Graph内核,为此我正在寻求帮助,了解如何使用包含特征向量(特定基本块的特征)的每个节点(基本块)对这些图进行编码(格式化),以便它们可以被送到内核来计算预先计算的矩阵。
答案 0 :(得分:2)
为非数字对象(如字符串或图形)定义的内核函数主要是针对此结构的避免编码而引入的。核心思想是直接在非数值空间的对象上计算内核值,就像本例中的图形一样。您的特定示例是标记的verticle图形的实例(边缘上没有标签),因此您可以简单地将图形内核用于此类结构。在Graph Kernels paper中,它被引入作为边标记结构,但从边标记到顶点标注的变化是非常自然的(和already done in other papers)。那么剩下的就是计算特定顶点v_i
和v_j
之间的相似性。在oridignal论文中,我们只需要一个矩阵W
(负责表达特定边缘标注的“相似性”),所以类似地,你可以计算顶点特征向量之间的某种相似性(有几种可能性,特定的一种选择是严重依赖数据,你可以尝试余弦相似度,汉明距离,MSE等),但核心思想保持不变。首先计算要在产品图中使用的顶点 - 顶点相似度矩阵,然后在数据上简单地应用相应的图形内核。这不是简单的解决方案,但我不认为存在简单(好)的解决方案。图形内核是非常年轻的对象(11年前推出),用于处理非常复杂的对象(您的特定问题是非常复杂的分类对象的一个很好的例子)。您应该记住,在图形上使用内核方法可能非常计算成本昂贵,因此使用一些更简单的模型可能更好一些(处理图形的一些简单功能)而不是整个“原始”数据)。