基于机器学习的阿尔兹海默症智能分析预测系统

温馨提示:文末有 CSDN 平台官方提供的学长 QQ 名片 :) 

1. 项目简介

        阿尔兹海默症(Alzheimer's Disease, AD)是一种常见的神经退行性疾病,主要影响老年人的认知功能。随着全球人口老龄化的加剧,阿尔兹海默症的患病率逐年上升,对社会和个人健康造成了巨大的负担。因此,开发一种能够有效预测和辅助诊断阿尔兹海默症的智能系统具有重要意义。本项目旨在利用机器学习技术,结合临床数据和生物标志物,通过 XGBoost 机器学习模型来预测阿尔兹海默症发病风险,测试集预测 AUC 达到 97.9%,并利用 Flask、Bootstrap、Ajax 构建一个智能分析预测系统,以期在早期阶段识别阿尔兹海默症患者,为临床治疗提供支持。

基于机器学习的阿尔兹海默症智能分析预测系统

2. 数据探索式可视化分析

        为了更好地理解数据分布和特征之间的关系,我们首先进行了数据探索式的可视化分析。这一步骤对于发现异常值、理解数据分布以及发现潜在的模式至关重要。

        关键技术点:

  • Pandas: 用于数据处理和清洗。
  • Matplotlib: 绘制基本图表。
  • Seaborn: 进行更复杂的统计图形绘制。
  • 柱状图和饼状图: 直观展示类别数据和比例数据。

2.1 数据集读取与预处理

        该数据集是2149名被诊断患有阿尔茨海默病或有阿尔茨海默病风险的患者的健康记录的综合集合。数据集中的每个患者都有一个唯一的ID号,范围从4751到6900。该数据集涵盖了广泛的信息,这些信息对于理解与阿尔茨海默病相关的各种因素至关重要。它包括人口统计细节、生活习惯、病史、临床测量、认知和功能评估、症状和诊断信息。

English Field NameChinese DescriptionValue Range / Meaning
Age年龄60至90岁
Gender性别0=男性,1=女性
Ethnicity种族高加索人、非裔美国人、亚洲人、其他
Education Level教育水平无到高等教育
Body Mass Index (BMI)身体质量指数(BMI)15至40
Smoking Status吸烟状况1=吸烟,0=不吸烟
Alcohol Consumption酒精摄入量0至20单位
Physical Activity体育活动时间0至10小时
Diet Quality饮食质量评分0至10分
Sleep Quality睡眠质量评分4至10分
Family History of Alzheimer's家族阿尔茨海默病史1=有,0=没有
Cardiovascular Disease心血管疾病有/无
Diabetes糖尿病有/无
Depression抑郁症史有/无
Head Injury头部受伤有/无
Hypertension高血压有/无
Systolic Blood Pressure收缩压90-180 mmHg
Diastolic Blood Pressure舒张压60-120 mmHg
Total Cholesterol胆固醇总量150-300 mg/dL
LDL Cholesterol低密度脂蛋白胆固醇(LDL)50-200 mg/dL
HDL Cholesterol高密度脂蛋白胆固醇(HDL)20-100 mg/dL
Triglycerides甘油三酯50-400 mg/dL
Mini-Mental State Examination (MMSE) Score简易精神状态检查(MMSE)得分0至30分,分数越低表示认知功能障碍越严重
Functional Assessment Score功能评估得分0至10分,分数越低表示功能障碍越严重
Memory Complaints记忆抱怨1=有,0=没有
Behavioral Problems行为问题有/无
Activities of Daily Living (ADL) Score日常生活活动(ADL)得分0至10分,分数越低表示日常活动能力受损越严重
Confusion and Disorientation混乱与定向障碍有/无
Personality Changes人格变化有/无
Difficulty Completing Tasks完成任务困难有/无
Forgetfulness健忘有/无
Alzheimer's Diagnosis Status阿尔茨海默病诊断状态1=确诊,0=未确诊
Doctor in Charge主诊医生保护患者隐私的信息占位符
df = pd.read_csv("./alzheimers_disease_patient_data.csv")

## 列名汉化 
df.rename(columns={ "Age": "年龄", "Gender": "性别", "Ethnicity": "种族", "EducationLevel": "教育水平", "BMI": "身体质量指数(BMI)", "Smoking": "吸烟状况", "AlcoholConsumption": "酒精摄入量", "PhysicalActivity": "体育活动时间", "DietQuality": "饮食质量评分", "SleepQuality": "睡眠质量评分", "FamilyHistoryAlzheimers": "家族阿尔茨海默病史", "CardiovascularDisease": "心血管疾病", "Diabetes": "糖尿病", "Depression": "抑郁症史", "HeadInjury": "头部受伤", "Hypertension": "高血压", "SystolicBP": "收缩压", "DiastolicBP": "舒张压", "CholesterolTotal": "胆固醇总量", "CholesterolLDL": "低密度脂蛋白胆固醇(LDL)", "CholesterolHDL": "高密度脂蛋白胆固醇(HDL)", "CholesterolTriglycerides": "甘油三酯", "MMSE": "简易精神状态检查(MMSE)得分", "FunctionalAssessment": "功能评估得分", "MemoryComplaints": "记忆抱怨", "BehavioralProblems": "行为问题", "ADL": "日常生活活动(ADL)得分", "Confusion": "混乱与定向障碍", "Disorientation": "迷失方向", "PersonalityChanges": "人格变化", "DifficultyCompletingTasks": "完成任务困难", "Forgetfulness": "健忘", "Diagnosis": "诊断状态", "DoctorInCharge": "主诊医生" },inplace=True)

df.info()

 2.2 类别标签数量分布

tmp = df["诊断状态"].value_counts().to_frame().reset_index().rename(columns={"count":"数量"})

tmp["诊断状态"] = tmp["诊断状态"].map(lambda x:"是" if x == 1 else "否")
tmp["百分比"] = tmp["数量"].map(lambda x:round(x/tmp["数量"].sum()*100,2))

labels,values,percent = tmp["诊断状态"].tolist(),tmp["数量"].tolist(),tmp["百分比"].tolist()

        可以看出,诊断为阿尔兹海默症的患者占 35.37%,这是一个类别不均衡的二分类问题,需要采用采样算法去平衡数据集的占比。

2.3 特征与目标的相关性分析

fig,ax = plt.subplots(1,1,figsize=(20, 16))
cmap = sns.diverging_palette(230, 20, as_cmap=True)
sns.heatmap(df.corr(), annot= True, cmap=cmap, vmax=.5, center=0,
            square=True, linewidths=.5, cbar_kws={"shrink": .5})
ax.set_xticklabels(labels=df.columns, rotation=90, fontsize=12)
ax.set_yticklabels(labels=df.columns, rotation=00, fontsize=12)
plt.show()

        可以看出:与诊断为阿尔兹海默症的相关性较高的特征有:MMSE、功能评估得分、记忆抱怨、行为问题、ADL得分等,其中ADL得分、MMSE得分、功能性评估得分呈现较强负相关,另外2个呈现较强的正相关。

 2.4 阿尔兹海默症患病与年龄分布

        可以看出,阿尔茨海默症的发病风险随年龄增长而增加,尤其是在70岁及以上的人群中更为突出。60岁以上的老年人更容易受到阿尔茨海默症的影响,尤其是70岁及以上的老年人。虽然总人口中大多数人在没有阿尔茨海默症的情况下,但是随着年龄的增长,患病比例也在逐步提高。

2.5 阿尔兹海默症患病与性别分布

        从这两张饼图来看,似乎并没有明显的性别差异导致阿尔茨海默症的风险高低。男性和女性在患病率上的差异并不显著。

2.6 阿尔兹海默症患病与种族分布

        可以看出,高加索人是阿尔茨海默症的主要受影响群体,其次是非裔美国人,再次是亚洲人,最低的是其他人。

2.7 阿尔兹海默症患病与功能评估得分分布

plt.figure(figsize=(12, 8))
sns.violinplot(x='诊断状态', y='功能评估得分', data=df)
plt.title('功能评估得分与患阿尔兹海默症的相关性分布', fontsize=20)
plt.xlabel('诊断状态', fontsize=16)
plt.ylabel('功能评估得分', fontsize=16)
plt.show()

        小提琴图是一种用于展示连续变量分组分布的统计图形,它结合了箱线图和密度图的特点,能够清晰地展现各个组别内数据的分布情况和频率。功能评估得分与阿尔茨海默症的诊断状态有关联,未患阿尔茨海默症的人群通常得分较高且分布较为集中,而患有阿尔茨海默症的人群得分较低且分布较分散。这也符合预期,因为功能评估得分通常反映个体的能力和表现,较高的得分可能意味着较好的认知能力和身体机能,反之亦然。

2.8 阿尔兹海默症患病与日常生活活动(ADL)得分分布

        从这些重要特征的分布可以看出:简易精神状态检查(MMSE)得分、记忆抱怨、日常生活活动(ADL)得分,对于是否患阿尔兹海默症,具有较明显的分布区分性,这将会为模型提供很好的特征值。

3. 样本采样均衡与扩充处理

        在处理不平衡的数据集时,数据集扩充技术显得尤为重要。不平衡数据集是指目标变量的各类别之间存在显著数量差异的数据集,在这种情况下,模型可能会偏向于多数类,导致少数类别的预测性能较差。为了解决这个问题,我们可以使用imbalanced-learn库中的两种常用方法:过采样和欠采样。

        (1)过采样 (RandomOverSampler)

        过采样是指增加少数类样本的数量,通常通过复制现有的样本或合成新的样本实现。RandomOverSampler是一种简单直接的方法,它随机重复少数类样本以平衡数据集。

        (2)欠采样 (RandomUnderSampler)

        欠采样是指减少多数类样本的数量,以平衡各类别之间的比例。RandomUnderSampler同样是一个简单直接的方法,它随机选择多数类样本的一部分,使多数类与少数类的数量相同。

        (3)结合使用过采样和欠采样

        在某些情况下,同时使用过采样和欠采样的方法可以达到更好的效果。例如,先使用RandomUnderSampler减少多数类样本的数量,然后再使用RandomOverSampler增加少数类样本的数量。

# Separate features and target variable
X = df.drop(columns=['诊断状态'])
y = df['诊断状态']

# Count the occurrences of each class
class_counts = y.value_counts()

# Calculate the target count for each class
target_count = min(class_counts)

# 此处省略部分关键代码
# ....

# Apply resampling
# 此处省略部分关键代码
# ....

print('X_over:', X_over.shape)
X_resampled, y_resampled = under_sampler.fit_resample(X_over, y_over)
print('X_resampled:', X_resampled.shape)

# Concat
df_resampled = pd.concat([pd.DataFrame(X_resampled, columns=X.columns), pd.DataFrame(y_resampled, columns=['诊断状态'])], axis=1)
df_resampled.shape

4. 基于机器学习的阿尔兹海默症患病预测建模

        在完成数据预处理之后,我们采用XGBoost算法构建了预测模型。XGBoost是一种高效的梯度提升框架,适用于大规模数据集。

        关键技术点:

  • XGBoost: 构建模型。
  • 模型训练: 使用训练数据集训练模型。
  • 特征重要性: 评估模型中各个特征的重要性。
  • AUC评估: 通过计算模型的曲线下面积(Area Under the Curve, AUC)来评估模型性能。
  • ROC曲线: 绘制接收者操作特性(Receiver Operating Characteristic, ROC)曲线。
  • 混淆矩阵: 计算分类结果的准确性和其他指标。

4.1 多模型预测性能对比初探

        利用切分的数据集对 "Ada Boost", "Gradient Boosting", "Logistic Regression", "Support Vector Machine", "XGBoost" 6个基础模型进行了初步试探,选择默认参数最后的模型,以后续进行针对性的优化:

4.2 Xgboost 模型继续优化

df_columns = X_train.columns.values
print('===> feature count: {}'.format(len(df_columns)))

xgb_params = {
    'eta': 0.1,
    'colsample_bytree': 0.4,
    'max_depth': 8,
    'lambda': 2.0,
    'eval_metric': 'auc',
    'objective': 'binary:logistic',
    'nthread': -1,
    'silent': 1,
    'booster': 'gbtree'
}

dtrain = xgb.DMatrix(X_train, y_train, feature_names=df_columns)
dvalid = xgb.DMatrix(X_valid, y_valid, feature_names=df_columns)

watchlist = [(dtrain, 'train'), (dvalid, 'valid')]

        利用验证集的预测指标,去优化 eta、lambda 等参数,得到最优参数组合,利用最优参数进行模型训练:

model = xgb.train(dict(xgb_params),
                      dtrain,
                      evals=watchlist,
                      verbose_eval=10,
                      early_stopping_rounds=100,
                      num_boost_round=4000)

         训练日志:

[0]	train-auc:0.84304	valid-auc:0.75025
[10]	train-auc:0.99302	valid-auc:0.97291
[20]	train-auc:0.99644	valid-auc:0.98094
[30]	train-auc:0.99884	valid-auc:0.98591
[40]	train-auc:0.99925	valid-auc:0.98565
[50]	train-auc:0.99980	valid-auc:0.98726
......
[310]	train-auc:1.00000	valid-auc:0.99140
[320]	train-auc:1.00000	valid-auc:0.99135
[330]	train-auc:1.00000	valid-auc:0.99150
[340]	train-auc:1.00000	valid-auc:0.99150
[350]	train-auc:1.00000	valid-auc:0.99150
[356]	train-auc:1.00000	valid-auc:0.99135

4.3 特征重要程度情况

        可以看出,最重要的几个特征分别是BMI、酒精摄入量、饮食质量评分、ADL得分、HDL、LDL、收缩压、MIMSE得分、年龄、舒张压、记忆衰退等。

4.4 模型性能评估

4.4.1 AUC 指标评估

# predict train
predict_train = model.predict(dtrain)
train_auc = evaluate_score(predict_train, y_train)

# predict validate
predict_valid = model.predict(dvalid)
valid_auc = evaluate_score(predict_valid, y_valid)

# predict test
dtest = xgb.DMatrix(X_test, feature_names=df_columns)
predict_test = model.predict(dtest)
test_auc = evaluate_score(predict_test, y_test)

print('训练集 auc = {:.7f} , 验证集 auc = {:.7f} , 测试集 auc = {:.7f}\n'.format(train_auc, valid_auc, test_auc))
训练集 auc = 1.0000000 , 验证集 auc = 0.9914012 , 测试集 auc = 0.9797993

4.4.2 测试集预测 ROC 曲线

4.4.3 测试集预测结果混淆矩阵计算

5. 基于机器学习的阿尔兹海默症智能分析预测系统

5.1 系统首页

5.2 阿尔兹海默症在线检测

6. 结论

        本项目旨在利用机器学习技术,结合临床数据和生物标志物,通过 XGBoost 机器学习模型来预测阿尔兹海默症发病风险,测试集预测 AUC 达到 97.9%,并利用 Flask、Bootstrap、Ajax 构建一个智能分析预测系统,以期在早期阶段识别阿尔兹海默症患者,为临床治疗提供支持。

 欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。技术交流、源码获取认准下方 CSDN 官方提供的师姐 QQ 名片 :)

