我正在做一个项目,对来自 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 时,保证训练集和测试集每次都相同。
我的问题是,我如何适当地比较不同的分类器。我假设我应该在训练和测试每个分类器之前对这个函数进行相同的调用。我怀疑我应该对每个分类器进行完全相同的拆分,所以它不应该是随机抽样,也应该是分层的。
还是我应该分层(和随机抽样)?