所以,我有 9k 个 1 秒的 wav 文件,是一个人说话的。这些标签是由说话的人是否戴口罩来标记的。我应该想出一个机器学习模型来对这些标准进行分类。
到目前为止,我尝试在音频的 mfcc 功能上使用 KNN。这在测试数据上获得了大约 56% 的准确率。
我还尝试将 wav 文件转换为 jpg 频谱图并应用 CNN。这个在测试数据上获得 60% 的准确率。
但是我没有那么多经验,我不确定音频的哪些功能最能帮助解决这个问题。
此外,如果您可以针对此特定问题推荐机器学习模型。
所以,我有 9k 个 1 秒的 wav 文件,是一个人说话的。这些标签是由说话的人是否戴口罩来标记的。我应该想出一个机器学习模型来对这些标准进行分类。
到目前为止,我尝试在音频的 mfcc 功能上使用 KNN。这在测试数据上获得了大约 56% 的准确率。
我还尝试将 wav 文件转换为 jpg 频谱图并应用 CNN。这个在测试数据上获得 60% 的准确率。
但是我没有那么多经验,我不确定音频的哪些功能最能帮助解决这个问题。
此外,如果您可以针对此特定问题推荐机器学习模型。
如果每个类别都有 4,500 个示例,那么您比随机猜测做得更好。这听起来像是一个难题,其中示例只有细微的差异,所以这是一个成就。(我假设您正在做某种样本外测试。)考虑一下您在对每个样本中可能有 20 个样本进行分类时的表现。我很想知道你是怎么做的。如果你得到 38/40 而不是 20/40,这是一个完全不同的问题。
但是,应用 CNN 的方法是转换为频谱图,然后在频谱图阵列上运行 CNN。转换为文字图片是不必要的,并且可能会损害性能。有很多方法可以将信号转换为二维时频空间。您可能已经尝试过傅立叶变换。检查小波。
由于您有时间序列数据,请考虑递归神经网络和长期短期记忆。这些可以与 CNN 结合使用。我想你会在 GitHub 上找到 CNN/LSTM 代码的示例。
但是,对于深度学习方法,您有一个相当小的数据集。考虑更简单的模型,例如逻辑回归。在提高样本外性能的同时,您的样本内性能可能会受到影响。
最后,考虑一个适当的评分规则,例如 Brier 评分。Frank Harrell 在交叉验证的统计堆栈上写了很多关于此的文章。无耻地,我会提到你可能对我关于 CV 的一个问题感兴趣,当需要做出艰难的决定时,我会在某种程度上挑战正确评分规则的想法:https ://stats.stackexchange.com/questions/464636 /proper-scoring-rule-when-there-is-a-decision-to-make-eg-spam-vs-ham-email。我的示例来自 NLP,但可能存在语音情况(例如文本听写,在某些时候,您必须决定打印“dad”或“bad”或“bicycle”)。
我建议尝试使用预训练的 CNN 来提取特征,然后在此之上做一个简单的分类器。例如, OpenL3非常易于使用,并且在一系列任务上都表现出色。分类器可以是例如逻辑回归或随机森林。