4.1 Scikit-learn 内置数据集
Scikit-learn内置数据集:加载方法、经典数据集及结构解析指南
本文详细讲解Scikit-learn内置数据集的加载方法,包括鸢尾花、波士顿房价、手写数字、乳腺癌数据等经典小数据集,以及如何解析数据集的data、feature_names、target、target_names和DESCR结构,适合机器学习新手学习。
Scikit-learn内置数据集入门指南
1. 简介
Scikit-learn(简称sklearn)是Python中一个强大的机器学习库,它内置了多个经典的小型数据集。这些数据集非常适合新手入门,无需从外部文件加载,可以直接用于学习和实验。本章将介绍如何加载这些数据集,并解析它们的基本结构。
2. 经典小数据集介绍
Scikit-learn提供了多个内置数据集,以下是四个最常用的经典数据集:
- 鸢尾花数据集(Iris):用于分类问题,包含150个样本,每个样本有4个特征(如花萼和花瓣的长度、宽度),目标分为3个类别(山鸢尾、变色鸢尾、维吉尼亚鸢尾)。这是最常用的入门数据集之一。
- 波士顿房价数据集(Boston Housing):用于回归问题,包含506个样本,有13个特征(如犯罪率、房间数等),目标是预测房屋价格。但请注意:从Scikit-learn 1.2版本开始,由于伦理问题,这个数据集被移除了,旧版本仍可使用,新手建议使用其他数据集替代。
- 手写数字数据集(Digits):用于多分类问题,包含1797个手写数字图像样本,每个图像为8x8像素(64个特征),目标是识别0到9的数字。
- 乳腺癌数据集(Breast Cancer):用于二分类问题,包含569个样本,有30个特征(如肿瘤特性),目标是预测肿瘤为良性或恶性。
这些数据集覆盖了分类、回归和图像识别等常见机器学习任务,非常适合练习。
3. 数据集加载方法
Scikit-learn提供了方便的load_*()函数来加载这些数据集。您只需从sklearn.datasets模块导入相应函数即可。以下是加载示例:
from sklearn import datasets
# 加载鸢尾花数据集
iris = datasets.load_iris()
# 加载波士顿房价数据集(旧版本可用,新版本已移除)
# boston = datasets.load_boston() # 注意:在Scikit-learn 1.2+中可能引发警告或错误
# 加载手写数字数据集
digits = datasets.load_digits()
# 加载乳腺癌数据集
cancer = datasets.load_breast_cancer()
注意:对于波士顿房价数据集,由于伦理问题(数据集包含潜在偏见),Scikit-learn 1.2版本后已将其移除。如果您使用新版本,可以忽略这部分或从其他来源(如Kaggle)获取类似数据。新手建议先专注于其他数据集。
4. 数据集结构解析
加载后的数据集是一个类似字典的Bunch对象,包含以下几个关键部分,新手可以轻松理解和访问:
- data:这是一个NumPy数组,存储特征数据。形状通常是(n_samples, n_features),其中n_samples是样本数,n_features是特征数。例如,鸢尾花数据集的
data是一个150x4的矩阵。 - feature_names:这是一个列表,包含每个特征的名称。这有助于理解数据含义。例如,鸢尾花数据集的
feature_names是['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']。 - target:这是一个NumPy数组,存储目标变量(即标签)。对于分类问题,它是类别索引;对于回归问题,它是连续值。例如,鸢尾花数据集的
target是一个包含0、1、2的数组,对应3个类别。 - target_names:这是一个列表,包含目标类别的名称(仅适用于分类问题)。例如,鸢尾花数据集的
target_names是['setosa', 'versicolor', 'virginica']。 - DESCR:这是一个字符串,提供数据集的详细描述,包括来源、特征解释等。打印出来可以了解数据集背景。
示例代码:访问数据集结构
以下是一个简单示例,展示如何加载和检查数据集结构:
from sklearn import datasets
# 加载鸢尾花数据集
iris = datasets.load_iris()
# 查看数据集的各个部分
print("数据集形状:", iris.data.shape) # 输出: (150, 4)
print("特征名称:", iris.feature_names) # 输出: ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
print("目标数组前几个值:", iris.target[:5]) # 输出类似: [0 0 0 0 0]
print("目标类别名称:", iris.target_names) # 输出: ['setosa' 'versicolor' 'virginica']
print("数据集描述(前几行):")
print(iris.DESCR[:500]) # 打印DESCR的前500个字符以查看描述
运行此代码,您将直观地看到数据是如何组织的。例如,对于鸢尾花数据集,data的第一行可能对应一朵花的花萼和花瓣测量值,target的第一行是0,表示它属于'setosa'类别。
5. 总结
通过本章,您学会了如何加载Scikit-learn的内置数据集,并解析其基本结构。这些数据集是机器学习的理想起点,因为它们已经预处理过,且结构清晰。记住:
- 使用
load_*()函数轻松加载数据。 - 熟悉
data、feature_names、target、target_names和DESCR这五个关键部分,它们将帮助您快速理解和使用数据。 - 对于波士顿房价数据集,注意版本兼容问题,新手可以先用其他数据集练习。
在后续章节中,我们将学习如何用这些数据训练简单的机器学习模型。继续前进,享受学习之旅!