链路预测简单概述

社交网络可以用来描述现实社会中的实际网络,它包括人与人之间的社会关系,物种之间的捕食关系,科学研究中的合作关系等。大量研究已经表明在真实世界中各种不同社交网络具有许多共同的结构特征,例如小世界性质、无标度性、社团结构等。

   目前,社团发现算法已比较成熟,具体的算法有:GN算法、谱平算法、Kernighan-Lin算法等。

   社团划分方法也有很多。

   以下是《基于链路预测的微博用户关系分析》的一些学习笔记:

   微博用户之间形成了复杂的社交网络。在微博用户之间有各种影响因素,链路预测是微博用户关系分析的一种模型,该种方法引入了属性特征,构造了随机森林的链路预测模型,并将模型应用于新浪微博用户数据集,进行微博用户关系的训练预测。通过比较引入微博属性特征前后的预测性能以及特征的重要性分布,分析了各类特征对微博用户关系形成的影响。

  网络中的链路预测是指如何通过已知的网络结构等信息,预测网络中尚未产生连接的两个节点之间产生连接的可能性。网络中的顶点代表用户,边代表用户关系,链路预测问题正是对用户未来关系的分析。目前,社会网络链路预测模型主要发展为三大类:

 1)基于有监督学习的分类模型,如决策树、朴素贝叶斯、神经网络、SVM、KNN及集成方法中的bagging、boossting和随机森林等。

 2)概率模型,该模型主要是建立一组可调参数的模型,然后使用优化策略寻找最优的参数值,使模型能够达到最优,这时两个未连边的节点对的概率就是它们产生连边的条件概率。概率模型的构建方法有贝叶斯网络模型和马尔科夫网络关系模型等。

 3)线性代数方法,该方法是通过降阶相似矩阵来计算网络中节点之间的相似性。Kuegis等人利用图的邻接矩阵,并定义一个函数F使得两个时刻的邻接矩阵的差异性最小,这样就将链路预测问题转换成线性代数优化问题,之后再通过矩阵变换和降维的方法将问题转换为一维的最小二乘曲线拟合问题。

数据集的获取是通过中国爬盟的新浪微博用户关系数据集作为微博研究数据,数据使用之前要对数据进行清洗。社交网络可以用来描述现实社会中的实际网络,它包括人与人之间的社会关系,物种之间的捕食关系,科学研究中的合作关系等。大量研究已经表明在真实世界中各种不同社交网络具有许多共同的结构特征,例如小世界性质、无标度性、社团结构等。
该文章从网络拓扑结构特征(度特征、共同朋友特征、朋友总数特征、中介朋友特征、优先链接特征、Adamic-Adar特征、朋友评价特征、反向关系特征、邻居子图特征)、微博属性特征(用户的关注数、粉丝数、微博消息数、所在地)以及朋评价、邻居子图等特征分析了用户关系的影响构造出基于随机森林(Random Forest)的链路预测模型,最后分析了预测模型中各特征的Gini指标,获得了特征的重要性分布,从而验证了网络拓扑结构特征和微博属性特征对用户关系的影响。
链路预测相关 数据集 我收集了许多,同质信息网络,异质信息网络,有需要的可以联系,后续在放到下载里

还有相关对比算法有 CN AA RA COS katz JA等程序
——————————————————————————————————————

链路预测基础算法
在这里插入图片描述
https://download.youkuaiyun.com/download/xuptacm/84097883
链路预测数据集
https://download.youkuaiyun.com/download/xuptacm/84097756
在这里插入图片描述

异质信息网络链路预测数据集,节点形式
https://download.youkuaiyun.com/download/xuptacm/84096247

### 使用XGBoost进行链路预测的方法和实现 #### 方法概述 XGBoost是一种基于梯度提升决策树(GBDT)的机器学习算法,具有高效处理大规模数据的能力,并能有效应对分类和回归问题。在社交网络中的链路预测任务中,目标是通过已知的节点关系来推断未来可能形成的链接[^1]。 为了应用XGBoost于链路预测,通常需要以下几个方面的准备: - **特征提取**:从图结构中提取能够反映节点间潜在关联性的特征。这些特征可以包括共同邻居数、Adamic-Adar指数、Jaccard系数等。 - **标签构建**:定义正样本(存在连接的节点对)和负样本(不存在连接的节点对)。这一步骤对于训练模型至关重要。 - **模型调参**:调整超参数以优化性能指标,例如`max_depth`, `learning_rate`, 和`n_estimators`等。 #### 实现过程 以下是利用Python编程语言以及XGBoost库的一个简单示例代码片段展示如何完成上述流程: ```python import networkx as nx from sklearn.model_selection import train_test_split import xgboost as xgb from sklearn.metrics import roc_auc_score # 构建一个简单的无向图作为例子 G = nx.karate_club_graph() # 特征工程函数 (这里仅作示意, 可扩展更多复杂特性) def extract_features(G, node_pairs): features_list = [] for u,v in node_pairs: common_neighbors = len(list(nx.common_neighbors(G,u,v))) adamic_adar_index = sum([1 / log(len(list(G.neighbors(w)))) for w in set(G[u]).intersection(set(G[v]))]) jaccard_coefficient = len(set(G[u]) & set(G[v])) / float(len(set(G[u]) | set(G[v]))) features_list.append([common_neighbors, adamic_adar_index, jaccard_coefficient]) return np.array(features_list) # 创建边列表并随机采样一些未连通的节点对作为负样本 edges_pos = [(u,v) for u,v in G.edges()] nodes = list(G.nodes()) edges_neg = [] while len(edges_neg) < len(edges_pos): u,v = random.choice(nodes),random.choice(nodes) if ((u,v) not in edges_pos and (v,u) not in edges_pos): edges_neg.append((u,v)) # 合并正负样本集及其对应的标签 features_matrix = extract_features(G, edges_pos + edges_neg) labels_vector = [1]*len(edges_pos)+[0]*len(edges_neg) # 划分训练测试集合 X_train,X_test,y_train,y_test=train_test_split(features_matrix, labels_vector,test_size=0.25) dtrain=xgb.DMatrix(X_train,label=y_train) dtest=xgb.DMatrix(X_test,label=y_test) param={'objective':'binary:logistic','eval_metric':'auc'} bst=xgb.train(param,dtrain,num_boost_round=100) y_pred=bst.predict(dtest) print('AUC Score:',roc_auc_score(y_test,[round(value)for value in y_pred])) ``` 此脚本展示了基本的数据预处理步骤及XGBoost模型的实际运用情况。值得注意的是,在实际应用场景下还需要进一步探索更丰富的特征组合方式以及更加精细地调节各项参数设置以便获得更好的效果表现[^4]。 #### 结果评估 最终我们采用ROC-AUC分数衡量模型的表现优劣程度。该数值越接近于1表明我们的预测器区分能力越强;反之则较差。 ---
评论 18
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YULIU_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值