如何在Python中将数据集分割成训练集和测试集?
在本教程中,我们将学习如何使用Python编程语言将数据集分割成训练集和测试集。
介绍
在创建机器学习和深度学习模型时,我们可能会遇到需要在同一数据集上进行训练和评估的情况。在这种情况下,我们可能希望将数据集分成不同的组或集合,并将每个集合用于一项任务或特定过程(例如训练)。在这种情况下,我们可以使用训练集/测试集。
训练集和测试集的必要性
这是非常重要且简单的预处理技术之一。机器学习模型中常见的难题是过拟合或欠拟合。过拟合是指模型在训练数据上表现非常好,但在未见样本上却无法泛化。如果模型学习了数据中的噪声,则可能会发生这种情况。
另一个问题是欠拟合,其中模型在训练数据上的表现不佳,因此无法很好地泛化。如果训练数据不足,则可能会发生这种情况。
为了克服这些问题,最简单的技术之一是将数据集分成训练集和测试集。训练集用于训练模型或学习模型参数。测试集通常用于评估模型在未见数据上的性能。
一些术语
训练集
用于训练模型的数据集部分。这通常可以取整个数据集的大约70%,但用户可以尝试其他百分比,例如60%或80%,或根据用例而定。数据集的这一部分用于学习和拟合模型的参数。
测试集
用于评估模型的数据集部分。这通常可以取整个数据集的大约30%,但用户可以尝试其他百分比,例如40%或20%,或根据用例而定。
通常,我们将数据集按照我们的需求划分成70:30或80:20等比例的训练集和测试集。
在Python中将数据集分割成训练集和测试集
基本上有三种方法可以实现数据集的分割
使用sklearn的train_test_split
使用numpy索引
使用pandas
让我们简要了解一下上述每种方法
1. 使用sklearn的train_test_split
示例
import numpy as np from sklearn.model_selection import train_test_split x = np.arange(0, 50).reshape(10, 5) y = np.array([0, 1, 1, 0, 1, 0, 0, 1, 1, 0]) x_train, x_test, y_train, y_test = train_test_split( x, y, test_size=0.3, random_state=4) print("Shape of x_train is ",x_train.shape) print("Shape of x_test is ",x_test.shape) print("Shape of y_train is ",y_train.shape) print("Shape of y_test is ",x_test.shape)
输出
Shape of x_train is (7, 5) Shape of x_test is (3, 5) Shape of y_train is (7,) Shape of y_test is (3, 5)
2. 使用numpy索引
示例
import numpy as np x = np.random.rand(100, 5) y = np.random.rand(100,1) x_train, x_test = x[:80,:], x[80:,:] y_train, y_test = y[:80,:], y[80:,:] print("Shape of x_train is ",x_train.shape) print("Shape of x_test is ",x_test.shape) print("Shape of y_train is ",y_train.shape) print("Shape of y_test is ",x_test.shape)
输出
Shape of x_train is (80, 5) Shape of x_test is (20, 5) Shape of y_train is (80, 1) Shape of y_test is (20, 5)
3. 使用pandas sample
示例
import pandas as pd import numpy as np data = np.random.randint(10,25,size=(5,3)) df = pd.DataFrame(data, columns=['col1','col2','col3']) train_df = df.sample(frac=0.8, random_state=100) test_df = df[~df.index.isin(train_df.index)] print("Dataset shape : {}".format(df.shape)) print("Train dataset shape : {}".format(train_df.shape)) print("Test dataset shape : {}".format(test_df.shape))
输出
Dataset shape : (5, 3) Train dataset shape : (4, 3) Test dataset shape : (1, 3)
结论
训练测试分割是python和机器学习任务中非常重要的预处理步骤。它有助于防止过拟合和欠拟合问题。
广告