如何在Python中将数据集分成训练集和测试集?

如何在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和机器学习任务中,训练测试拆分是一个非常重要的预处理步骤。它有助于防止过拟合和欠拟合的问题。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程