我正在研究机器学习并使用LDA作为起点。我正在关注MatLab自己的LDA分类教程(Here)。
他们使用的是在Matlab中已有的fisheriris数据集,可以简单地加载。在本教程中,他们使用此行进行分类:
ldaClass = classify(meas(:,1:2),meas(:,1:2),species);
我知道:
分类基于训练数据和标签训练分类器 (第二个和第三个参数),并将分类器应用于测试 data(第一个参数)和ldaClass给出了为其选择的类 测试数据点,基于已经训练过的分类器 训练数据点和标签
因此,用于训练的分类器的相同数据也用于测试?
我对监督学习的理解是,一旦用训练集训练系统,就应该用未知样本进行测试以测试其预测。如果从训练集中给出测试样本,那么它应该能够正确地对其进行分类。正确?
那么当classify
使用相同的样本进行培训和测试时,如何将其错误分类20%的标签?
LDA是一个非常差的分类器,或者我完全不理解这个概念。请帮帮我。
答案 0 :(得分:1)
数据集不是线性可分的(请参阅链接中的蓝色和绿色点)。 LDA基本上在2D情况下通过直线划分数据;由于没有可以完美分离蓝色和绿色训练点的线,总会有一些错误分类。
这解释了错误分类率。通常,很多分类器都会遇到这类数据的问题。由于两个类的重叠,训练集中将存在严重的过度拟合或一些残余误差。
答案 1 :(得分:1)
你是对的,在现实世界的情况下,最佳做法是在一个样本上训练分类器并在另一个样本上进行评估 - 而且如果你在训练样本上评估分类器,那将会给你一个偏见(过度乐观)估计分类器的准确性。
但是,您正在阅读一个教程,该教程试图教您在应用classify
时使用的正确语法,而不是试图教您统计学习的最佳实践。请注意,本教程对此非常明确 - 它强调它计算的错误率是重新替换错误率(即在训练样本上计算的过度乐观错误率)。
但是你不能正确地假设无论何时你在训练的样本上评估分类器,它都能够正确地对所有样本进行分类;这根本不是真的。在这种情况下,两个类重叠显着,分类器无法将它们完全分开,从而产生20%的误差。
这并不意味着LDA是一个糟糕的分类器;这意味着它是一个简单的模型,无法找到完全分离两个重叠类的曲折。当数据具有复杂关系时,简单模型是不好的;当关系很简单时,它们很好,当关系复杂但数据足够嘈杂,以至于复杂模型适合噪声而非复杂关系时,它们就很好。