用户指南:糖尿病数据集
sklearn.datasets
提供的 糖尿病数据集 是一个内置的回归分析数据集,适合用于回归任务的练习或模型性能测试。以下是如何高效使用该数据集的详细指南。
数据集概述
- 样本数:442 位患者。
- 特征数:10 个基础生理变量(如 BMI、血压等)。
- 目标值:一年后的疾病进展量化指标。
如何加载数据集
1. 加载数据
from sklearn.datasets import load_diabetes
# 加载数据集
diabetes = load_diabetes()
2. 访问数据组件
- 特征数据 (
diabetes.data
):默认为形状为(442, 10)
的 NumPy 数组。 - 目标值 (
diabetes.target
):形状为(442,)
的 NumPy 数组。 - 特征名称 (
diabetes.feature_names
):特征名称列表。 - 数据集描述 (
diabetes.DESCR
):数据集的详细描述。
load_diabetes
函数的主要参数
函数签名
load_diabetes(*, return_X_y=False, as_frame=False, scaled=True)
参数 | 说明 |
---|---|
return_X_y | 如果设为 True ,返回 (X, y) 元组,而不是字典形式的数据。 |
as_frame | 如果设为 True ,data 和 target 将以 Pandas 的 DataFrame 和 Series 形式返回。 |
scaled | 如果设为 True ,特征数据已标准化(均值为 0,方差为 1)。如果设为 False ,返回未标准化的原始数据。 |
数据集探索
示例 1:查看数据结构
print("特征数据形状:", diabetes.data.shape)
print("目标值形状:", diabetes.target.shape)
print("特征名称:", diabetes.feature_names)
示例 2:以 Pandas DataFrame 形式加载
diabetes_df = load_diabetes(as_frame=True)
print(diabetes_df.frame.head()) # 查看前几行数据
数据可视化
1. 绘制特征与目标值的关系图
import matplotlib.pyplot as plt
import pandas as pd
# 加载为 DataFrame 格式
diabetes_df = load_diabetes(as_frame=True)
data = diabetes_df.data
target = diabetes_df.target
# 示例:绘制 BMI 与目标值的散点图
plt.scatter(data['bmi'], target, alpha=0.5)
plt.xlabel('BMI')
plt.ylabel('疾病进展量化指标')
plt.title('BMI 与疾病进展的关系')
plt.show()
2. 绘制特征相关性热力图
import seaborn as sns
# 合并特征数据和目标值
df = diabetes_df.frame
correlation = df.corr()
# 绘制热力图
sns.heatmap(correlation, annot=True, cmap="coolwarm")
plt.title("特征相关性热力图")
plt.show()
训练集与测试集划分
在应用机器学习模型之前,建议划分数据集:
from sklearn.model_selection import train_test_split
X, y = load_diabetes(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
模型训练示例
使用线性回归
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
# 训练模型
model = LinearRegression()
model.fit(X_train, y_train)
# 预测并评估
y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
print("均方误差(MSE):", mse)
特征重要性分析
使用模型的特征系数
import numpy as np
# 输出特征的重要性
coef = model.coef_
feature_names = load_diabetes().feature_names
for name, importance in zip(feature_names, coef):
print(f"{name}: {importance:.4f}")
高级用法
手动标准化数据
如果设置 scaled=False
,可以手动对数据进行标准化:
from sklearn.preprocessing import StandardScaler
diabetes_unscaled = load_diabetes(scaled=False)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(diabetes_unscaled.data)
实用建议
- 使用
as_frame=True
,方便利用 Pandas 进行数据探索。 - 如果未标准化数据(
scaled=False
),请对数据进行预处理(如归一化或标准化)。 - 探索特征之间的相互作用,以提升模型性能。
- 使用交叉验证(
sklearn.model_selection.cross_val_score
)进行更稳健的模型评估。