我正在处理一个共有 81 条记录的数据集。其中,我将其划分为 54 条记录用于训练,其余用于测试。我注意到了几件事:
- 对于给定的测试数据集,准确度很低(~ 30%)。
- 无论我使用 SVM 还是朴素贝叶斯,准确性都保持不变。
- 如果我针对 2-3 个值进行测试,准确率会高达 75%。
这是正常的还是我做错了什么?
我正在处理一个共有 81 条记录的数据集。其中,我将其划分为 54 条记录用于训练,其余用于测试。我注意到了几件事:
这是正常的还是我做错了什么?
在某些情况下这是完全正常的。如果您从统计角度考虑学习问题,则通过尝试估计给定输入变量的输出变量的条件估计来完成学习。当您进行学习时,您基本上需要主要组件:来自训练的样本数据和学习算法,并且您可以使用两者来构建上述条件概率的估计。现在考虑每个分量与所需估计概率的关系。
训练样本
训练数据只是所有可能数据中的一个样本。你没有所有可能的数据,因为如果你有它,你就不需要学习了,对吧?所以样本只是数据的一小部分。这个样本可以或多或少地覆盖可能数据的整个领域。一个直接的想法是更大的样本比更小的样本更好。作为一个极端的例子来说明这个想法是只有一个观察。但样本的大小并不是全部。您要估计的概率可能非常复杂。该空间的复杂性也比简单的概率空间需要更多的数据。举个例子,考虑学习美国男性身高平均值的问题。如果你假设一个正态分布,通常有一个小的随机样本就足够了。另一方面以学习识别语音为例。由于针对个人的发音不同,因此您需要一个相当大的样本来揭示预测和丢弃数据中无用的事物所需的有用关系。
模型/学习算法
没有任何模型适合表达您学习的信号的任何真实模型。例如,如果您的真实信号类似于二次多项式,则不可能与线性模型正确拟合,但某些特定情况除外。因此,模型中也存在复杂性,可以将其与您在学习期间要估计的条件概率的复杂性进行比较。即使你知道真正的模型并且你学习的模型能够描述它,有时你需要更多的数据来使模型能够拟合。作为另一个例子,考虑一个随机森林,它估计一条简单的线。随机森林非常灵活,因为基础统计模型基本上是给定输入空间中的局部区域的常数。考虑到即使模型能够估计真实模型,
结论
我们考虑了单个组件与您要估计的概率的比较。但你两者都有。这使得更难理解学习墙后面发生的事情。因此,没有通用的方法来判断数据何时对给定模型足够。所以这就是为什么一种算法对于不同的训练集大小可以具有不同的精度,而对于不同的算法,需要的训练集大小具有近似相等的精度的情况。
我在实践中经常尝试的一件事是给定一个学习模型,以检查准确性如何随着学习样本量的增加而演变。如果您的训练样本足够大,您通常会有一个样本量较小的区域,由于数据不足,该区域的误差很大。之后,您将拥有一个错误保持大致相同的区域,这可能是您的模型做得最好的地方。更大的样本量也可能导致某些模型的性能下降,这可能是由于模型无法描述存在什么或由于过度拟合或其他一些情况。
您可以使用某种引导验证来跟踪这种行为,其中用于训练的样本被重复采集以增加长度。比如 20 个大小为 5% 的样本,20 个大小为 10% 的样本,依此类推。这种信息可以让您了解样本量与给定算法的学习问题之间的关系。
您的训练和测试错误受训练规模的影响。看看这个图,通常称为学习曲线:
在此示例中,随着训练数据集中示例数量的增加,我们计算朴素贝叶斯模型的训练分数和测试分数(交叉验证分数)。分数越高,模型表现越好。
较大的训练集会降低分数,因为学习算法更难学习正确表示所有训练数据的模型。然而,随着我们增加训练集的大小,测试分数也会增加,因为模型的泛化能力增加了。
如您所见,图中的两条线都达到了正确大小的限制。这意味着,为了正确学习,算法需要足够的数据,刚好足以让我们到达该图的右侧。一旦我们达到那个渐近线,我们就不能通过使用更多的训练数据来提高测试分数。
现在,请注意,此图仅指训练集的大小,而不是测试集的大小,但从中推断,我可以假设当您在测试集中仅使用 2-3 个示例时,您不会没有足够的测试数据来确定您的测试分数。对于其他 2-3 个不同的测试示例,您甚至可能得到完全不同的结果。因此,我假设您的较大测试集的 30% 测试错误是最可行的值。
看来,为了提高模型的性能,您将不得不寻找其他原因:您的功能是否定义良好?你有足够的训练数据吗?