1

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

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

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

我知道:

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

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

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

那怎么进来classify当相同的样本用于训练和测试时,它会错误分类 20% 的标签,这是怎么回事呢?

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

4

2 回答 2

1

你是对的,在现实世界的情况下,最佳实践是在一个样本上训练分类器并在另一个样本上评估它 - 而且如果你在训练样本上评估分类器,那会给你一个有偏见的(过度 -乐观)分类器准确度的估计。

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

但是您不正确地假设,每当您在其训练的样本上评估分类器时,它就能够正确分类所有样本。这根本不是真的。在这种情况下,两个类显着重叠,分类器无法将它们完全分开,这导致了 20% 的错误。

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

于 2014-07-17T14:26:08.873 回答
1

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

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

于 2014-07-17T14:22:22.927 回答