详解 Scikit-learn 的 model_selection.train_test_split函数:将数据集分为训练集和测试集

  • Post category:Python

Scikit-learn (简称 sklearn) 是一个广泛使用的 Python 机器学习库,包含许多用于不同机器学习任务的函数和工具。其中,sklearn.model_selection.train_test_split 函数提供了一个将数据集拆分为训练集和测试集的功能,可以帮助我们评估学习算法的性能。下面是详细说明:

train_test_split 函数的作用

train_test_split 函数用于划分数据集为训练集和测试集。

我们通常会将数据分为训练集和测试集,训练集用于拟合模型,测试集用于评估模型的性能。使用 train_test_split 函数可以快速地将数据集按照一定的比例划分为训练集和测试集。

train_test_split 函数的参数说明

train_test_split 函数可以接受多组参数,包括需要划分的数据集、划分比例、随机数种子等。下面是 train_test_split 函数的参数说明:

train_test_split(*arrays, test_size=None, train_size=None, random_state=None, shuffle=True, stratify=None)

参数说明:

  • 第一个参数:需要划分的数据集,可以是其中的一个或多个数组,多个数组将被拼接起来。
  • test_size:测试集的比例,如果为数字,则表示按比例划分,如果为浮点数,则表示按照绝对数量划分。
  • train_size:训练集的比例,同 test_size。
  • random_state:随机数种子,用于控制数据的随机划分。不同的种子会得到不同的划分结果,但是在相同种子下的结果是稳定的。
  • shuffle:是否进行随机划分,默认为 True,即划分前先打乱数据。
  • stratify:按某个变量分层划分,保证训练集和测试集中的样本比例相同。

其中,test_size 和 train_size 必须且只能有一个为 None,默认情况下,train_size 会根据 test_size 的补数计算。如果两者都为 None,则默认训练集和测试集的比例均为 0.25。

train_test_split 函数的使用方法

train_test_split 函数的使用方法非常简单,下面给出一个基本的例子:

from sklearn.model_selection import train_test_split

X = [[0, 1], [2, 3], [4, 5], [6, 7], [8, 9]]
y = [0, 1, 2, 3, 4]

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

print(X_train)
print(X_test)
print(y_train)
print(y_test)

上面的代码中,X 是特征矩阵,y 是目标变量,train_test_split 函数将 X 和 y 划分为训练集和测试集,其中测试集占总样本的 30%。

另外,我们还可以使用 stratify 参数对数据进行分层划分。下面是一个分层划分的例子:

from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris

iris = load_iris()

X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3, stratify=iris.target)

print(y_train)
print(y_test)

在这个例子中,我们使用了 iris 数据集进行特征分类任务,其中 stratify 参数使用目标变量 iris.target 进行分层划分,保证了训练集和测试集中的目标变量比例相同。

总结

sklearn.model_selection.train_test_split 函数是 sklearn 中常用的数据划分工具之一,可以将数据集按照一定的比例划分为训练集和测试集,用于评估模型性能。在使用时我们需要注意对各参数的设置,特别是随机数种子和随机划分是否开启等。通过反复试验,我们可以选择最佳的数据划分策略。