You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Jaccard系数的网络链接预测:如何实现多次运行取平均AUC

修改方案

直接给你改好的代码,核心就是加个循环把整个预测流程跑1000次,把每次的AUC分数存起来最后算平均:

import random
import networkx as nx
from sklearn import metrics
from sklearn.metrics import roc_auc_score
import numpy as np  # 用来计算平均值,也可以用sum/len替代

# 初始化存储AUC分数的列表
auc_scores = []
# 重复执行1000次预测流程
for _ in range(1000):
    # 随机选取20%的边作为测试集
    proportion_edges = .2
    edge_subset = random.sample(G.edges(), int(proportion_edges * G.number_of_edges()))
    
    # 构建移除测试边后的训练图
    G_train = G.copy()
    G_train.remove_edges_from(edge_subset)
    
    # 用Jaccard系数做链接预测
    pred_jaccard = list(nx.jaccard_coefficient(G_train))
    score_jaccard, label_jaccard = zip(*[(s, (u,v) in edge_subset) for (u,v,s) in pred_jaccard])
    
    # 计算当前轮次的AUC并加入列表
    auc_jaccard = roc_auc_score(label_jaccard, score_jaccard)
    auc_scores.append(auc_jaccard)

# 计算并输出1000次结果的平均值
mean_auc = np.mean(auc_scores)
print(f"1000次预测的平均AUC分数:{mean_auc}")

关键修改说明

  • 把所有依赖的导入语句移到代码最顶部,避免循环内重复导入浪费资源
  • 新增auc_scores = []用来存储每一轮的AUC结果
  • 用for _ in range(1000):包裹整个预测流程,实现1000次重复执行
  • 每轮循环结束后把当前的AUC分数追加到列表中
  • 最后用numpy.mean()计算平均值,要是不想安装numpy,也可以用sum(auc_scores)/len(auc_scores)替代

内容的提问来源于stack exchange,提问作者Oscar Fernando CV

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 15:55:17