在机器学习中,通常的做法是将数据分成两个不同的集合。这两组是训练集和测试集。顾名思义,训练集用于训练模型,测试集用于测试模型的准确性。
在本教程中,我们将:
- 首先,了解分割数据集的重要性
- 然后看看如何在Python中将数据分成两组
为什么我们需要将数据分为训练集和测试集?
在训练机器学习模型时,我们试图找到一种最能代表所有数据点且误差最小的模式。这样做时,会出现两个常见错误。这些都是过拟合和欠拟合。
欠拟合
欠拟合是指模型甚至无法表示训练数据集中的数据点。在欠拟合的情况下,即使在训练数据集上进行测试,精度也会很低。
欠拟合通常意味着您的模型太简单,无法捕捉数据集的复杂性。
过拟合
当您的模型表示训练数据集有点过于准确时,就会发生过度拟合。这意味着您的模型拟合得太紧密。在过度拟合的情况下,您的模型将无法在新的未见数据上表现良好。过度拟合通常是模型过于复杂的标志。
过拟合和欠拟合都是不可取的。
我们应该测试训练数据吗?
理想情况下,您不应测试训练数据。您的模型可能过度拟合训练集,因此在新数据上会失败。
训练数据集中的良好准确性并不能保证模型在未见过的数据上取得成功。
这就是为什么建议将训练数据与测试数据分开。
基本思想是将测试集用作看不见的数据。
在训练集上训练数据后,您应该在测试集上测试您的模型。
如果您的模型在测试集上表现良好,您可以对您的模型更有信心。
如何在Python中分割训练和测试数据集?
最常见的分流比是80:20。
也就是说,80% 的数据集进入训练集,20% 的数据集进入测试集。
在分割数据之前,请确保数据集足够大。训练/测试分割适用于大型数据集。
让我们动手编写一些代码。
1.导入整个数据集
我们在整个教程中使用 加州住房数据集。
您可以使用pip 命令安装 pandas :
pip install pandas |
使用以下命令将数据集导入 pandas Dataframe:
import pandas as pd housing = pd.read_csv( "/sample_data/california_housing.csv" ) housing.head() |
让我们将中位数收入列视为输出 (Y)。
y = housing.median_income |
同时,我们必须从数据集中删除该列以形成输入向量。
x = housing.drop( 'median_income' ,axis = 1 ) |
您可以使用 Pandas 中的 .head() 方法来查看输入和输出的样子。
x.head() |
y.head() |
现在我们已经准备好了输入和输出向量,我们可以将数据分成训练集和测试集。
2.使用sklearn分割数据
为了分割数据,我们将使用sklearn 中的train_test_split。
train_test_split 根据提供的比例将数据随机分配到训练集和测试集中。
让我们看看它在 python 中是如何完成的。
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size = 0.2 ) |
这里我们使用80:20的分光比。20%的测试数据集用末尾的0.2表示。
要比较不同测试集和训练集的形状,请使用以下代码:
print ( "shape of original dataset :" , housing.shape) print ( "shape of input - training set" , x_train.shape) print ( "shape of output - training set" , y_train.shape) print ( "shape of input - testing set" , x_test.shape) print ( "shape of output - testing set" , y_test.shape) |
这给出了以下输出。
完整代码
分割训练和测试数据的完整代码如下:
import pandas as pd housing = pd.read_csv( "/sample_data/california_housing.csv" ) print (housing.head()) #output y = housing.median_income #input x = housing.drop( 'median_income' ,axis = 1 ) #splitting x_train,x_teinst,y_train,y_test = train_test_split(x,y,test_size = 0.2 ) #printing shapes of testing and training sets : print ( "shape of original dataset :" , housing.shape) print ( "shape of input - training set" , x_train.shape) print ( "shape of output - training set" , y_train.shape) print ( "shape of input - testing set" , x_test.shape) print ( "shape of output - testing set" , y_test.shape) |
结论
在本教程中,我们了解了将数据拆分为训练集和测试集的重要性。此外,我们将数据集导入 pandas Dataframe,然后使用sklearn将数据拆分为训练集和测试集。