假设您正在构建一个可以诊断任何医疗状况的星际迷航式医疗三录仪。它需要能够检测患者患有多种疾病的合并症(例如,患者可能同时患有 COVID、糖尿病和肺癌)。
您将如何构建一个分类系统来检测最可能的一组条件?
我看到两种方法:
- 为每种疾病建立一个模型,使用每种模型进行预测,并报告患者患有预测概率超过阈值(例如 0.95)的任何疾病
likely_diseases = []
THRESHOLD = 0.95
for disease in disease_columns:
model = xgb.XGBClassifier()
model.fit(X_train, y_train[disease])
pred_proba = model.predict_proba(patient_data)[:, 1]
if (pred_proba > THRESHOLD):
likely_diseases.append(disease)
- 每种疾病组合建立一个模型,并选择概率最高的组合
df['has_covid_lung_cancer_and_stroke'] = df.apply(lambda patient: patient['has_lung_cancer'] and patient['has_covid'] and patient['has_stroke'])
# create all other possible permutations of diseases
highest_probability = 0.0
most_likely_disease_combination = None
for disease_combination in disease_combinations:
model = xgb.XGBClassifier()
model.fit(X_train, y_train[disease])
pred_proba = model.predict_proba(patient_data)[:, 1]
if (pred_proba > highest_probability):
most_likely_disease_combination = disease_combination
highest_probability = pred_proba
让我感到震惊的是,方法二可能会更准确,但计算量可能太大以至于难以处理。在训练数据集中出现率极低的组合被丢弃的情况下,可能会进行一些修剪。