L8 糖尿病探索与预测

前言

一、我的环境

  • 电脑系统:Windows 11
  • 语言环境:Python 3.9.7
  • 编辑器:Jupyter Lab

二、糖尿病探索与预测

1. 数据预处理

1.1 数据导入

#数据预处理
#数据导入
import numpy             as np
import pandas            as pd
#Seaborn 是基于 matplotlib 的高级绘图库,用于制作统计图形
import seaborn           as sns
#train_test_split 函数用于将数据集分割为训练集和测试集
from sklearn.model_selection   import train_test_split
import matplotlib.pyplot as plt
#设置 matplotlib 的配置参数,将保存的图像的 DPI(每英寸点数)设置为 500,这将提高图像的清晰度
plt.rcParams['savefig.dpi'] = 500 #图片像素
plt.rcParams['figure.dpi']  = 500 #分辨率

import warnings 
warnings.filterwarnings("ignore")
#默认显示 DataFrame 的前 5 行数据,用于快速查看数据的前几行
DataFrame=pd.read_excel('F:\\博士期间\\课程学习\\机器学习\\365训练营\\data\\dia.xls')
DataFrame.head()

在这里插入图片描述

DataFrame.shape

在这里插入图片描述

1.2 数据检查

#数据检查
# 查看数据是否有缺失值
print('数据缺失值---------------------------------')
print(DataFrame.isnull().sum())

在这里插入图片描述

# 查看数据是否有重复值
print('数据重复值---------------------------------')
print('数据集的重复值为:'f'{DataFrame.duplicated().sum()}')

在这里插入图片描述

2. 数据分析

2.1 数据分布分析

#数据分析
#数据分布分析
import matplotlib.pyplot as plt
#FontProperties用于设置字体
from matplotlib.font_manager import FontProperties

# 使用中文支持的字体
#置图表中的字体为支持中文的字体,这里是SimHei(黑体)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
#用于映射特征名称
feature_map = {
    '年龄': '年龄',
    '低密度脂蛋白胆固醇': '高密度脂蛋白胆固醇',
    '低密度脂蛋白胆固醇': '低密度脂蛋白胆固醇',
    '极低密度脂蛋白胆固醇': '极低密度脂蛋白胆固醇',
    '甘油三酯': '甘油三酯',
    '总胆固醇': '总胆固醇',
    '脉搏': '脉搏',
    '舒张压':'舒张压',
    '高血压史':'高血压史',
    '尿素氮':'尿素氮',
    '尿酸':'尿酸',
    '肌酐':'肌酐',
    '体重检查结果':'体重检查结果'
}
#创建一个新的 matplotlib 图,设置图形的大小为宽 15 英寸,高 10 英寸
plt.figure(figsize=(15, 10))
#使用 for 循环遍历 feature_map 字典的每一项,
#并通过 enumerate 函数从 1 开始对它们进行编号
for i, (col, col_name) in enumerate(feature_map.items(), 1):
    #设置当前图表的子图布局为 3 行 4 列,i 指定当前子图的位置
    plt.subplot(3, 4, i)
    #boxplot 函数绘制箱线图,箱线图的 x 轴是 '是否糖尿病' 列,y 轴是当前循环中的列 col
    sns.boxplot(x=DataFrame['是否糖尿病'], y=DataFrame[col])
    #设置当前子图的标题,使用 f-string 格式化输出,fontsize 设置标题的字体大小
    plt.title(f'{col_name}的箱线图', fontsize=14)
    #设置当前子图的 y 轴标签为 '数值',fontsize 设置标签的字体大小
    plt.ylabel('数值', fontsize=12)
    #在当前子图的 y 轴上添加网格线,网格线样式为虚线,透明度为 0.7
    plt.grid(axis='y', linestyle='--', alpha=0.7)

plt.tight_layout()
plt.show()

在这里插入图片描述

2.2 相关性分析


#相关性分析
!pip install plotly
import plotly
import plotly.express as px

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

# 相关矩阵生成函数
#定义corr_generate函数,接受一个 DataFrame df 作为参数
def corr_generate(df):
    fig = px.imshow(df,text_auto=True,aspect="auto",color_continuous_scale='RdBu_r')
    fig.show()

# 生成相关矩阵
corr_generate(df_corr)

在这里插入图片描述

3. 随机的森林模型

3.1 数据集构建

#数据集构建
# '高密度脂蛋白胆固醇'字段与糖尿病负相关,故而在 X 中去掉该字段,
#并将剩余的数据赋值给变量 X。这里 axis=1 表示操作的是列而不是行。
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)

3.2定义模型

#定义模型
from sklearn.ensemble import RandomForestClassifier

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

4. 模型评估

4.1 性能评估

#性能评估                                                 
# 使用随机森林进行预测
#classification_report 函数,用于生成分类性能的文本报告
from sklearn.metrics import classification_report

# 使用随机森林进行预测
#使用训练好的随机森林模型对测试集 test_X 进行预测,并将预测结果存储在 pred_y_rf 中
pred_y_rf = rf_clf.predict(test_X)
class_report_rf = classification_report(test_y, pred_y_rf)
print(class_report_rf)

在这里插入图片描述

4.2 相关性分析

#相关性分析
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
#从训练好的随机森林模型 rf_clf 中获取特征重要度
feature_importances = rf_clf.feature_importances_
#创建一个 Pandas DataFrame,其中包含两列:
#一列是特征名称(来自 X DataFrame 的列名),另一列是对应的特征重要度
features_rf = pd.DataFrame({'特征': X.columns, '重要度': feature_importances})
#按照 '重要度' 列的值对 DataFrame 进行降序排序,inplace=True 表示直接在原始 DataFrame 上进行排序
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()

在这里插入图片描述

三、心得体会

1. 相关性分析对模型构建的作用

特征选择:通过分析不同特征之间的相关性,可以识别出与目标变量高度相关的特征。这有助于选择对模型预测能力有显著影响的特征,同时去除那些相关性低或冗余的特征。

数据理解:相关性分析可以揭示数据集中变量之间的关系,帮助我们更好地理解数据的内在结构和模式。

避免多重共线性:在回归分析中,如果特征之间存在高度相关性(多重共线性),可能会导致模型的参数估计不稳定。通过相关性分析,可以识别并处理这些问题。

模型简化:通过识别并移除相关性高的特征,可以简化模型,减少模型的复杂度,提高模型的泛化能力。

特征工程:相关性分析可以启发特征工程的灵感,比如通过组合高度相关的特征来创建新的特征,或者通过转换特征来降低相关性。

异常值检测:在某些情况下,相关性分析可以帮助识别数据中的异常值或离群点,这些异常值可能会对模型的性能产生负面影响。

模型假设检验:某些模型(如线性回归)对数据的分布和变量间的关系有一定的假设。相关性分析可以帮助检验这些假设是否成立。

增强模型解释性:通过识别最重要的特征,可以增强模型的解释性,使得模型的决策过程更加透明。

指导模型选择:不同的模型可能对特征之间的相关性敏感度不同。相关性分析的结果可以帮助选择更适合数据特性的模型。

提高预测准确性:通过选择与目标变量最相关的特征,可以提高模型的预测准确性。
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值