kNN算法:训练、测试和验证

10
我正在从每个包含1000张图像的10个类别中提取图像特征。由于有50个要提取的特征,所以我考虑找到最佳的特征组合来使用。训练、验证和测试集被划分如下:
Training set = 70%
Validation set = 15%
Test set = 15%

我在验证集上使用前向特征选择来找到最佳的特征组合,最后使用测试集来检查整体准确性。请问我是否做得正确?


问题似乎无效 - 如下面的答案所示 - thebluephantom
2个回答

28

因此,对于建立/测试监督机器学习模型的一般工作流程,kNN 是一个例外。特别地,通过 kNN 创建的 模型 只是已有标记数据在某个度量空间中的放置。

换句话说,对于 kNN,不存在训练步骤,因为没有需要构建的模型。kNN 中正在发生的只有模板匹配和插值。

也不存在验证步骤。验证根据迭代次数(训练进程)将模型准确性与训练数据进行比较。过拟合表现为经验曲线上升,并指示训练应停止的点。换句话说,由于没有构建模型,因此没有东西可以验证。

但您仍然可以进行测试-即使用隐藏了目标(标签或分数)的数据来评估预测的质量。

但是,与其他监督式机器学习技术相比,即使对于测试,kNN 也有所不同。特别地,对于 kNN,预测的质量当然取决于数据量,或更精确地说,密度(单位体积内的点数)-即,如果要通过平均最接近其的2-3个点来预测未知值,则最好有靠近要预测的点的点。因此,保持测试集的规模较小,或者更好地使用 k 折交叉验证或留一交叉验证,两者都可以为您提供更全面的模型测试,但不会减少 kNN 邻居数量。


5
既然我需要找到最佳的特征组合,那么我应该在验证集上进行搜索,然后将选定的最佳特征与测试集一起使用。 - klijo
3
如果我在测试集上运行最佳特征选择算法,然后获得最终的准确率,这样做是否会使特征组合对测试集有偏差? - klijo
2
@klijo,经典的 kNN 描述并不包括特征选择算法或类似内容。除此之外,我无法理解您评论中的任何一个问题,但我可以确定它们与 kNN 无关。 - doug
在本质上,这个答案忽略了模型验证的概念,这种情况非常普遍。最好的思考方式可能是从信息空间的角度来考虑;如果你缩小信息空间以提供预测结果的证据,你需要确保它适用于未知数据。 “未知数据”是指没有用于缩小信息空间的数据。这一点无论是否存在模型都是正确的。 - Renel Chesak
1
测试集不应用于选择(缩小信息空间;选择特征;调整参数;以任何方式参与训练/模型构建的过程);这就是验证集的作用。如果您使用测试集进行特征选择、参数调整(KNN中的k)和/或模型选择,则该数据不再是“未见过”的;它被用于选择、缩小信息空间。测试集只能用于报告所选模型的最终度量标准。 - Renel Chesak
假设您已经训练/验证了三个不同的模型。然后您在相同的测试集上运行了每个模型。接着,您选择了测试集得分最高的模型。这种选择模型的行为会导致结果产生偏差,对吗?最终看起来,除非您有另一个保留数据集,否则无法真正产生无偏结果。在这种情况下,需要进行某种类型的四分法。 - user2253546

4

kNN没有训练过程,所有数据都保存并在运行时用于预测,因此它是最耗时、最占用空间的分类方法之一。特征减少可以减少这些问题。交叉验证是一种比训练/测试分离更好的测试方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接