1

我正在做一个项目,对来自 5 种不同类型(摇滚、电子、说唱、乡村、爵士)的 30 秒音频样本进行分类。我的数据集包含 600 首歌曲,每个流派正好 120 首。特征是每首歌曲的 13 个 mfcc 的一维数组,标签是流派。本质上,我对 30 秒样本的每一帧取每组 13 个 mfcc 的平均值。这导致每首歌曲有 13 个 mfcc。然后我得到整个数据集,并使用 sklearn 的缩放功能。

我的目标是比较 svm、knearest 和朴素贝叶斯分类器(使用 sklearn 工具集)。我已经进行了一些测试,但我注意到结果因我是否进行随机抽样/分层抽样而异。

我在 sklearn 中执行以下功能来获取训练和测试集:

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20, random_state=0, stratify=y)

它具有参数“随机状态”和“分层”。当“随机状态”被省略时,它从整个数据集中随机采样;当设置为 0 时,保证训练集和测试集每次都相同。

我的问题是,我如何适当地比较不同的分类器。我假设我应该在训练和测试每个分类器之前对这个函数进行相同的调用。我怀疑我应该对每个分类器进行完全相同的拆分,所以它不应该是随机抽样,也应该是分层的。

还是我应该分层(和随机抽样)?

4

1 回答 1

0

要评估一个分类器相对于另一个分类器的准确性,您需要从数据集中随机抽样以进行训练和测试。使用测试数据集评估每个分类器并一次性比较准确度。

给定存储在数据框中的数据集,将其拆分为训练和测试(随机抽样更好地深入了解您的分类器在所有情况下的性能,分层抽样有时会掩盖您的真实准确性)为什么?让我们举个例子:

如果您正在对某个特定类别进行分层抽样(假设该类别具有异常大量的数据[偏斜]并且分类器预测一个类别很好,那么您可能会认为分类器运行良好,即使没有'在信息较少的类别上表现更好。分层抽样在哪里工作得更好?当你知道现实世界的数据也会有偏差,如果最重要的类别预测正确,你就会感到满意。(这绝对不意味着您的分类器在信息较少的类别上效果不佳,它可以很好地工作,只是分层抽样有时无法呈现全貌)

使用相同的训练数据集来训练所有分类器并使用相同的测试数据集来评估它们。此外,随机抽样会更好。

于 2017-05-15T06:25:14.833 回答