链路预测代码python
时间: 2023-10-13 11:09:39 浏览: 112
基于Python实现二分网络上的链路预测【100012489】
链路预测是网络分析中的一个常见任务,其目的是预测两个节点之间是否存在一条边。下面是一个基于 Python 的链路预测代码示例:
```python
import networkx as nx
import numpy as np
from sklearn.metrics import roc_auc_score, average_precision_score
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
# 加载网络数据
G = nx.read_edgelist('network.txt')
# 构造正负样本
edges = np.array(G.edges())
non_edges = np.array(list(nx.non_edges(G)))
num_samples = min(len(edges), len(non_edges))
edges = edges[np.random.choice(len(edges), num_samples, replace=False)]
non_edges = non_edges[np.random.choice(len(non_edges), num_samples, replace=False)]
# 构造特征
common_neighbors = []
for e in edges:
common_neighbors.append(len(set(G[e[0]]) & set(G[e[1]])))
for e in non_edges:
common_neighbors.append(len(set(G[e[0]]) & set(G[e[1]])))
X = np.array(common_neighbors).reshape((-1, 1))
# 构造标签
y = np.hstack((np.ones(num_samples), np.zeros(num_samples)))
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 训练模型
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
# 评估模型
y_pred = model.predict(X_test)
auc = roc_auc_score(y_test, y_pred)
ap = average_precision_score(y_test, y_pred)
print('AUC: {:.4f}'.format(auc))
print('AP: {:.4f}'.format(ap))
```
代码中,我们使用 `networkx` 库加载数据并构造网络对象 `G`。然后,我们随机选择一些边和非边作为正负样本,并计算这些样本的公共邻居数量作为特征。我们使用 `sklearn` 库中的 `train_test_split()` 函数将数据划分为训练集和测试集,并使用随机森林模型进行训练和评估。最后,我们输出模型的 AUC 和 AP 评估指标。
阅读全文