【问题标题】:kNN: training, testing, and validationkNN:训练、测试和验证
【发布时间】:2012-06-04 14:18:56
【问题描述】:

我正在从 10 个类别中提取图像特征,每个类别包含 1000 张图像。由于我可以提取 50 个特征,因此我正在考虑在这里找到最好的特征组合。训练集、验证集和测试集划分如下:

Training set = 70%
Validation set = 15%
Test set = 15%

我在验证集上使用前向特征选择来找到最佳特征组合,最后使用测试集来检查整体准确度。有人可以告诉我我做得对吗?

【问题讨论】:

  • 这个问题似乎无效 - 正如下面的答案所示

标签: machine-learning computational-geometry classification knn


【解决方案1】:

所以 kNN 是构建/测试监督机器学习模型的一般工作流程的一个例外。特别是,通过 kNN 创建的模型只是放置在某个度量空间中的可用标记数据。

换句话说,对于 kNN,没有训练步骤,因为没有要构建的模型。模板匹配和插值是 kNN 中发生的所有事情。

也没有验证步骤。验证根据训练数据测量模型准确性,作为迭代次数(训练进度)的函数。该经验曲线的向上移动证明了过度拟合,并指示了训练应该停止的点。换句话说,因为没有建立模型,所以没有什么要验证的。

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

但即使是测试,kNN 与其他监督机器学习技术也略有不同。特别是,对于 kNN,预测的质量当然取决于数据量,或者更准确地说是密度(每单位体积的点数)——即,如果您要通过平均 2-3 来预测未知值点最接近它,那么如果您的点接近您希望预测的点,它会有所帮助。因此,保持较小的测试集大小,或者更好的是使用 k 折交叉验证或留一法交叉验证,这两种方法都可以为您提供更彻底的模型测试,但不是减少 kNN 邻居人口规模的成本。

【讨论】:

  • 但是由于我需要找到最佳特征组合,我不应该在验证集上执行此搜索,然后最后使用测试测试来测试选定的最佳特征
  • 如果我在测试集上运行最好的特征选择算法,然后得到最终的准确率,这不会使特征组合偏向于测试集吗?
  • @klijo 规范的 kNN 描述不包括特征选择算法或任何类似的算法。除此之外,我不理解您的任何一个 cmets 中的问题,但我确定它们与 kNN 无关。
  • 我这个答案从根本上以一种非常常见的方式错过了模型验证的概念。考虑它的最佳方式可能是从信息空间的角度来考虑。如果您缩小信息空间以为您的预测结果提供证据,您需要确保它可以推广到未见数据。 “未见数据”意味着未用于缩小信息空间的数据。不管有没有模型都是如此。
  • 测试集不应该用于选择(缩小信息空间;选择特征;调整参数;以任何方式参与训练/模型构建过程) ; 这就是验证集的用途。如果您将测试集用于特征选择、参数调整(KNN 中的k)和/或模型选择,则该数据不再“看不见”;它用于选择,缩小信息空间。 测试集只能用于报告您选择的模型的最终指标。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-16
    • 1970-01-01
    • 2021-09-07
    • 2020-07-08
    • 1970-01-01
    • 2016-01-29
    • 2020-03-23
    • 2020-01-30
    相关资源
    最近更新 更多