Scikit-learn Python机器学习 - 数据集的划分
锋哥原创的Scikit-learn Python机器学习视频教程:
2026版 Scikit-learn Python机器学习 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili
课程介绍
本课程主要讲解基于Scikit-learn的Python机器学习知识,包括机器学习概述,特征工程(数据集,特征抽取,特征预处理,特征降维等),分类算法(K-临近算法,朴素贝叶斯算法,决策树等),回归与聚类算法(线性回归,欠拟合,逻辑回归与二分类,K-means算法)等。
Scikit-learn Python机器学习 - 数据集的划分
我们需要把数据集进行划分,一部分用于训练构建模型,另外一部分用于测试。常见划分比例8:2,7:3,或者75%:25%。
train_test_split()
是 Scikit-learn 中最常用的数据集划分方法之一,用于将数据集随机划分为训练子集和测试子集。这个方法简单易用,但功能强大,提供了多个参数来满足不同的数据划分需求。
基本语法:
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=None, train_size=None, random_state=None, shuffle=True, stratify=None
)
参数详解:
-
X 和 y
-
X: 特征数据集,通常是二维数组或矩阵
-
y: 目标变量,通常是一维数组
-
test_size 和 train_size
-
test_size: 测试集的比例或数量
-
浮点数 (0.0-1.0): 表示测试集占总数据集的比例
-
整数: 表示测试集的绝对样本数
-
默认: None (使用补集,即 1 - train_size)
-
-
train_size: 训练集的比例或数量
-
浮点数 (0.0-1.0): 表示训练集占总数据集的比例
-
整数: 表示训练集的绝对样本数
-
默认: None (使用补集,即 1 - test_size)
-
注意:test_size
和 train_size
只需指定一个即可。
-
random_state
-
整数: 设置随机种子,确保每次划分结果相同
-
默认: None (每次划分结果不同)
-
在需要可重复实验时非常有用
-
shuffle
-
布尔值: 是否在划分前打乱数据
-
默认: True
-
对于时间序列数据,通常设置为 False
-
stratify
-
数组-like 对象: 用于分层抽样,保持划分后各类别比例与原始数据集相同
-
默认: None (不进行分层抽样)
-
常用于分类问题中类别不平衡的情况
使用实例:
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_splitif __name__ == '__main__':# 加载鸢尾花数据集iris = load_iris()print('鸢尾花数据集:', iris)print('数据集描述:', iris['DESCR'])print('特征名称:', iris.feature_names)print('特征数据值:', iris.data)print('特征数据形状:', iris.data.shape)print('目标名称:', iris.target_names)print('目标值:', iris.target)# 数据集划分x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2)print("训练集的特征值:", x_train, x_train.shape)print("训练集的目标值:", y_train, len(y_train))print("测试集的特征值:", x_test, x_test.shape)print("测试集的目标值:", y_test, len(y_test))
运行输出: