大型不平衡数据的机器学习模型建议
Posted
技术标签:
【中文标题】大型不平衡数据的机器学习模型建议【英文标题】:Machine learning model suggestion for large imbalance data 【发布时间】:2016-09-19 02:17:44 【问题描述】:我有分类问题的数据集。我总共有 50 节课。
Class1: 10,000 examples
Class2: 10 examples
Class3: 5 examples
Class4: 35 examples
.
.
.
and so on.
我尝试使用 SVM(线性和高斯核)训练我的分类器。我的准确率分别在 65% 和 72% 的测试数据上非常糟糕。现在我正在考虑使用神经网络。您对大型不平衡数据的任何机器学习模型和算法有什么建议吗?这对我很有帮助
【问题讨论】:
【参考方案1】:根据我的经验,处理不平衡类最成功的方法是:
更改输入分布: 20000 个样本(您拥有的示例的近似数量)不是一个大数字,因此您可以通过使用频率较低的每个样本来更改数据集分布多次上课。根据多个类,您可以将示例的数量设置为例如您的训练集中各有 6000 或 8000 个。在这种情况下,请记住不要更改测试和验证集的分布。
增加训练时间:在神经网络的情况下,当你无法改变输入分布时,我强烈建议你尝试长时间学习网络(例如 1000 个 epoch )。在这种情况下,您必须记住正则化。我通常使用 dropout 和 l2 weight regulariser,它们的参数是通过随机搜索算法学习的。
减小批量大小:在神经网络情况下,减小批量大小可能会提高频率较低的类的性能。
更改您的损失函数:使用 MAPE insted of Crossentropy 还可以提高频率较低的类的准确性。
感到受邀测试不同的方法组合,例如随机搜索算法。
【讨论】:
【参考方案2】:您应该提供有关数据集特征和类分布的更多信息,这将有助于其他人为您提供建议。 无论如何,我认为神经网络不适合这里,因为这个数据集太小了。
假设 50% 或更多的样本属于 1 类,那么我首先会寻找一个能够区分 1 类和非 1 类样本的分类器(二元分类)。该分类器的性能应该优于随机选择与训练集类分布相对应的先验分类的简单分类器(基准)。 例如,假设有 1,000 个样本,其中 700 个属于第 1 类,那么基准分类器将以 700/1,000=0.7 的概率将新样本分类为第 1 类(就像不公平的抛硬币一样)。
一旦你找到了一个准确率高的分类器,下一阶段可以将非 1 类分类样本分类为其他 49 个类之一,假设这些类更平衡,那么我将从 RF、NB 和 KNN 开始。
【讨论】:
【参考方案3】:再提一点建议:确保每批数据都比较平衡。
例如,您可以从 class1 中抽取 4 个案例,从 class2 中抽取 2 个案例,从 class3 中抽取 1 个案例,从 class4 中抽取 3 个案例。或者您可以从 class1 中抽取更多案例,但按案例损失对它们进行排序,并仅使用前几个损失(将其他案例损失乘以 0)。
或者尝试焦点损失或加权交叉熵。
【讨论】:
以上是关于大型不平衡数据的机器学习模型建议的主要内容,如果未能解决你的问题,请参考以下文章