给定一个网络,如何利用svm进行链路预测,写出Python代码
时间: 2023-12-30 10:02:22 浏览: 162
python利用支持向量机SVM进行时间序列预测(数据+源码)
5星 · 资源好评率100%
链路预测是指在网络中预测两个节点之间是否存在边。支持向量机(SVM)是一种常用的机器学习算法,可以用于链路预测任务。
下面是一个使用Python和sklearn库实现SVM进行链路预测的示例代码:
```python
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import networkx as nx
import numpy as np
# 构建一个网络图
G = nx.karate_club_graph()
# 生成特征矩阵和标签矩阵
X = np.array([list(nx.jaccard_coefficient(G, e)) for e in nx.non_edges(G)])
y = np.array([int(G.has_edge(e[0], e[1])) for e in nx.non_edges(G)])
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 构建SVM模型
svm = SVC(kernel='linear', probability=True, random_state=42)
# 模型训练
svm.fit(X_train, y_train)
# 预测测试集
y_pred = svm.predict(X_test)
# 计算准确率
acc = accuracy_score(y_test, y_pred)
print('Accuracy:', acc)
```
这段代码中,我们先构建了一个Karate Club网络图,并使用NetworkX库计算了每条非边的Jaccard系数作为特征矩阵X。标签矩阵y则是根据边的存在与否生成的。然后我们用sklearn库的train_test_split函数将数据集划分为训练集和测试集,使用SVM模型进行训练和预测,并计算准确率。
阅读全文