system: [SYSTEM]

user: 4. 数据分析模块设计 4.1. 疫情数据聚类统计 因为爬取的疫情源元数据在地区层面上较为分散，例如含有区/市、省/州，国家等层级，为了得到各层级的准确统计数据，则必须对整体数据按照不同层级进行聚类统计处理。并且考虑到疫情数据量巨大，且系统对数据处理效率上要求较高。因此系统选用了Spark [ 2 ] 作为大数据处理分析框架，Apache Spark是专为大规模数据处理而设计的快速通用的计算引擎。Spark，拥有Hadoop MapReduce所具有的优点；但不同于MapReduce [ 3 ] 的是——Job中间输出结果可以保存在内存中，从而不再需要读写HDFS，在内存计算下，Spark比Hadoop [ 4 ] 快许多。 4.2. 疫情预测 4.2.1. 疫情预测模型 SEIR [ 5 ] 是人工智能领域解决传染病预测等问题的重要数学模型。可通过研究传染病的传播速度，空间范围，传播途径，动态机制等问题，指导传染病的有效防治。基于传染病模型进行推广生成传染病动态模型，是开展理论定量研究的重要方法。本文引用的SEIR传染病模型，在人群划分和转换方面的关系如图3所示。 图3. SEIR模型关系图 该模型对易感者人数的控制如公式(1)所示： d S / d t = − [ ρ c β + ρ c q ( 1 − β ) ] S ( I   + θ E ) + λ S q (1) 公式(1)中q是隔离比， β 是感染的概率，c是接触率， ρ 是有效接触系数，通常是一个固定值为1， ρ c 是有效接触率。易感者的转化率分别为S、孤立的易感者S q 、孤立的潜在的E q 和潜在的E，为公式中(1)的 c q ( 1 − β ) 、 ρ c 的 q β ( 1 − q ) 和 ρ c β ( 1 − q ) 。考虑到非孤立感染者I和潜伏者E对易感者的影响，敏感者已经从隔离中释放出来，S q 重新转化为S， θ 是潜在感染者与感染者传播能力的比率。假设潜伏期的患者与那些已经表现出症状的患者具有相同的传染性，即 θ = 1 。 λ 是隔离释放率，其值为1/14，隔离持续时间为14天。 模型整体动力学方程构造如公式(2)所示： { d S / d t = − [ ρ c β + ρ c q ( 1 − β ) ] S ( I + θ E ) + λ S q d E / d t = ρ c β ( 1 − q ) S ( I + θ E ) − σ E d I / d t = σ E − ( δ I + α + γ I ) I d S q / d t = ρ c q ( 1 − β ) S ( I + θ E ) − λ S q d E q / d t = ρ c β q S ( I + θ E ) − δ q E q d H / d t = δ I I + δ q E q − ( α + γ H ) H d R / d t = γ I I + γ H H (2) 在公式(2)中， σ 为潜伏者向感染者的转化速率，取1/7(潜伏期为7天)， α 为病死率， δ I 是感染者的隔离速率， γ I 是感染者的恢复率。 δ q 是隔离潜伏者向隔离感染者的转化速率， γ H 是隔离感染者的恢复速率。 而在真正使用中发现，由于2月12日起，湖北省等地区改变新增确诊病例的统计方式，将临床诊断病例计入新增病例中，使得官方公布的新增病例大幅上升。统计方式的改变导致官方公布的数据高于原文献中的理论模型预测结果。考虑前后的统计方法不同，因此对模型参数进行适当修正。通过考虑部分非二次确诊病例的计入导致平均感染系数较低，以及总病例数增大导致接触系数增大，需要引入一种动态调整参数的方式，使用动态寻优后的修正SEIR 模型计算感染人数理论结果。 4.2.2. 参数寻优算法 差分进化算法(Differential Evolution， DE)又称微分进化算法，是一种求解最优化问题的进化算法。因为进化算法对于最优化问题的要求极少，所以被视为一种后设启发式算法。虽然后设启发式算法适用于多种最优化问题，但是并不保证可以找到全局最优解。 差分进化算法被使用在多维度实数编码的最优化问题。因为此算法不使用问题的梯度信息，故可解不可微分的最优化问题。也因此，差分进化算法可用于不连续的，噪声的，随着时间改变的最优化问题。 差分进化算法类似遗传算法，包含变异，交叉操作，淘汰机制。本质上说，它是一种基于实数编码的具有保优思想的贪婪遗传算法 [ 6 ]。而差分进化算法与遗传算法不同之处，在于变异的部分是随选两个解成员变量的差异，经过伸缩后加入当前解成员的变量上，因此差分进化算法无须使用几率分布产生下一代解成员 [ 7 ]。 算法的原理采用对个体进行方向扰动，以达到对个体的函数值进行下降的目的，同其他进化算法一样，差分进化算法不利用函数的梯度信息，因此对函数的可导性甚至连续性没有要求，适用性很强。同时，算法与粒子群优化有相通之处，但因为差分进化算法在一定程度上考虑了多变量间的相关性，因此相较于粒子群优化在变量耦合问题上有很大的优势。由于差分进化算法在连续域优化问题的优势已获得广泛应用，并引发进化算法研究领域的热潮。 DE差分进化算法经典的策略算子如公式(3)所示： v i = x i 1 + F × ( x i 2 − x i 3 ) (3) 公式(3)中x 1 、x 2 、x 3 是从当前种群中选择的三个个体，i表示第i个基因位，而F是一个量化因子，可用于控制新生个体与父代个体x 1 之间的差别。由于在DE算子中参考的父代个体较多，新产生的后代子个体与原有的父代个体之间的差别也较大，所以在全局搜索能力上有不俗的表现，经常被用于处理复杂优化问题，以避免算法陷入局部最优。 针对模型参数的动态优化问题，本文利用DE差分进化算法根据真实数据来对模型的参数进行动态优化，使模型得出的预测效果更符合实际发展情况。 具体算法步骤： Step1：初始化种群控制参数：种群规模pop_size，最大进化次数max_Iterate; { X i ( 0 ) | x i ， j L ≤ x i ， j ( 0 ) ≤ x i ， j U ; i = 1 ， 2 ， ⋯ ， N P ; j = 1 ， 2 ， ⋯ ， D } (4) 公式(4)中， X i 是第个i个体，j表示第j维。 x i ， j ( 0 ) = x i ， j L + r a n d ( 0 ， 1 ) ( x i ， j U − x i ， j L ) (5) 公式(5)中 X i ， j L 和 X i ， j U 分别为第i维的下界和上界，rand(0，1)表示在区间[0， 1]上的随机数。 Step2：随机初始化cn个类簇中心，并生成初始种群Chrom，对每个类簇中心使用公式(3)计算各样本的隶属度，以及用公式(3)计算每个个体的适应度值，其中 i = 1 ， 2 ， ⋯ ， pop_size ； Step3：设置进化迭代参数Iterate = 0； Step4：对种群Chrom进行选择、交叉、变异等遗传操作，对新产生的个体使用公式(4)、(5)计算cn个类簇中心，各样本的隶属度，并用公式(3)计算每一个体的适应度值 f i 。若 f i > F i ，则新个体替换旧个体；否则，以概率 P = exp ( ( F i − f i ) T ) 。接受新个体，抛弃旧个体； Step5：令Iterate = Iterate+1。若Iterate < max_Iterate，则转至Step4；否则执行Step6； Step6：令 T i = J ∗ T i − 1 。若 T i > T e n d ，则转至Step3；否则，执行Step7； Step7：输出最优解。 由此，得到cn个不同簇间疏散，同簇内密集的类簇。