该文档涉及的组件

共同邻居计算 (CommonNeighborsBatchOp)

Java 类名:com.alibaba.alink.operator.batch.graph.CommonNeighborsBatchOp

Python 类名:CommonNeighborsBatchOp

功能介绍

共同邻居算法(Common Neighbors)是一种常用的基本图分析算法,可以计算两个节点所共有的邻居节点,
发现社交场合中的共同好友、以及在消费领域共同感兴趣的商品,进一步推测两个节点之间的潜在关系和相近程度。
适用于电商、社交等多种领域。

算法的输出有6列,前两列分别为两个节点的值,后面四列分别为共同邻居列表、共同邻居数量、Jaccard分数和Adamic分数。
Jaccard距离为 CommonNeighbors(a, b) / (size(a) + size(b) - CommonNeighbors(a,b))
Adamic Adar距离,首先计算每个节点的权重为 1/log(当前节点的邻居数量), Adamic Adar距离为两个节点的共同邻居的权重之和。

参数说明

名称 中文名称 描述 类型 是否必须? 取值范围 默认值
edgeSourceCol 边表中起点所在列 边表中起点所在列 String
edgeTargetCol 边表中终点所在列 边表中终点所在列 String
isBipartiteGraph 是否二部图 是否二部图 Boolean false
needTransformID 是否需要转换到ID 是否需要转换到ID Boolean true

代码示例

Python 代码

from pyalink.alink import *

import pandas as pd

useLocalEnv(1)

df = pd.DataFrame([["a1", "11L"],\
        ["a1", "12L"],\
        ["a1", "16L"],\
        ["a2", "11L"],\
        ["a2", "12L"],\
        ["a3", "12L"],\
        ["a3", "13L"]])

data = BatchOperator.fromDataframe(df, schemaStr="source string, target string")
CommonNeighborsBatchOp()\
    .setEdgeSourceCol("source")\
    .setEdgeTargetCol("target")\
    .setIsBipartiteGraph(False)\
    .linkFrom(data)\
    .print()

Java代码

import org.apache.flink.types.Row;

import com.alibaba.alink.operator.batch.BatchOperator;
import com.alibaba.alink.operator.batch.source.MemSourceBatchOp;
import com.alibaba.alink.testutil.AlinkTestBase;
import org.junit.Test;

import java.util.Arrays;
import java.util.List;

public class CommonNeighborsBatchOpTest {

	@Test
	public void testGraph() throws Exception {
		List<Row> rows = Arrays.asList(
			Row.of("a1", "11L"),
			Row.of("a1", "12L"),
			Row.of("a1", "16L"),
			Row.of("a2", "11L"),
			Row.of("a2", "12L"),
			Row.of("a3", "12L"),
			Row.of("a3", "13L")
		);

		BatchOperator inputdata = new MemSourceBatchOp(rows, "source string,target string");

		new CommonNeighborsBatchOp()
			.setEdgeSourceCol("source")
			.setEdgeTargetCol("target")
			.setIsBipartiteGraph(false)
			.linkFrom(inputdata)
			.print();
	}
}

运行结果

source target neighbors_list cn jaccards_score adamic_score
a2 a1 11L,12L 2 0.6667 2.3529
11L 12L a2,a1 2 0.6667 2.3529
13L 12L a3 1 0.3333 1.4427
16L 12L a1 1 0.3333 0.9102
16L 11L a1 1 0.5000 0.9102
a3 a2 12L 1 0.3333 0.9102
12L 11L a1,a2 2 0.6667 2.3529
11L 16L a1 1 0.5000 0.9102
12L 13L a3 1 0.3333 1.4427
a2 a3 12L 1 0.3333 0.9102
a1 a3 12L 1 0.2500 0.9102
12L 16L a1 1 0.3333 0.9102
a1 a2 11L,12L 2 0.6667 2.3529
a3 a1 12L 1 0.2500 0.9102