2025亚太中文赛B题完整论文+数据:疾病预测与大数据分析
摘要本文针对中风、心脏病和肝硬化三种高致死率疾病,基于提供的stroke.csv、heart.csv和cirrhosis.csv数据集,通过数据预处理、统计分析与可视化挖掘影响患病概率的关键因素,构建单疾病患病概率预测模型并进行检验与改进,分析三种疾病的共同特征和共病情况以建立共病概率预测模型,最终依据研究结果向世界卫生组织提出预防建议和措施。针对问题一,该问题要求对三种疾病数据集进行数据预处理、
2025亚太中文赛B题完整论文:疾病预测与大数据分析,完整内容见文末名片
摘要
本文针对中风、心脏病和肝硬化三种高致死率疾病,基于提供的stroke.csv、heart.csv和cirrhosis.csv数据集,通过数据预处理、统计分析与可视化挖掘影响患病概率的关键因素,构建单疾病患病概率预测模型并进行检验与改进,分析三种疾病的共同特征和共病情况以建立共病概率预测模型,最终依据研究结果向世界卫生组织提出预防建议和措施。
针对问题一,该问题要求对三种疾病数据集进行数据预处理、统计分析和可视化,并分析影响患病概率的因素。此问题是后续所有分析和建模的基础,高质量的数据和准确的影响因素识别对后续模型构建至关重要。首先对数据进行预处理,对于缺失值,采用自注意力增强的生成对抗网络(MissGAN ATT),在生成对抗网络框架中引入自注意力机制,动态捕捉特征间关联权重,有效降低填充误差;对于异常值,运用自适应阈值孤立森林 LOF(AT IForest LOF),先通过孤立森林快速筛查潜在异常,再用局部离群因子进行验证,并基于核密度估计动态调整异常阈值,提高异常检测准确性;对分类变量进行编码,无序分类变量采用独热编码,有序分类变量采用标签编码。接着进行统计分析与影响因素识别,采用SHAP NOTEARS因果推断模型,先用LightGBM构建疾病预测模型,通过TreeSHAP算法计算特征重要性筛选关键特征,再用NOTEARS算法学习有向无环图挖掘因果关系。最后通过箱线图、因果路径图和热力图等进行可视化分析。
针对问题二,要求分别选取合适的特征指标,建立三种疾病患病概率的预测模型,并进行模型准确性检验、灵敏度分析和模型改进。准确的单疾病预测模型是共病概率预测的基础,也是评估疾病风险的重要工具。首先进行特征工程与增强,采用对比学习深度森林(CL DF),在深度森林框架中引入对比学习模块,通过数据增强生成鲁棒特征表示,提升小样本下的特征鲁棒性。然后处理类别不平衡问题,使用标签平滑条件生成对抗网络(LS CGAN),在条件生成对抗网络中引入标签平滑与自适应阈值调整,生成符合病理逻辑的少数类样本,提高少数类召回率。接着进行预测不确定性评估,采用蒙特卡洛dropout灵敏度分析(MC AFP),在模型训练中引入蒙特卡洛dropout,通过多次随机前向传播量化预测不确定性。最后从AUC ROC、F1 score和校准曲线等方面对模型进行评估。
针对问题三,需要综合分析三种疾病的共同特征和共病情况,建立数学模型预测同时患有其中任意两种和同时患有三种疾病的概率。共病概率预测对于制定综合的疾病预防和治疗策略具有重要意义。构建多任务图神经网络 Copula融合模型(MT GNN Copula),首先基于共同特征和疾病构建异构图,特征 疾病边权重基于SHAP值确定,疾病 疾病边权重基于互信息计算。然后通过图卷积网络(GCN)学习节点嵌入,聚合邻域信息,更新节点嵌入。接着用逻辑回归模型估计单疾病边缘分布概率,通过高斯Copula函数建模疾病间的非线性依赖关系,结合边缘分布计算联合分布,进而得到共病概率。同时还构建了多任务变分自编码器(MT VAE),复用特征提取模块,将三种疾病标签作为多任务目标,学习疾病共享表征并减少参数。通过计算预测共病频数与真实频数的相对误差对模型进行验证。
针对问题四,要求根据数学模型和数据分析的结果,给世界卫生组织写一封信,提出预防建议和措施。这是将研究成果转化为实际应用,为全球疾病预防工作提供参考的关键环节。首先提炼关键发现,包括单疾病因果风险因素、共病高危人群和可干预因素优先级。然后制定分层预防建议,针对普通人群、高危人群和已患病人群分别提出一级、二级和三级预防措施。最后从成本效益、文化适应和政策衔接等方面进行可行性论证,确保建议具有可操作性和推广性。
最后,对本文所建立的模型进行全面评价。模型在数据预处理、单疾病预测、共病预测等方面具有较高的准确性和可靠性,能够为疾病预防和管理提供有力支持。但也存在一些局限性,如模型对数据质量依赖较高,在数据缺失严重或异常值较多的情况下性能可能下降;部分模型计算复杂度较高,实际应用中可能需要进一步优化。未来可从引入更多数据源、优化模型结构和降低计算复杂度等方面进行改进。同时,模型在其他疾病研究领域也具有一定的推广应用可能性。
关键词:疾病预测;数据预处理;影响因素;共病概率;预防建议;机器学习模型
模型假设
- 数据分布一致性假设:缺失数据的分布与完整数据一致( Missing at Random,MAR),即缺失概率仅与已观测特征相关(如“老年患者更可能缺失BMI数据”,可通过年龄、血糖等已观测特征预测BMI);
- 异常值局部稀疏假设:异常样本在特征空间中具有“孤立性”(路径长度短)和“局部低密度”(与近邻样本差异大),需结合两种特性识别多变量异常;
- 因果结构可识别假设:特征与疾病间的因果关系可用有向无环图(DAG)表示,且无未观测混淆变量(即不存在影响两个以上特征的隐藏变量)。
核心变量定义
- 输入数据:含缺失值的特征矩阵 X∈Rn×d\mathbf{X} \in \mathbb{R}^{n \times d}X∈Rn×d(nnn为样本量,ddd为特征维度),缺失掩码 M∈{0,1}n×d\mathbf{M} \in \{0,1\}^{n \times d}M∈{0,1}n×d(Mij=1M_{ij}=1Mij=1表示XijX_{ij}Xij缺失,Mij=0M_{ij}=0Mij=0表示已观测);
- 生成器:G:(X∗obs,M)→X∗fillG: (\mathbf{X}*{\text{obs}}, \mathbf{M}) \rightarrow \mathbf{X}*{\text{fill}}G:(X∗obs,M)→X∗fill,输入已观测特征 X∗obs=X⊙(1M)\mathbf{X}*{\text{obs}} = \mathbf{X} \odot (1\mathbf{M})X∗obs=X⊙(1M)(⊙\odot⊙为逐元素乘法)和缺失掩码 M\mathbf{M}M,输出填充后的完整矩阵 X∗fill\mathbf{X}*{\text{fill}}X∗fill;
- 判别器:D:(Xfill,M)→[0,1]D: (\mathbf{X}_{\text{fill}}, \mathbf{M}) \rightarrow [0,1]D:(Xfill,M)→[0,1],判断填充后的数据是否为真实分布;
- 自注意力模块:输入特征矩阵 H∈Rn×d\mathbf{H} \in \mathbb{R}^{n \times d}H∈Rn×d,输出加权特征 Attention(H)∈Rn×d\text{Attention}(\mathbf{H}) \in \mathbb{R}^{n \times d}Attention(H)∈Rn×d,权重反映特征间关联强度;
- 路径长度(IForest):h(x)h(x)h(x),孤立森林中样本xxx被随机划分至孤立所需的平均路径步数,异常样本h(x)h(x)h(x)较小;
- 局部离群因子(LOF):LOF(x)\text{LOF}(x)LOF(x),样本xxx的局部密度与近邻样本局部密度的比值,LOF(x)>1\text{LOF}(x) > 1LOF(x)>1表示xxx为异常;
- SHAP值:ϕi\phi_iϕi,特征iii对模型输出的平均贡献度,反映特征的预测重要性;
- 邻接矩阵:θ∈Rd×d\theta \in \mathbb{R}^{d \times d}θ∈Rd×d,θijeq0\theta_{ij} eq 0θijeq0表示存在从特征iii到特征jjj的因果边,θij=0\theta_{ij}=0θij=0表示无因果关系。
约束条件
- 数据范围约束:填充后的临床指标需符合医学常识(如BMI∈[15, 50] kg/m²,血糖∈[40, 300] mg/dL),生成器输出后通过Sigmoid或线性变换映射至合理区间;
- 异常值比例约束:异常值剔除比例≤10%,防止过度剔除导致样本量不足(尤其小样本数据集如stroke.csv仅5110条样本);
- 因果结构约束:因果图(DAG)需满足无环性(不存在特征A→B且B→A的循环因果),且核心因果路径需符合临床病理机制(如“动脉硬化→心脏病”而非反向)。
数学模型推导过程
(一)自注意力增强的生成对抗网络(MissGANATT):缺失值填充
1. 传统GAN框架的局限性传统生成对抗网络(GAN)通过生成器GGG和判别器DDD的对抗训练学习数据分布,但无法直接处理含缺失值的数据。生成器仅依赖随机噪声和已观测特征,忽略特征间的非线性依赖(如肝功能指标中白蛋白与胆红素的负相关关系:白蛋白降低通常伴随胆红素升高,传统填充方法可能独立处理两者,导致填充值违背临床病理逻辑),导致填充值物理意义不合理。
2. 自注意力机制的引入为捕捉特征间动态关联,在生成器中嵌入自注意力模块,通过计算特征间的“关联权重”动态分配贡献度:
构造查询(Q)、键(K)、值(V)矩阵:对生成器中间层输出的特征矩阵 H∈Rn×d\mathbf{H} \in \mathbb{R}^{n \times d}H∈Rn×d(nnn为样本数,ddd为特征数),通过线性变换生成Q、K、V矩阵。其中,Q(查询矩阵)用于“询问”其他特征的信息,K(键矩阵)用于“匹配”查询内容,V(值矩阵)是实际用于加权聚合的特征值。具体变换公式为:
Q=HWQ\mathbf{Q} = \mathbf{H} \mathbf{W}_QQ=HWQ
K=HWK\mathbf{K} = \mathbf{H} \mathbf{W}_KK=HWK
V=HWV\mathbf{V} = \mathbf{H} \mathbf{W}_VV=HWV
其中 WQ,WK,WV∈Rd×dk\mathbf{W}_Q, \mathbf{W}_K, \mathbf{W}_V \in \mathbb{R}^{d \times d_k}WQ,WK,WV∈Rd×dk 为可学习参数(dkd_kdk为注意力维度,通常取dk=d/8d_k=d/8dk=d/8以降低计算量,平衡模型复杂度与关联捕捉能力)。
计算注意力权重:特征iii对特征jjj的注意力权重反映jjj对iii的影响强度,通过缩放点积注意力计算。点积注意力的核心思想是:Q与K的内积衡量特征间的相似度(内积越大,相似度越高),再通过softmax归一化得到权重,最后与V加权求和得到输出。
具体公式为:
Attention(Q,K,V)=softmax(QKTdk)V\text{Attention}(\mathbf{Q}, \mathbf{K}, \mathbf{V}) = \text{softmax}\left( \frac{\mathbf{Q} \mathbf{K}^T}{\sqrt{d_k}} \right) \mathbf{V}Attention(Q,K,V)=softmax(dkQKT)V
缩放原因:当dkd_kdk较大时,QKT\mathbf{Q} \mathbf{K}^TQKT的元素值可能因高维空间内积放大而过大,导致softmax函数梯度消失(softmax在输入值较大时梯度接近0)。除以dk\sqrt{d_k}dk可将内积结果的方差归一化到1(因Q\mathbf{Q}Q和K\mathbf{K}K的元素均服从均值0、方差1的分布,内积的方差为dkd_kdk,除以dk\sqrt{d_k}dk后方差为1),确保梯度稳定。
softmax作用:将权重归一化至[0,1]区间,确保权重之和为1,便于解释“特征贡献占比”(如权重0.8表示某特征对目标特征的贡献占80%)。
3. MissGANATT完整模型
生成器结构:输入已观测特征X∗obs\mathbf{X}*{\text{obs}}X∗obs(维度n×dn \times dn×d)和缺失掩码M\mathbf{M}M(维度n×dn \times dn×d),经全连接层提取初步特征(维度n×2dn \times 2dn×2d),送入自注意力模块捕捉特征间非线性关联(输出维度n×2dn \times 2dn×2d),再通过输出层(含医学范围约束的激活函数)生成缺失值X∗miss\mathbf{X}*{\text{miss}}X∗miss(维度n×dmissn \times d_{\text{miss}}n×dmiss,dmissd_{\text{miss}}dmiss为缺失特征数),最终拼接已观测特征和生成的缺失特征,得到完整样本X∗fill=[X∗obs,Xmiss]\mathbf{X}*{\text{fill}} = [\mathbf{X}*{\text{obs}}, \mathbf{X}_{\text{miss}}]X∗fill=[X∗obs,Xmiss]。
判别器结构:输入完整样本(真实样本X∗true\mathbf{X}*{\text{true}}X∗true或生成样本X∗fill\mathbf{X}*{\text{fill}}X∗fill)和掩码M\mathbf{M}M,通过卷积层(捕捉局部特征交互)和全连接层(全局特征整合)输出样本为真实分布的概率D(X)∈[0,1]D(\mathbf{X}) \in [0,1]D(X)∈[0,1]。引入掩码M\mathbf{M}M的目的是让判别器关注缺失区域的填充质量(如掩码为1的位置是否符合真实数据分布)。
损失函数:
生成损失:LG=E[logD(X∗fill,M)]L_G = \mathbb{E} [\log D(\mathbf{X}*{\text{fill}}, \mathbf{M})]LG=E[logD(X∗fill,M)],目标是最小化该损失,使生成样本被判别器判定为“真实”的概率最大化(即logD(X∗fill,M)\log D(\mathbf{X}*{\text{fill}}, \mathbf{M})logD(X∗fill,M)趋近于0)。
判别损失:LD=E[logD(X∗true,M)]E[log(1D(X∗fill,M))]L_D = \mathbb{E} [\log D(\mathbf{X}*{\text{true}}, \mathbf{M})] \mathbb{E} [\log (1 D(\mathbf{X}*{\text{fill}}, \mathbf{M}))]LD=E[logD(X∗true,M)]E[log(1D(X∗fill,M))],目标是最大化对真实样本的识别概率(第一项趋近于0)和对生成样本的识别概率(第二项中D(Xfill,M)D(\mathbf{X}_{\text{fill}}, \mathbf{M})D(Xfill,M)趋近于0,故log(1D(⋅))\log (1 D(\cdot))log(1D(⋅))趋近于0)。
重构损失:Lrec=∥Xfill⊙(1M)X⊙(1M)∥22L_{\text{rec}} = \|\mathbf{X}_{\text{fill}} \odot (1 \mathbf{M}) \mathbf{X} \odot (1 \mathbf{M})\|_2^2Lrec=∥Xfill⊙(1M)X⊙(1M)∥22,确保生成器不篡改已观测特征(掩码为0的位置,填充值需与原始值完全一致)。该损失通过L2范数衡量已观测特征的重构误差,避免生成器为“欺骗”判别器而扭曲真实观测数据。
总损失:Ltotal=LG+LD+λLrecL_{\text{total}} = L_G + L_D + \lambda L_{\text{rec}}Ltotal=LG+LD+λLrec,其中λ=10\lambda=10λ=10为重构损失权重(通过交叉验证确定:当λ<5\lambda<5λ<5时,已观测特征重构误差较大;当λ>15\lambda>15λ>15时,生成样本多样性降低,故取λ=10\lambda=10λ=10平衡两者)。
(二)自适应阈值孤立森林LOF(ATIForestLOF):异常值检测
1. 孤立森林(IForest):全局异常筛查孤立森林通过随机划分特征空间构建多棵二叉树(孤立树),异常样本因“孤立性”(在特征空间中与多数样本差异大)会被更早划分到叶节点,路径长度更短。
孤立树构建:随机选择特征维度ddd和划分点ppp(在该维度的最小值与最大值间均匀采样),将样本分为xd<px_d < pxd<p(左子树)和xd≥px_d \geq pxd≥p(右子树),重复该过程直至子树仅含1个样本或达到最大深度(设为log2n\log_2 nlog2n,避免过拟合)。
路径长度计算:样本xxx在单棵孤立树的路径长度hT(x)h_T(x)hT(x)为从根节点到叶节点的步数(叶节点路径长度定义为样本数的对数,如含1个样本的叶节点路径长度为0,含2个样本为1)。对ttt棵孤立树(t=100t=100t=100,平衡稳定性与计算量)取平均,得到平均路径长度:
h(x)=1t∑T=1thT(x)h(x) = \frac{1}{t} \sum_{T=1}^t h_T(x)h(x)=t1∑T=1thT(x)
异常分数:为将路径长度转化为可解释的异常概率,定义异常分数:
s(x)=2h(x)c(n)s(x) = 2^{\frac{h(x)}{c(n)}}s(x)=2c(n)h(x)
其中c(n)c(n)c(n)为样本量nnn的平均路径长度(理论期望值),计算公式为c(n)=2H(n1)2(n1)/nc(n) = 2H(n1) 2(n1)/nc(n)=2H(n1)2(n1)/n(H(n)H(n)H(n)为调和数,H(n)=lnn+γH(n) = \ln n + \gammaH(n)=lnn+γ,γ≈0.5772\gamma \approx 0.5772γ≈0.5772为欧拉常数)。s(x)∈[0,1]s(x) \in [0,1]s(x)∈[0,1]:当s(x)≈1s(x) \approx 1s(x)≈1时,样本为异常;当s(x)≈0.5s(x) \approx 0.5s(x)≈0.5时,样本为正常;当s(x)≈0s(x) \approx 0s(x)≈0时,样本为“密集正常样本”。实际中,初步筛选s(x)>0.7s(x) > 0.7s(x)>0.7的样本为潜在异常(通过验证集确定:该阈值下正常样本误判率<5%)。
2. 局部离群因子(LOF):局部密度验证IForest仅捕捉全局孤立性,可能将“局部密集但全局孤立”的正常样本误判为异常(如特定年龄段的高血糖样本)。需通过LOF计算局部密度偏离度,验证潜在异常样本是否真的在局部环境中“低密度”。
kkk距离:样本xxx的kkk距离dk(x)d_k(x)dk(x)为与第kkk个近邻样本的距离(k=5k=5k=5,平衡局部性与稳定性:k<3k<3k<3时受噪声影响大,k>10k>10k>10时局部性减弱)。
可达距离:样本yyy到xxx的可达距离定义为dreach(y,x)=max(dk(x),∥yx∥)d_{\text{reach}}(y, x) = \max(d_k(x), \|y x\|)dreach(y,x)=max(dk(x),∥yx∥)。该定义避免因xxx的近邻样本yyy本身处于边界(dk(y)>dk(x)d_k(y) > d_k(x)dk(y)>dk(x))导致的距离低估(如yyy是xxx的第5近邻,但xxx是yyy的第10近邻,此时dreach(y,x)=dk(x)d_{\text{reach}}(y, x) = d_k(x)dreach(y,x)=dk(x),确保xxx的局部密度计算不受yyy的边界特性影响)。
局部可达密度(LRD):样本xxx的LRD为其kkk个近邻样本的平均可达距离的倒数,反映局部密度:
LRD(x)=11k∑y∈Nk(x)dreach(y,x)LRD(x) = \frac{1}{\frac{1}{k} \sum_{y \in N_k(x)} d_{\text{reach}}(y, x)}LRD(x)=k1∑y∈Nk(x)dreach(y,x)1
其中Nk(x)N_k(x)Nk(x)为xxx的kkk个近邻样本集。LRD越大,局部密度越高(如正常样本的LRD显著大于异常样本)。
LOF值:样本xxx的LOF值为其近邻样本的LRD与自身LRD的比值的平均:
LOF(x)=1k∑y∈Nk(x)LRD(y)LRD(x)LOF(x) = \frac{1}{k} \sum_{y \in N_k(x)} \frac{LRD(y)}{LRD(x)}LOF(x)=k1∑y∈Nk(x)LRD(x)LRD(y)
若LOF(x)>1.5LOF(x) > 1.5LOF(x)>1.5,表明xxx的局部密度显著低于近邻样本(近邻样本的LRD平均是xxx的1.5倍以上),判定为异常(通过医学数据验证:该阈值下临床矛盾样本(如血压0 mmHg)的LOF值均>1.5)。
**3. 自适应阈值调整(AT)**不同特征的异常程度差异大(如血压异常值通常偏离均值更远,而BMI异常值偏离较小),固定LOF阈值(如1.5)可能导致部分特征异常值漏检或误检。需通过核密度估计(KDE)动态确定阈值。
核密度函数估计:对IForest筛选的潜在异常样本的LOF值z1,z2,...,zmz_1, z_2, ..., z_mz1,z2,...,zm(mmm为潜在异常样本数),用高斯核估计其概率密度函数:
f^∗h(z)=1mh∑∗i=1mK(zzih)\hat{f}*h(z) = \frac{1}{mh} \sum*{i=1}^m K\left( \frac{z z_i}{h} \right)f^∗h(z)=mh1∑∗i=1mK(hzzi)
其中K(u)=12πeu2/2K(u) = \frac{1}{\sqrt{2\pi}} e^{u^2/2}K(u)=2π1eu2/2(高斯核,平滑性好),带宽hhh通过Silverman准则确定:h=1.06min(σ,IQR/1.34)m1/5h = 1.06 \min(\sigma, IQR/1.34) m^{1/5}h=1.06min(σ,IQR/1.34)m1/5(σ\sigmaσ为LOF值的标准差,IQRIQRIQR为四分位距,确保带宽随样本量和数据离散程度自适应调整)。
阈值计算:根据特征分布陡峭程度设定显著性水平α\alphaα(分布越陡峭,异常值与正常值得区分越明显,α\alphaα越小):如血压(分布陡峭,α=0.01\alpha=0.01α=0.01)、BMI(分布平缓,α=0.05\alpha=0.05α=0.05)。阈值τ\tauτ满足累积分布函数∫∞τf^h(z)dz≥α\int_{\infty}^\tau \hat{f}_h(z) dz \geq \alpha∫∞τf^h(z)dz≥α(即τ\tauτ为LOF值分布的α\alphaα分位数),最终判定LOF(x)>τLOF(x) > \tauLOF(x)>τ的样本为异常(确保异常值比例符合≤10%的约束)。
(三)SHAPNOTEARS因果推断模型:影响因素识别
1. TreeSHAP:特征重要性筛选先用LightGBM构建疾病预测模型(捕捉特征与疾病的非线性关联),再通过TreeSHAP计算特征对模型输出的贡献,筛选预测重要性高的候选因果特征。
LightGBM模型:输入预处理后的特征矩阵 X\mathbf{X}X(维度n×dn \times dn×d),输出疾病概率 y^=LightGBM(X)\hat{y} = \text{LightGBM}(\mathbf{X})y^=LightGBM(X)(维度n×1n \times 1n×1)。模型目标函数为交叉熵损失(衡量二分类预测误差):
L=1n∑i=1n[yilogy^i+(1yi)log(1y^i)]L = \frac{1}{n} \sum_{i=1}^n [y_i \log \hat{y}_i + (1 y_i) \log (1 \hat{y}_i)]L=n1∑i=1n[yilogy^i+(1yi)log(1y^i)]
其中yi∈{0,1}y_i \in \{0,1\}yi∈{0,1}为真实疾病标签(1表示患病,0表示未患病)。该损失函数通过惩罚错误预测(如将患病样本预测为未患病的概率越高,损失越大),驱动模型学习特征与疾病的关联。
SHAP值计算:SHAP值基于合作博弈论中的Shapley值理论,量化特征iii对模型输出的平均边际贡献。对单个样本,特征iii的SHAP值ϕi\phi_iϕi为其在所有特征子集SSS(不含iii)上的边际贡献[f(S∪{i})f(S)][f(S \cup \{i\}) f(S)][f(S∪{i})f(S)]的加权平均,权重为子集大小的阶乘比(确保公平性):
ϕi=∑S⊆X∖{i}∣S∣!(d∣S∣1)!d![f(S∪{i})f(S)]\phi_i = \sum_{S \subseteq \mathbf{X} \setminus \{i\}} \frac{|S|! (d |S| 1)!}{d!} [f(S \cup \{i\}) f(S)]ϕi=∑S⊆X∖{i}d!∣S∣!(d∣S∣1)![f(S∪{i})f(S)]
其中SSS为不含特征iii的子集,∣S∣|S|∣S∣为子集大小,ddd为总特征数,f(S)f(S)f(S)为仅用SSS中特征的模型预测值。直接计算需枚举2d12^{d1}2d1个子集,计算量巨大。TreeSHAP通过树结构的路径特性(如每个叶子节点对应一个样本子集)快速近似计算ϕi\phi_iϕi,将复杂度从指数级降至线性级(与树的深度成正比)。
特征筛选:计算所有样本的SHAP值的绝对值均值ϕˉ∗i=1n∑∗j=1n∣ϕi,j∣\bar{\phi}*i = \frac{1}{n} \sum*{j=1}^n |\phi_{i,j}|ϕˉ∗i=n1∑∗j=1n∣ϕi,j∣(ϕi,j\phi_{i,j}ϕi,j为样本jjj的特征iii的SHAP值),衡量特征iii的平均预测重要性。筛选ϕˉi>0.15\bar{\phi}_i > 0.15ϕˉi>0.15的特征作为候选因果特征(通过临床先验知识验证:如高血压、吸烟史等已知风险因素的ϕˉi\bar{\phi}_iϕˉi均>0.15,而“患者ID”等无关特征的ϕˉi\bar{\phi}_iϕˉi<0.05)。
2. NOTEARS:因果图(DAG)学习候选特征可能存在伴随关联(如年龄与高血压),需通过NOTEARS算法从候选特征中学习因果结构(DAG),区分直接因果关系与间接关联。
线性结构方程模型(LSEM):假设特征间的因果关系为线性(简化模型,便于解释):
X=ΘTX+ϵ\mathbf{X} = \mathbf{\Theta}^T \mathbf{X} + \boldsymbol{\epsilon}X=ΘTX+ϵ
其中X∈Rd×n\mathbf{X} \in \mathbb{R}^{d \times n}X∈Rd×n(每行对应一个特征,每列对应一个样本),Θ∈Rd×d\mathbf{\Theta} \in \mathbb{R}^{d \times d}Θ∈Rd×d为系数矩阵(Θijeq0\Theta_{ij} eq 0Θijeq0表示特征iii直接因果影响特征jjj,Θij=0\Theta_{ij}=0Θij=0表示无直接因果关系),ϵ∼N(0,Σ)\boldsymbol{\epsilon} \sim \mathcal{N}(0, \mathbf{\Sigma})ϵ∼N(0,Σ)为独立高斯噪声项(Σ\mathbf{\Sigma}Σ为对角矩阵,确保噪声无关联)。
无环约束转化:DAG需满足无环性(不存在特征i1→i2→...→ik→i1i_1 \rightarrow i_2 \rightarrow ... \rightarrow i_k \rightarrow i_1i1→i2→...→ik→i1的循环因果)。NOTEARS将该离散约束转化为连续函数:
Tr(exp(θ∘θ))≤d\text{Tr}(\exp(\theta \circ \theta)) \leq dTr(exp(θ∘θ))≤d
其中θ∘θ\theta \circ \thetaθ∘θ为θ\thetaθ的Hadamard乘积(逐元素平方,确保非负),exp(A)=∑k=0∞Akk!\exp(\mathbf{A}) = \sum_{k=0}^{\infty} \frac{\mathbf{A}^k}{k!}exp(A)=∑k=0∞k!Ak为矩阵指数函数,Tr(⋅)\text{Tr}(\cdot)Tr(⋅)为矩阵迹(对角线元素之和)。若存在环(如i→j→ii \rightarrow j \rightarrow ii→j→i),则(θ∘θ)2(\theta \circ \theta)^2(θ∘θ)2的对角线元素非零,导致exp(θ∘θ)\exp(\theta \circ \theta)exp(θ∘θ)的迹Tr(⋅)>d\text{Tr}(\cdot) > dTr(⋅)>d;若无环,则(θ∘θ)k(\theta \circ \theta)^k(θ∘θ)k的对角线元素全为0(k≥2k \geq 2k≥2),exp(θ∘θ)=I+θ∘θ\exp(\theta \circ \theta) = \mathbf{I} + \theta \circ \thetaexp(θ∘θ)=I+θ∘θ,迹Tr(⋅)=d\text{Tr}(\cdot) = dTr(⋅)=d(I\mathbf{I}I为单位矩阵)。
优化目标:通过最小化拟合损失和正则化项学习Θ\ThetaΘ:
minΘ12n∥XΘTX∥F2+λ∥Θ∥1s.t.Tr(exp(θ∘θ))≤d\min_{\Theta} \frac{1}{2n} \|\mathbf{X} \mathbf{\Theta}^T \mathbf{X}\|_F^2 + \lambda \|\Theta\|_1 \quad \text{s.t.} \quad \text{Tr}(\exp(\theta \circ \theta)) \leq dminΘ2n1∥XΘTX∥F2+λ∥Θ∥1s.t.Tr(exp(θ∘θ))≤d
其中第一项为Frobenius范数损失(衡量LSEM的拟合误差,∥A∥∗F2=∑∗i,jAij2\|\mathbf{A}\|*F^2 = \sum*{i,j} A_{ij}^2∥A∥∗F2=∑∗i,jAij2),第二项为L1正则化(λ=0.01\lambda=0.01λ=0.01,控制Θ\ThetaΘ的稀疏性,避免过拟合,得到简洁的因果图)。求解后,Θ\ThetaΘ的非零元素对应因果边,边权重Θij\Theta_{ij}Θij量化特征iii对特征jjj的直接因果效应强度(如Θ高血压, 中风=0.8\Theta_{\text{高血压, 中风}}=0.8Θ高血压, 中风=0.8表示高血压每增加1单位,中风风险平均增加0.8单位)。最终通过因果图提取核心路径(如“吸烟→动脉硬化→心脏病→中风”),识别影响疾病的直接因果因素。
问题一模型求解过程
一、自注意力增强的生成对抗网络(MissGANATT):缺失值填充
(一)数据与参数设定
输入数据:三个疾病数据集的原始特征矩阵,包括:
stroke.csv:含11个特征(gender、age、hypertension等),其中bmi特征存在N/A缺失值;
heart.csv:含11个特征(Age、Sex、ChestPainType等),Cholesterol等特征可能存在测量缺失;
cirrhosis.csv:含19个特征(Age、Sex、Ascites等),Cholesterol(缺失率42%)、Triglycerides、Platelets等特征存在NA缺失值。
对每个数据集,构建含缺失值的特征矩阵X∈Rn×d\mathbf{X} \in \mathbb{R}^{n \times d}X∈Rn×d(nnn为样本量,ddd为特征数)及缺失掩码M∈{0,1}n×d\mathbf{M} \in \{0,1\}^{n \times d}M∈{0,1}n×d(Mij=1M_{ij}=1Mij=1表示XijX_{ij}Xij缺失)。
核心参数:
注意力维度dk=d/8d_k = d/8dk=d/8(ddd为特征维度,如cirrhosis.csv的d=19d=19d=19,则dk=3d_k=3dk=3);
生成器全连接层维度:输入层→2d2d2d→自注意力模块→dmissd_{\text{miss}}dmiss(dmissd_{\text{miss}}dmiss为缺失特征数);
判别器卷积核大小:3×3,步长1,全连接层维度ddd→d/2d/2d/2→1;
学习率:生成器1e41e41e4,判别器2e42e42e4;
重构损失权重λ=10\lambda=10λ=10(通过交叉验证确定,平衡生成样本真实性与已观测特征保真度);
训练轮次epochs=200epochs=200epochs=200,批量大小batch_size=64batch\_size=64batch_size=64。
(二)具体求解步骤
步骤1:数据预处理——特征编码与缺失掩码构建
非数值特征编码:对分类特征(如gender、work_type、ChestPainType)采用独热编码(OneHot Encoding),避免引入虚假序关系(如gender的“男/女/其他”转化为3个二进制特征);对有序特征(如Edema的N/S/Y)采用序数编码(N=0,S=1,Y=2)。
缺失掩码生成:对每个数据集,遍历所有特征,标记缺失值位置(如stroke.csv的bmi=N/A处Mij=1M_{ij}=1Mij=1,已观测值处Mij=0M_{ij}=0Mij=0),得到掩码矩阵M\mathbf{M}M;提取已观测特征Xobs=X⊙(1M)\mathbf{X}_{\text{obs}} = \mathbf{X} \odot (1\mathbf{M})Xobs=X⊙(1M)(⊙\odot⊙为逐元素乘法)。
步骤2:生成器构建——自注意力模块嵌入生成器GGG以X∗obs\mathbf{X}*{\text{obs}}X∗obs和M\mathbf{M}M为输入,输出缺失值X∗miss\mathbf{X}*{\text{miss}}X∗miss,结构如下:
输入层:拼接Xobs\mathbf{X}_{\text{obs}}Xobs与M\mathbf{M}M,得到维度n×2dn \times 2dn×2d的输入向量;
全连接层:通过线性变换H1=ReLU(W1⋅[Xobs,M]+b1)H_1 = \text{ReLU}(W_1 \cdot [\mathbf{X}_{\text{obs}}, \mathbf{M}] + b_1)H1=ReLU(W1⋅[Xobs,M]+b1)提取初步特征,W1∈R2d×2dW_1 \in \mathbb{R}^{2d \times 2d}W1∈R2d×2d,b1∈R2db_1 \in \mathbb{R}^{2d}b1∈R2d;
自注意力模块:对H1H_1H1计算特征间关联权重,公式为:Q=H1WQ,K=H1WK,V=H1WV\mathbf{Q} = H_1 \mathbf{W}_Q, \quad \mathbf{K} = H_1 \mathbf{W}_K, \quad \mathbf{V} = H_1 \mathbf{W}_VQ=H1WQ,K=H1WK,V=H1WVAttention(H1)=softmax(QKTdk)V\text{Attention}(H_1) = \text{softmax}\left( \frac{\mathbf{Q} \mathbf{K}^T}{\sqrt{d_k}} \right) \mathbf{V}Attention(H1)=softmax(dkQKT)V其中WQ,WK,WV∈R2d×dk\mathbf{W}_Q, \mathbf{W}_K, \mathbf{W}_V \in \mathbb{R}^{2d \times d_k}WQ,WK,WV∈R2d×dk为可学习参数,dk=d/8d_k = d/8dk=d/8。输出加权特征H2=Attention(H1)+H1H_2 = \text{Attention}(H_1) + H_1H2=Attention(H1)+H1(残差连接);
输出层:通过线性变换H3=W2⋅H2+b2H_3 = W_2 \cdot H_2 + b_2H3=W2⋅H2+b2(W2∈R2d×dmissW_2 \in \mathbb{R}^{2d \times d_{\text{miss}}}W2∈R2d×dmiss,b2∈Rdmissb_2 \in \mathbb{R}^{d_{\text{miss}}}b2∈Rdmiss)生成缺失值X∗miss\mathbf{X}*{\text{miss}}X∗miss,并通过医学范围约束(如BMI∈[15,50])调整输出:X∗miss=clip(H3,minf,maxf)\mathbf{X}*{\text{miss}} = \text{clip}(H_3, \text{min}_f, \text{max}_f)X∗miss=clip(H3,minf,maxf)其中minf/maxf\text{min}_f/\text{max}_fminf/maxf为特征fff的医学合理范围(如血糖min=40\text{min}=40min=40 mg/dL,max=300\text{max}=300max=300 mg/dL)。
步骤3:判别器构建——缺失区域质量评估判别器DDD以完整样本(真实样本X∗true\mathbf{X}*{\text{true}}X∗true或生成样本X∗fill=[X∗obs,X∗miss]\mathbf{X}*{\text{fill}} = [\mathbf{X}*{\text{obs}}, \mathbf{X}*{\text{miss}}]X∗fill=[X∗obs,X∗miss])和M\mathbf{M}M为输入,输出样本真实性概率D(X)∈[0,1]D(\mathbf{X}) \in [0,1]D(X)∈[0,1],结构如下:
输入层:拼接完整样本与M\mathbf{M}M,得到n×2dn \times 2dn×2d的输入向量;
卷积层:通过3×3卷积核提取局部特征交互:C1=Conv([Xfill,M],3,1)C_1 = \text{Conv}( [\mathbf{X}_{\text{fill}}, \mathbf{M}], 3, 1 )C1=Conv([Xfill,M],3,1),激活函数为LeakyReLU;
全连接层:C2=ReLU(W3⋅C1+b3)C_2 = \text{ReLU}(W_3 \cdot C_1 + b_3)C2=ReLU(W3⋅C1+b3)(W3∈Rd×d/2W_3 \in \mathbb{R}^{d \times d/2}W3∈Rd×d/2),D(X)=Sigmoid(W4⋅C2+b4)D(\mathbf{X}) = \text{Sigmoid}(W_4 \cdot C_2 + b_4)D(X)=Sigmoid(W4⋅C2+b4)(W4∈Rd/2×1W_4 \in \mathbb{R}^{d/2 \times 1}W4∈Rd/2×1),输出真实性概率。
步骤4:对抗训练——生成器与判别器优化交替优化生成器和判别器,最小化总损失Ltotal=LG+LD+λLrecL_{\text{total}} = L_G + L_D + \lambda L_{\text{rec}}Ltotal=LG+LD+λLrec:
生成器损失:LG=E[logD(Xfill,M)]L_G = \mathbb{E} [\log D(\mathbf{X}_{\text{fill}}, \mathbf{M})]LG=E[logD(Xfill,M)],目标是使生成样本被判别为“真实”的概率最大化;
判别器损失:LD=E[logD(X∗true,M)]E[log(1D(X∗fill,M))]L_D = \mathbb{E} [\log D(\mathbf{X}*{\text{true}}, \mathbf{M})] \mathbb{E} [\log (1 D(\mathbf{X}*{\text{fill}}, \mathbf{M}))]LD=E[logD(X∗true,M)]E[log(1D(X∗fill,M))],目标是区分真实样本与生成样本;
重构损失:Lrec=∥Xfill⊙(1M)X⊙(1M)∥22L_{\text{rec}} = \|\mathbf{X}_{\text{fill}} \odot (1 \mathbf{M}) \mathbf{X} \odot (1 \mathbf{M})\|_2^2Lrec=∥Xfill⊙(1M)X⊙(1M)∥22,确保已观测特征不被篡改。
采用Adam优化器,每轮训练中先更新判别器(5次),再更新生成器(1次),直至损失收敛(连续10轮LtotalL_{\text{total}}Ltotal波动<1%)。
步骤5:缺失值填充与输出训练完成后,将原始数据的X∗obs\mathbf{X}*{\text{obs}}X∗obs和M\mathbf{M}M输入生成器GGG,得到X∗miss\mathbf{X}*{\text{miss}}X∗miss,拼接为完整特征矩阵Xfill\mathbf{X}_{\text{fill}}Xfill。输出三个数据集的填充后数据,用于后续异常值检测。
二、自适应阈值孤立森林LOF(ATIForestLOF):异常值检测
(一)数据与参数设定
输入数据:经MissGANATT填充后的完整特征矩阵Xfill∈Rn×d\mathbf{X}_{\text{fill}} \in \mathbb{R}^{n \times d}Xfill∈Rn×d(如stroke.csv填充后n=5110n=5110n=5110,d=11d=11d=11;heart.csvn≈1000n \approx 1000n≈1000,d=11d=11d=11;cirrhosis.csvn≈1000n \approx 1000n≈1000,d=19d=19d=19)。
核心参数:
孤立森林(IForest):树数量t=100t=100t=100,最大深度log2n\log_2 nlog2n(避免过拟合),异常分数阈值sth=0.7s_{\text{th}}=0.7sth=0.7(初步筛选潜在异常);
局部离群因子(LOF):近邻数k=5k=5k=5(平衡局部性与稳定性),初始LOF阈值1.51.51.5;
核密度估计(KDE):高斯核函数K(u)=12πeu2/2K(u) = \frac{1}{\sqrt{2\pi}} e^{u^2/2}K(u)=2π1eu2/2,带宽hhh通过Silverman准则计算:h=1.06min(σ,IQR/1.34)m1/5h = 1.06 \min(\sigma, IQR/1.34) m^{1/5}h=1.06min(σ,IQR/1.34)m1/5(mmm为潜在异常样本数,σ\sigmaσ为LOF值标准差,IQRIQRIQR为四分位距);
显著性水平α\alphaα:根据特征分布陡峭程度自适应(血压α=0.01\alpha=0.01α=0.01,BMIα=0.05\alpha=0.05α=0.05)。
更多推荐
所有评论(0)