【机器学习练习】糖尿病预测

一、数据预处理

1. 数据导入

python 复制代码
import numpy             as np
import pandas            as pd
import seaborn           as sns
from sklearn.model_selection   import train_test_split

import matplotlib.pyplot as plt
plt.rcParams['savefig.dpi'] = 500 #图片像素
plt.rcParams['figure.dpi']  = 500 #分辨率

import warnings 
warnings.filterwarnings("ignore")

DataFrame=pd.read_excel(r'D:\Personal Data\Learning Data\DL Learning Data\dia.xls')
DataFrame.head()

2. 数据检查

python 复制代码
# 查看数据是否有缺失值
print('数据缺失值---------------------------------')
print(DataFrame.isnull().sum())

二、数据分析

1. 数据分布分析

python 复制代码
feature_map = {
    '年龄': '年龄',
    '低密度脂蛋白胆固醇': '高密度脂蛋白胆固醇',
    '低密度脂蛋白胆固醇': '低密度脂蛋白胆固醇',
    '极低密度脂蛋白胆固醇': '极低密度脂蛋白胆固醇',
    '甘油三酯': '甘油三酯',
    '总胆固醇': '总胆固醇',
    '脉搏': '脉搏',
    '舒张压':'舒张压',
    '高血压史':'高血压史',
    '尿素氮':'尿素氮',
    '尿酸':'尿酸',
    '肌酐':'肌酐',
    '体重检查结果':'体重检查结果'
}
plt.figure(figsize=(15, 10))

for i, (col, col_name) in enumerate(feature_map.items(), 1):
    plt.subplot(3, 4, i)
    sns.boxplot(x=DataFrame['是否糖尿病'], y=DataFrame[col])
    plt.title(f'{col_name}的箱线图', fontsize=14)
    plt.ylabel('数值', fontsize=12)
    plt.grid(axis='y', linestyle='--', alpha=0.7)

plt.tight_layout()
plt.show()

2. 相关性分析

python 复制代码
import plotly
import plotly.express as px

# 删除列 '卡号'
DataFrame.drop(columns=['卡号'], inplace=True)
# 计算各列之间的相关系数
df_corr = DataFrame.corr()

# 相关矩阵生成函数
def corr_generate(df):
    fig = px.imshow(df,text_auto=True,aspect="auto",color_continuous_scale='RdBu_r')
    fig.show()

# 生成相关矩阵
corr_generate(df_corr)

三、随机森林模型

1. 数据集构建

python 复制代码
# '高密度脂蛋白胆固醇'字段与糖尿病负相关,故而在 X 中去掉该字段
X = DataFrame.drop(['是否糖尿病','高密度脂蛋白胆固醇'],axis=1)
y = DataFrame['是否糖尿病']

train_X, test_X, train_y, test_y = train_test_split(X, y, 
                                                    test_size=0.2,
                                                    random_state=1)

2. 定义模型

python 复制代码
from sklearn.ensemble import RandomForestClassifier

# 构建随机森林模型
rf_clf = RandomForestClassifier(random_state=15)
rf_clf.fit(train_X, train_y)

四、模型评估

1. 性能评估

python 复制代码
from sklearn.metrics import classification_report

# 使用随机森林进行预测
pred_y_rf = rf_clf.predict(test_X)
class_report_rf = classification_report(test_y, pred_y_rf)
print(class_report_rf)

2. 相关性分析

python 复制代码
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签

feature_importances = rf_clf.feature_importances_
features_rf = pd.DataFrame({'特征': X.columns, '重要度': feature_importances})
features_rf.sort_values(by='重要度', ascending=False, inplace=True)
plt.figure(figsize=(6, 5))
sns.barplot(x='重要度', y='特征', data=features_rf)
plt.xlabel('重要度')
plt.ylabel('特征')
plt.title('随机森林特征图')
plt.show()

五、总结

选择特征时,注意选择具有一定波动性,且与待预测值的相关性高的。

相关推荐
天涯海风22 分钟前
检索增强生成(RAG) 缓存增强生成(CAG) 生成中检索(RICHES) 知识库增强语言模型(KBLAM)
人工智能·缓存·语言模型
lxmyzzs2 小时前
基于深度学习CenterPoint的3D目标检测部署实战
人工智能·深度学习·目标检测·自动驾驶·ros·激光雷达·3d目标检测
跟着珅聪学java2 小时前
Apache OpenNLP简介
人工智能·知识图谱
AwhiteV2 小时前
利用图数据库高效解决 Text2sql 任务中表结构复杂时占用过多大模型上下文的问题
数据库·人工智能·自然语言处理·oracle·大模型·text2sql
Black_Rock_br3 小时前
AI on Mac, Your Way!全本地化智能代理,隐私与性能兼得
人工智能·macos
☺����3 小时前
实现自己的AI视频监控系统-第一章-视频拉流与解码2
开发语言·人工智能·python·音视频
fsnine4 小时前
机器学习——数据清洗
人工智能·机器学习
一车小面包4 小时前
逻辑回归 从0到1
算法·机器学习·逻辑回归
小猿姐4 小时前
KubeBlocks AI:AI时代的云原生数据库运维探索
数据库·人工智能·云原生·kubeblocks
算法_小学生4 小时前
循环神经网络(RNN, Recurrent Neural Network)
人工智能·rnn·深度学习