慢性肾病数据分析与机器学习模型构建

本文将详细介绍如何对慢性肾病数据集进行完整的分析,主要目标是基于提供的数据预测个体是否会患有慢性肾病。将涵盖以下主题:数据预处理、探索性数据分析模型构建以及模型保存。让开始吧!

导入必要的库

import pandas as pd import numpy as np import matplotlib.pyplot as plt from sklearn.model_selection import GridSearchCV, train_test_split, cross_val_score from sklearn.preprocessing import StandardScaler from sklearn.metrics import r2_score import scipy.stats as stats import seaborn as sns

现在,让读取数据集:

df = pd.read_csv('kidney.csv')

数据集的形状为:

data.shape

输出结果为:(400, 25),表明数据集包含400个样本和25个特征。

数据预处理

首先,查看数据集的信息:

df.info()

接着,统计每个特征的空值数量:

df.isna().sum()

然后,计算相关性矩阵并进行可视化:

df.corr()

发现类别“ckd”和“notckd”的数量分别为250和150,这表明数据集接近不平衡。

探索性数据分析(EDA)

通过条形图来理解目标变量的分布:

df['class'].value_counts().plot(kind='bar', color=['salmon', 'lightblue'], title="肾脏疾病诊断计数")

还检查了年龄列的分布,并绘制了空值的图形。

在这一步,将分类值转换为数值:

data['class'] = data['class'].map({'ckd':1,'notckd':0}) data['htn'] = data['htn'].map({'yes':1,'no':0}) # ... 其他特征的转换

转换后,再次查看相关性矩阵:

plt.figure(figsize = (19,19))sns.heatmap(data.corr(), annot = True, cmap = 'coolwarm')

最后,删除空值,并查看数据集的形状和列名。

模型构建

使用逻辑回归来构建模型:

from sklearn.linear_model import LogisticRegression logreg = LogisticRegression() X = data.iloc[:,:-1] y = data['class'] X_train, X_test, y_train, y_test = train_test_split(X,y, stratify = y, shuffle = True) logreg.fit(X_train,y_train)

模型训练得分为1.0,测试准确度为0.975。

还绘制了混淆矩阵,并计算了真阴性、假阳性、假阴性和真阳性的数量。

K-最近邻分类器

在不平衡类别的情况下,KNN的表现不佳,因此首先平衡类别:

balanced_df = pd.concat([df[df["class"] == 0], df[df["class"] == 1].sample(n = 115, replace = True)], axis = 0) balanced_df.reset_index(drop=True, inplace=True)

然后对数据进行标准化,并调整KNN模型以获得更好的准确度:

ss = StandardScaler() ss.fit(X_train) X_train = ss.transform(X_train) X_test = ss.transform(X_test)

使用网格搜索对KNN模型进行调优,并计算准确度和混淆矩阵。

特征重要性

从逻辑回归模型中获取每个特征的系数,以了解每个特征的权重:

feature_dict=dict(zip(df.columns,list(logreg.coef_[0])))

然后可视化特征重要性:

feature_df=pd.DataFrame(feature_dict,index=[0]).T.plot(kind="bar",legend=False,title="特征重要性") import pickle saved_model = pickle.dumps(logreg) logreg_from_pickle = pickle.loads(saved_model) logreg_from_pickle.predict(X_test)
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485