📌  相关文章
📜  python train test val split - Python (1)

📅  最后修改于: 2023-12-03 15:19:01.876000             🧑  作者: Mango

Python Train-Test-Validation Split

有时我们需要在训练机器学习模型时将数据集划分为训练集、测试集和验证集。这个过程可以帮助我们评估模型在未见过的数据上的性能,并从中获得一些见解,从而改善模型的泛化能力。

Python中有很多库可以实现数据集的拆分,在此我们将介绍其中的两个:scikit-learn和numpy。

scikit-learn实现数据集的划分
from sklearn.model_selection import train_test_split

X = ... # 特征
y = ... # 目标变量

# 划分比例为:训练集:测试集:验证集 = 6:2:2
X_train, X_test_val, y_train, y_test_val = train_test_split(X, y, test_size=0.4, random_state=0)
X_test, X_val, y_test, y_val = train_test_split(X_test_val, y_test_val, test_size=0.5, random_state=0)

我们可以看到,在scikit-learn中,我们可以很容易地将数据集拆分为训练集、测试集和验证集。train_test_split()函数接受一些参数,比如test_sizerandom_statetest_size指定测试集和验证集占总数据集的比例,random_state用于指定随机种子,从而使拆分结果可复现。

numpy实现数据集的划分
import numpy as np

X = ... # 特征
y = ... # 目标变量
n_samples = X.shape[0]

# 划分比例为:训练集:测试集:验证集 = 6:2:2
train_idx, test_val_idx = train_test_split(np.arange(n_samples), test_size=0.4, random_state=0)
test_idx, val_idx = train_test_split(test_val_idx, test_size=0.5, random_state=0)

X_train, y_train = X[train_idx], y[train_idx]
X_test, y_test = X[test_idx], y[test_idx]
X_val, y_val = X[val_idx], y[val_idx]

我们也可以像上面的例子一样使用numpy将数据集拆分为训练集、测试集和验证集。在此,我们需要使用numpy中的arange()函数生成与样本数量相同的索引数组,并将其传递给train_test_split()函数进行拆分。最后,我们可以使用这些索引数组从原始数据集中提取特定划分的数据样本。

以上就是Python中实现数据集划分的两种方法。通过将数据集划分为训练集、测试集和验证集,我们可以为我们的机器学习模型提供更精确的评估,并进一步优化模型以获得更好的性能。