精彩专栏推荐订阅:

1. Python数据挖掘精品实战案例

2. 计算机视觉 CV 精品实战案例

3. 自然语言处理 NLP 精品实战案例

  • 15
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
基于 pywebio 和 pytorch 的阿尔兹海默智能诊断系统可以帮助医生和患者更准确地进行阿尔兹海默症的诊断和监测。 首先,系统通过pywebio实现用户界面,患者或医生可以通过Web浏览器访问系统系统提供了一系列与阿尔兹海默症相关的问题和测试,其中包括问卷调查、记忆力测试和认知测试等。用户可以根据系统的指引完成这些测试,并通过系统的反馈了解自己的阿尔兹海默症风险。 其次,系统基于pytorch构建了深度学习模型,该模型通过分析用户在测试中的答案和表现来评估他们是否患有阿尔兹海默症。模型使用大量的医学数据来训练,可以准确地判断用户的阿尔兹海默症风险水平。当用户完成测试后,系统会自动将用户的数据传输给模型进行分析,然后返回诊断结果。 最后,系统还提供了个性化的建议和治疗方案。系统会根据用户的诊断结果和风险水平,为他们推荐适当的医疗机构和专家,并提供相关的阿尔兹海默症管理和预防建议,以帮助用户更好地控制疾病进展并提高生活质量。 总之,基于pywebio和pytorch的阿尔兹海默智能诊断系统结合了简便易用的用户界面和准确可靠的深度学习模型,为医生和患者提供了一个便捷、准确的阿尔兹海默症诊断和管理工具。这将有助于早期发现和治疗阿尔兹海默症,并帮助患者改善生活质量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Python极客之家

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

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

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

打赏作者

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

抵扣说明:

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

余额充值