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 |
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()
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 |