如何在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 pandas as pd
df = pd.read_csv("data/iris.csv", header=None,
names=["sepal **-length"** , "sepal-width", "petal-length","petal-width", "class"])
train_df = df.sample(frac=0.7, random_state=4)
test_df = df.drop(train_df.index, axis=0)
print("Shape of train_df is ", train_df.shape)
print("Shape of test_df is ", test_df.shape)
输出
Shape of train_df is (105, 5)
Shape of test_df is (45, 5)
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("数据集形状:{}".format(df.shape))
print("训练集形状:{}".format(train_df.shape))
print("测试集形状:{}".format(test_df.shape))
输出
数据集形状:(5, 3) 训练集形状:(4, 3) 测试集形状:(1, 3)
結論
在Python和机器学习任务中,训练测试拆分是一个非常重要的预处理步骤。它有助于防止过拟合和欠拟合的问题。