【问题标题】:What does the classify(LDA) function accomplish?分类(LDA)函数完成了什么?
【发布时间】:2014-09-08 11:19:06
【问题描述】:

我正在研究机器学习,并以 LDA 作为起点。我正在关注 MatLab 自己的 LDA 分类教程 (Here)。

他们使用的是已经在 Matlab 中可用并且可以简单地加载的 fisheriris 数据集。在教程中,他们使用这一行进行分类:

ldaClass = classify(meas(:,1:2),meas(:,1:2),species);

我知道:

classify 根据训练数据和标签训练分类器 (第二个和第三个参数),并将分类器应用于测试 数据(第一个参数)和 ldaClass 给出了选择的类 测试数据点,基于已使用训练的分类器 训练数据点和标签

那么提供给分类器进行训练的相同数据是否也用于测试?

我对监督学习的理解是,一旦使用训练集对系统进行训练,就应该使用未知样本对其进行测试以测试其预测。如果从训练集中给它一个测试样本,那么它应该能够正确分类它。对吧?

那么classify 怎么会在相同的样本用于训练和测试时错误分类了 20% 的标签?

要么 LDA 是一个非常糟糕的分类器,要么我没有完全理解这里的概念。请帮帮我。

【问题讨论】:

    标签: matlab machine-learning classification lda test-data


    【解决方案1】:

    您说得对,在现实世界中,最佳做法是在一个样本上训练分类器并在另一个样本上对其进行评估 - 而且,如果您在训练样本上评估分类器,这会给您带来偏见(过度乐观)分类器准确度的估计。

    但是,您正在阅读一个教程,它试图教您在应用 classify 时使用的正确语法,而不是教您统计学习的最佳实践。请注意,本教程对此相当明确 - 它强调它计算的错误率是重新替换错误率(即在训练样本上计算的过于乐观的错误率)。

    但是您不正确地假设每当您对训练样本上的分类器进行评估时,它就能够正确分类所有样本;这根本不是真的。在这种情况下,两个类有很大的重叠,分类器无法将它们完全分开,从而产生了 20% 的误差。

    这并不意味着 LDA 是一个糟糕的分类器;这意味着它是一个简单的模型,无法找到将两个重叠类完全分开的曲折。当数据具有复杂的关系时,简单的模型是不好的;当关系很简单时,它们也很好,当关系很复杂但数据足够嘈杂以至于复杂的模型更适合噪声而不是复杂的关系时也是如此。

    【讨论】:

      【解决方案2】:

      数据集不是线性可分的(请参阅链接中的蓝点和绿点)。 LDA在2D情况下基本上是用直线来划分数据;由于没有一条线可以完美地分离蓝色和绿色训练点,因此总会出现一些错误分类。

      这解释了错误分类率。一般来说,很多分类器在处理这类数据时会遇到问题。由于两个类的重叠,要么会出现严重的过拟合,要么会在训练集中出现一些残差。

      【讨论】:

      • 我只想指出classify 函数同时支持linearquadratic 判别分类器(默认为线性)。在 QDA 的情况下,类由二次曲面分隔,而不仅仅是直线或(超)平面。
      猜你喜欢
      • 2013-08-27
      • 1970-01-01
      • 2021-10-13
      • 1970-01-01
      • 2013-10-07
      • 1970-01-01
      • 1970-01-01
      • 2016-05-31
      • 2013-12-20
      相关资源
      最近更新 更多