学习、测试和评估数据
您已准备好数据并渴望开始训练分类器?但要小心:当你的分类器完成时,你需要一些测试数据来评估你的分类器。如果您使用用于学习的数据评估分类器,您可能会看到非常好的结果。我们真正想要测试的是对未知数据进行分类的性能。
为此,我们需要将数据分成两部分:
- 学习算法用来适应或学习模型的训练集
- 用于评估模型泛化性能的测试集
当您考虑机器学习的正常工作方式时,将学习数据和测试数据分开的想法是有道理的。真正现有的系统对现有数据进行训练,如果有其他新数据(来自客户、传感器或其他来源)进来,经过训练的分类器必须预测或分类这些新数据。我们可以在训练期间使用训练和测试数据集对此进行模拟 - 测试数据是对将在生产期间进入系统的“未来数据”的模拟。
在 Python 机器学习教程的这一章中,我们将学习如何使用普通 Python 进行拆分。
我们还将看到不需要手动执行此操作,因为模块中的train_test_split
功能model_selection
可以为我们完成。
如果数据集是按标签排序的,我们将不得不在拆分之前对其进行洗牌。
我们将数据集分为学习(又名训练)数据集和测试数据集。最佳实践是将其拆分为学习、测试和评估数据集。
我们将逐步训练我们的模型(分类器),并且每次都需要测试结果。如果我们只有一个测试数据集。测试结果可能会进入模型。因此,我们将在完整的学习阶段使用评估数据集。当我们的分类器完成后,我们将使用测试数据集对其进行检查,它以前从未“见过”!
然而,在我们的教程中,我们只会使用拆分为学习和测试数据集。
拆分示例:虹膜数据集
我们将使用 Iris 数据集演示之前讨论的主题。
Iris数据集的150个数据集进行排序,即前50个数据对应第一个花类(0=Setosa),接下来的50个对应第二个花类(1=Versicolor),其余数据对应最后一个类(2 = 弗吉尼亚)。
如果我们将数据分成 2/3(学习集)和 1/3(测试集)的比例,学习集将包含前两个类的所有花,测试集将包含第三个花的所有花班级。分类器只能学习两个类,第三个类将完全未知。所以我们迫切需要混合数据。
假设所有的样本都是相互独立的,我们希望在分割数据集之前随机打乱数据集,如上图所示。
下面我们手动拆分数据:
import numpy as np
from sklearn.datasets import load_iris
iris = load_iris ()
查看标签iris.target
向我们表明数据已排序。
虹膜。目标
输出:
数组([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,