基于患者特征选择无副作用药物的分类模型构建咨询
方法评估与优化方案
一、原双随机森林方法的问题
- 核心逻辑偏离目标:按
side_effects拆分数据集后,两个模型仅学习了不同副作用人群中药物的分布,没有直接关联患者特征与「药物选择→副作用概率」的因果关系,无法直接回答“给该患者用哪种药副作用更少”的核心问题。 - 概率融合无统计依据:取无副作用模型的最大概率+有副作用模型的最小概率求平均,再推导另一药物的概率,这套规则完全是主观设定,输出的概率值不具备实际参考意义,也无法量化两种药物的副作用风险差异。
- 代码与训练存在疏漏:第二个模型的变量名写错(
modelNoSide = RandomForestClassifier(...)应为modelSide),且未对模型做性能验证,无法保证模型本身的预测可靠性。
二、更优解决方案:直接预测药物对应的副作用概率
核心思路是:对每个患者,分别计算用药物0和药物1时出现副作用的概率,选择概率更低的药物。以下是两种落地方式:
方式1:单模型联合学习特征、药物与副作用的关系
将患者特征+药物类型作为输入,副作用作为目标变量,让模型直接学习P(side_effects=1 | 特征, medication),之后通过构造不同药物的输入来对比副作用概率。
代码示例:
import pandas as pd from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split # 构造完整训练数据集 X = df[["white_blood_cells", "age", "weight", "gender", "medication"]] y = df["side_effects"] # 拆分训练测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 训练模型 model = RandomForestClassifier(random_state=42) model.fit(X_train, y_train) # 对新患者进行预测决策 new_data = pd.DataFrame({ "white_blood_cells": [7.2], "age": [55], "weight": [70], "gender": [1] }) # 构造两种药物的输入数据 new_data_med0 = new_data.copy() new_data_med0["medication"] = 0 new_data_med1 = new_data.copy() new_data_med1["medication"] = 1 # 分别预测两种药物的副作用概率 prob_side_med0 = model.predict_proba(new_data_med0)[0, 1] prob_side_med1 = model.predict_proba(new_data_med1)[0, 1] # 输出推荐结果 if prob_side_med0 < prob_side_med1: print(f"推荐药物0,副作用概率:{prob_side_med0:.4f}") else: print(f"推荐药物1,副作用概率:{prob_side_med1:.4f}")
方式2:针对两种药物分别训练副作用预测模型
分别训练两个独立模型,各自学习对应药物下患者特征与副作用的关系:
- 拆分数据集:
df_med0 = df[df["medication"] == 0],训练模型A,目标变量为side_effectsdf_med1 = df[df["medication"] == 1],训练模型B,目标变量为side_effects
- 对新患者,用模型A预测用药物0的副作用概率,用模型B预测用药物1的副作用概率,选择概率更低的药物。
三、方案对比
- 方式1优势:仅需维护一个模型,能自动捕捉特征与药物的交互影响(比如某些特征在不同药物下对副作用的作用不同),训练和部署成本更低。
- 方式2优势:可针对两种药物的副作用机制分别优化模型,适合两种药物的副作用影响因素差异较大的场景。
内容的提问来源于stack exchange,提问作者Mohamed kenani
相关产品推荐
相关产品推荐

