前言
一、我的环境
- 电脑系统:Windows 11
- 语言环境:Python 3.9.7
- 编辑器:Jupyter Lab
二、糖尿病探索与预测
1. 数据预处理
1.1 数据导入
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('F:\\博士期间\\课程学习\\机器学习\\365训练营\\data\\dia.xls')
DataFrame.head()
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/32317807138247138338cc6624c9d8a4.png)
DataFrame.shape
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/3a51db9edff84d95bf9e5f63a12deac4.png)
1.2 数据检查
print('数据缺失值---------------------------------')
print(DataFrame.isnull().sum())
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/b8afcfe92a6944baaa8d1e2c1f9380fb.png)
print('数据重复值---------------------------------')
print('数据集的重复值为:'f'{DataFrame.duplicated().sum()}')
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/527a54aea42241fabeb5208e90f6add3.png)
2. 数据分析
2.1 数据分布分析
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
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()
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/f2e72c02e80041c0823af8d7d9dd1077.png)
2.2 相关性分析
!pip install plotly
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)
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/1a197bc2d08b40738e490dd19c2cc92b.png)
3. 随机的森林模型
3.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 性能评估
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)
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/7356ce08cf394310873648d6ac110083.png)
4.2 相关性分析
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()
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/f1382cc1c6044959937acf0637bfe72b.png)
三、心得体会
1. 相关性分析对模型构建的作用
特征选择:通过分析不同特征之间的相关性,可以识别出与目标变量高度相关的特征。这有助于选择对模型预测能力有显著影响的特征,同时去除那些相关性低或冗余的特征。
数据理解:相关性分析可以揭示数据集中变量之间的关系,帮助我们更好地理解数据的内在结构和模式。
避免多重共线性:在回归分析中,如果特征之间存在高度相关性(多重共线性),可能会导致模型的参数估计不稳定。通过相关性分析,可以识别并处理这些问题。
模型简化:通过识别并移除相关性高的特征,可以简化模型,减少模型的复杂度,提高模型的泛化能力。
特征工程:相关性分析可以启发特征工程的灵感,比如通过组合高度相关的特征来创建新的特征,或者通过转换特征来降低相关性。
异常值检测:在某些情况下,相关性分析可以帮助识别数据中的异常值或离群点,这些异常值可能会对模型的性能产生负面影响。
模型假设检验:某些模型(如线性回归)对数据的分布和变量间的关系有一定的假设。相关性分析可以帮助检验这些假设是否成立。
增强模型解释性:通过识别最重要的特征,可以增强模型的解释性,使得模型的决策过程更加透明。
指导模型选择:不同的模型可能对特征之间的相关性敏感度不同。相关性分析的结果可以帮助选择更适合数据特性的模型。
提高预测准确性:通过选择与目标变量最相关的特征,可以提高模型的预测准确性。