4. 数据集加载与探索:使用 Scikit-learn 加载经典数据集

在构建 XGBoost 特征筛选流程之前,第一步是获取并理解数据。本章将使用 Scikit-learn 内置的经典数据集,演示如何完成数据加载、概览、缺失值检查与描述性统计。这些步骤是后续特征工程与模型训练的基础,确保数据质量与结构清晰。

4.1 数据集选择与加载

Scikit-learn 提供了多个经典数据集,适用于回归与分类任务。本教程选用以下两个代表性数据集:

数据集名称 任务类型 样本数 特征数 目标变量
波士顿房价 (Boston Housing) 回归 506 13 房价中位数 (MEDV)
乳腺癌 (Breast Cancer) 二分类 569 30 恶性/良性 (0/1)

加载数据集的代码非常简洁,使用 load_boston() 或 load_breast_cancer() 函数即可返回一个包含数据与元信息的 Bunch 对象。

from sklearn.datasets import load_boston, load_breast_cancer
import pandas as pd

# 加载波士顿房价数据集
boston = load_boston()
X_boston = pd.DataFrame(boston.data, columns=boston.feature_names)
y_boston = pd.Series(boston.target, name='MEDV')

# 加载乳腺癌数据集
cancer = load_breast_cancer()
X_cancer = pd.DataFrame(cancer.data, columns=cancer.feature_names)
y_cancer = pd.Series(cancer.target, name='target')

print('波士顿房价数据集形状:', X_boston.shape)
print('乳腺癌数据集形状:', X_cancer.shape)
提示:Scikit-learn 1.2 版本后,波士顿房价数据集因伦理问题被标记为“已弃用”,但仍可通过 load_boston() 加载。本教程使用该数据集仅用于教学演示,实际项目中建议使用其他回归数据集替代。

4.2 数据概览与结构检查

加载数据后,首先通过 .info() 方法快速了解数据框的结构,包括列名、非空计数与数据类型。这是发现潜在数据类型错误或缺失值的第一步。

print("=== 波士顿房价数据集概览 ===")
X_boston.info()

print("\n=== 乳腺癌数据集概览 ===")
X_cancer.info()

输出结果会显示:

  • 列名与数据类型:所有特征均为数值型(float64),无需额外类型转换。
  • 非空计数:两个数据集的每一列非空计数均等于样本总数,表明无缺失值。
  • 内存占用:数据集规模较小,内存占用在几十 KB 级别,适合快速实验。

4.3 缺失值检查

虽然 Scikit-learn 的经典数据集通常不含缺失值,但实际项目中缺失值处理是必要环节。使用 isnull().sum() 可以精确统计每列的缺失数量。

# 检查缺失值
missing_boston = X_boston.isnull().sum()
missing_cancer = X_cancer.isnull().sum()

print("波士顿房价缺失值统计:")
print(missing_boston[missing_boston > 0] if any(missing_boston > 0) else "无缺失值")

print("\n乳腺癌缺失值统计:")
print(missing_cancer[missing_cancer > 0] if any(missing_cancer > 0) else "无缺失值")
注意:即使数据集无缺失值,在后续特征筛选过程中,由于特征组合或衍生特征生成,仍可能引入空值。建议在特征筛选的每个阶段都保留缺失值检查步骤。

4.4 描述性统计

描述性统计提供每个特征的集中趋势、离散程度与分布形态,帮助识别异常值与量纲差异。使用 .describe() 方法生成统计摘要。

print("=== 波士顿房价特征描述性统计 ===")
print(X_boston.describe().round(2))

print("\n=== 乳腺癌特征描述性统计 ===")
print(X_cancer.describe().round(2))

关键统计指标解读:

  • 均值与标准差:反映特征的中心位置与波动程度。例如波士顿房价数据集中 RM(平均房间数)均值为 6.28,标准差为 0.70,说明大部分样本房间数在 5.58~6.98 之间。
  • 最小值与最大值:用于检测异常值。若某特征最小值或最大值偏离均值超过 3 个标准差,需进一步分析。
  • 四分位数:25%、50%(中位数)、75% 分位数展示数据分布偏态。例如乳腺癌数据集中 mean radius 的中位数为 13.37,接近均值 14.13,分布相对对称。

4.5 数据分布可视化(内联 SVG)

为了直观理解特征分布,下面使用内联 SVG 绘制波士顿房价数据集中两个关键特征(RM 与 LSTAT)的分布对比图。

波士顿房价关键特征分布对比 RM(平均房间数) 均值: 6.28 标准差: 0.70 LSTAT(低地位人口比例) 均值: 12.65 标准差: 7.16 RM 分布相对集中(标准差小),LSTAT 分布较分散(标准差大),两者对房价影响方向相反

4.6 特征相关性初步分析

在特征筛选前,了解特征与目标变量之间的相关性有助于初步判断特征重要性。使用 .corrwith() 计算每个特征与目标变量的相关系数。

# 计算特征与目标变量的 Pearson 相关系数
corr_boston = X_boston.corrwith(y_boston).sort_values(ascending=False)
corr_cancer = X_cancer.corrwith(y_cancer).sort_values(ascending=False)

print("=== 波士顿房价特征与目标相关性(Top 5)===")
print(corr_boston.head(5))

print("\n=== 乳腺癌特征与目标相关性(Top 5)===")
print(corr_cancer.head(5))

输出示例:

  • 波士顿房价:RM(0.70)与 ZN(0.36)呈正相关;LSTAT(-0.74)与 PTRATIO(-0.51)呈负相关。
  • 乳腺癌:worst concave points(0.79)与 worst perimeter(0.78)与恶性程度高度正相关。
关键结论:相关性分析为特征筛选提供第一轮过滤依据。高相关性特征(|r| > 0.7)通常对模型贡献较大,但需注意多重共线性问题,后续 XGBoost 特征重要性会进一步验证。

4.7 数据探索流程总结

下图总结了数据集加载与探索的标准流程,适用于任何机器学习项目。

数据集加载与探索标准流程 加载数据集 数据概览 缺失值检查 描述性统计 相关性分析 数据准备完成 缺失值处理在后续章节展开