我有一个分类 10 类音频频谱图的 CNN 模型。但是,由于我使用的是开放数据集,因此我需要将未知音频数据分类为“未知”类。问题是我的未知数据训练样本大于其他已知类。恐怕模型进行随机优化时会出现问题。
我是否应该分离“未知”训练数据并单独训练模型。或者我可以简单地将未知数据与其他类混合并立即训练模型?
我有一个分类 10 类音频频谱图的 CNN 模型。但是,由于我使用的是开放数据集,因此我需要将未知音频数据分类为“未知”类。问题是我的未知数据训练样本大于其他已知类。恐怕模型进行随机优化时会出现问题。
我是否应该分离“未知”训练数据并单独训练模型。或者我可以简单地将未知数据与其他类混合并立即训练模型?
有几种方法可以做到这一点。例子是:
使用监督学习为已知与未知训练一个单独的二元分类器。已知数据将来自您的数据集,未知数据集是来自不同数据集(如 AudioSet 等)的大量样本
仅使用您的数据集(已知)和无监督学习来训练异常/分布外模型。这应该在你的 CNN 中学习到的表示上完成。您可以使用高斯混合模型(例如来自 scikit-learn)作为异常模型。要验证它是否有效,并设置高斯数、异常阈值等超参数,您应该使用来自另一个数据集(AudioSet 等)的一些样本。
确实存在以牺牲其他类为代价过度学习“未知”类(由于数量较大)的风险,这可能导致错误的“未知”结果。
这主要取决于“未知”数据与“已知”数据的接近程度。
以下是 3 个可能的解决方案:
一个简单的方法是使用比“已知”日期的平均数量更大的随机“未知”数据(但不要太大:例如两倍大)。
一个逻辑是从未知数据的多元正态分布中获得一个有代表性的样本。https://juanitorduz.github.io/multivariate_normal/
一种高级方法是通过无监督分类模型获得更接近“已知”数据的“未知”数据。https://scikit-learn.org/stable/unsupervised_learning.html 然后再添加一些未知数据来更好地概括它们。