(python实现)复杂网络中的关键节点识别测评四指标

本文介绍了使用Python进行复杂网络中关键节点识别的方法,包括SIR传播范围的改进,肯德尔相关系数计算,单调值分析法,以及平均最短路径算法的应用。通过对这些指标的分析,可以评估网络中节点的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.SIR传播范围

参考代码:Morty Ma
说明:

  1. 与Morty Ma代码的传播方式不同,换成了从感染节点向邻居传播而不是遍历整个图,把退出循环的条件改成,无感染节点时退出。
  2. Morty Ma代码每次按G.nodes()的顺序感染节点,且每次先recover,再感染,我换成成了先感染在恢复。(若按回复率1进行实验,某些节点还未传染就已恢复)
  3. 将代码写为了类
import random
import networkx as nx
import numpy as np
import pandas as pd
import os
'''
程序主要功能
输入:networkx网络图,感染源节点序列,感染率,免疫率,迭代次数step
输出:每次的迭代结果(I+R)/n
'''

class SIR:
    def __init__(self,G,source,beta,gamma,step):
        self.G = G.copy()
        self.beta = beta
        self.gamma = gamma
        self.step = step
        self.n = G.number_of_nodes()
        self.nodes = list(G.nodes())
        self.I_nubmer = len(source)
        self.S_number = self.n - self.I_nubmer
        self.R_number = 0
        self.I = source
        self.R = []
        self.S = list(set(self.nodes) - set(self.I))
        for i in self.nodes:
            self.G.nodes[i]['status'] = 'S'
        for i in source:
            self.G.nodes[i]['status'] = 'I'
            
    def setG(self,G):
        self.G = G.copy()
    
    def setBGS
### Python 机器学习文字识别教程实例 #### 数据预处理与加载 为了实现手写数字识别的任务,首先需要准备并加载数据集。假设使用的是类似于MNIST这样的标准手写数字数据集,可以通过`sklearn.datasets`模块获取。 ```python from sklearn.datasets import load_digits digits = load_digits() X, y = digits.data, digits.target ``` 这里使用的`load_digits()`函数会返回一个包含图像及其对应标签的对象。每幅图像是8×8像素大小,并已经被转换成特征向列的形式以便于后续处理[^3]。 #### 特征缩放 由于不同尺度的数据可能会影响某些类型的模型性能,在应用像支持向量机(SVM)或逻辑回归(Logistic Regression)之前通常要对数值型特征做标准化变换: ```python from sklearn.preprocessing import StandardScaler scaler = StandardScaler().fit(X) X_scaled = scaler.transform(X) ``` 此操作可以使得各个维度上的方差相等,从而提高许多梯度下降优化算法的效果以及一些距离度量方法的有效性[^2]。 #### 构建多层感知器(MLP) 接着定义一个多层感知机作为分类器来进行预测工作。在这个例子中采用两层隐藏层结构,激活函数选用ReLU(Rectified Linear Unit),并且设置合适的批量大小(batch size)和迭代次数(epoch number): ```python from sklearn.neural_network import MLPClassifier mlp = MLPClassifier(hidden_layer_sizes=(50,), max_iter=100, alpha=1e-4, solver='sgd', verbose=10, tol=1e-4, random_state=1, learning_rate_init=.1) mlp.fit(X_scaled, y) print("Training set score: %f" % mlp.score(X_scaled, y)) ``` 上述代码创建了一个具有单个隐含层(含有50个节点)的神经网络,并通过随机梯度下降法(sgd)对其进行训练。最后打印出训练集上得分情况以初步了解模型的表现。 #### 测试与评估 完成训练之后还需要验证该模型对于未知样本是否有良好的泛化能力。为此可以从原始测试集中分离一部分出来专门用来检验最终效果: ```python from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split( X_scaled, y, test_size=0.2, shuffle=True, random_state=1) mlp.fit(X_train, y_train) test_score = mlp.score(X_test, y_test) print(f'Test Set Score: {test_score:.6f}') ``` 这段程序将整个数据集合分成两个部分——70%用于训练而剩下的30%则留作独立评测之用。这样做的目的是为了避免过拟合现象的发生,确保所建立起来的模式能够适用于更广泛的情况之下[^1]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

篮砂石

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

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

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

打赏作者

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

抵扣说明:

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

余额充值