专栏:机器学习
个人主页:云端筑梦狮
一.数据集读取方法(常用功能用熟即可不用背下来)
以例子代表需要的知识点和方法。
1. 导入必要的库
from sklearn.datasets import load_iris
import numpy as np
load_iris()
:用于加载鸢尾花数据集的函数。(其他的数据集也按照类似的方式进行导入)
iris_data = load_iris()
print(iris_data)
print(type(iris_data))
load_iris()
返回一个类似字典的Bunch
对象,包含数据、标签、特征名等信息。print(iris_data)
会输出数据集的完整内容,包括 DESCR(描述信息)、data(特征数据)、target(标签数据)等。type(iris_data)
显示其类型
查看特征数据和标签数据
print(iris_data.data[:10]) # 查看前10条样本的特征值
print(iris_data.target[:10]) # 查看前10条样本的标签值
print(iris_data.feature_names) # 查看特征名称
iris_data.data
:是一个形状为(150, 4)
的二维数组,包含 150 个样本的 4 个特征(花萼长度、花萼宽度、花瓣长度、花瓣宽度)。iris_data.target
:是一个长度为 150 的一维数组,包含样本的分类标签(0、1、2 分别代表山鸢尾、变色鸢尾、维吉尼亚鸢尾)。iris_data.feature_names
:列出了四个特征的名称。
使用return_X_y=True
直接获取特征和标签
x, y = load_iris(return_X_y=True)
print(x[:10]) # 查看前10条样本的特征值
print(y[:10]) # 查看前10条样本的标签值
return_X_y=True
参数使load_iris()
直接返回两个数组:x
(特征数据)和y
(标签数据),适合快速进行模型训练。
以 DataFrame 格式加载数据集
iris_data = load_iris(as_frame=True)
print(iris_data.frame)
as_frame=True
参数使load_iris()
返回一个包含 DataFrame 对象。iris_data.frame
是一个 Pandas DataFrame,包含所有样本的特征和标签,方便进行数据探索和分析。
大家一定要在自己的机器上面运行一下这个代码来熟悉一下
二.数据集的切分方法
from sklearn.model_selection import train_test_split
import numpy as np
train_test_split
:用于将数据集拆分为训练集和测试集的函数。
a = np.arange(12).reshape(6, 2)
print("特征矩阵a:\n", a)b = np.array([0, 1, 0, 1, 0, 1])
- 特征矩阵
a
:一个 6 行 2 列的数组,模拟 6 个样本的二维特征 - 标签数组
b
第一次划分
X_train, X_test, y_train, y_test = train_test_split(a, b, random_state=42)
-
random_state=42
:固定随机种子,确保每次运行代码时划分结果相同(便于复现)。未指定test_size
时,默认测试集占比为 25%(即 6 个样本中,测试集为 1.5 个样本,向上取整为 2 个样本)。 -
训练集标签: [1 0 0 1] # 包含2个0和2个1 测试集标签: [0 1] # 包含1个0和1个1
第二次划分:使用 stratify
参数
X_train_strat, X_test_strat, y_train_strat, y_test_strat = train_test_split(a, b, random_state=42, stratify=b
)
-
stratify=b
:强制划分后的训练集和测试集的类别比例与原始数据 完全一致。- 原始数据中标签
0
和1
各占 3 个(比例 1:1),因此:- 训练集:4 个样本,其中 0 和 1 各 2 个。
- 测试集:2 个样本,其中 0 和 1 各 1 个。
- 原始数据中标签
-
训练集标签: [0 1 1 0] # 严格包含2个0和2个1 测试集标签: [0 1] # 严格包含1个0和1个1
第三次划分:修改 random_state
X_train_new, X_test_new, y_train_new, y_test_new = train_test_split(a, b, random_state=24)
random_state=24
:使用不同的随机种子,生成与之前不同的划分结果。-
训练集标签: [0 1 1 0] # 包含2个0和2个1 测试集标签: [0 1] # 包含1个0和1个1
stratify
参数的核心作用
当处理 类别不平衡数据(如 100 个样本中 90 个正例、10 个反例)时,stratify
参数尤为重要:
- 不使用
stratify
:随机划分可能导致测试集中只有正例(如 25 个样本全为正例),无法评估模型对反例的预测能力。 - 使用
stratify
:强制测试集中保持 90% 正例、10% 反例的比例,确保模型评估的公平性。
常见参数扩展
test_size=0.3
:指定测试集占比为 30%。shuffle=False
:禁用数据打乱(按原始顺序划分)。random_state
:控制划分的随机性,确保结果可复现。stratify
:保证训练集和测试集的类别比例与原始数据一致,适用于类别不平衡场景。- 默认划分比例为 75% 训练集 + 25% 测试集,可通过
test_size
调整。