0
先问大家一个问题:
银行欺诈识别、市场实时交易、网络入侵检测等领域的数据集,有哪些共通点?
答案是:“关键”事件在数据中的占比经常少于1%(例如:信用卡行骗者、点击广告的用户或被攻破的服务器的网络扫描)。
然而,大多数机器学习算法在不均衡数据集的表现都不太好。以下七种技术可以帮到你,训练一个分类器用于检测不正常类别数据。
对于不均衡数据生成的模型,使用不恰当的评估方法很危险。架设训练数据是上图展示的数据。若准确度是衡量模型好坏的指标,把所有测试样本为划分为“0”,将得到非常高的准确率(99.8%),但显然,这模型不能为我们提供任何有价值的信息。
对于这个情况,可以用其它评估指标:
准确率(Precision/Specificity): 选择的实例有多少是相关的;
召回率(Recall/Sensitivity): 选择了多少相关实例;
F值(F1 score): 准确率与召回率的调和平均数;
MCC: 观察值与预测值之间的相关性系数;
AUC: 正阳性与假阳性的关系。
除了使用不同的评估标准,还可以想办法获取其他数据集。有两种方法能把不均衡数据集转化为均衡数据集那就是欠抽样以及过抽样。
欠抽样通过删减大比例类的样本量来平衡数据集。这方法适用于数据量充足的情况。通过保留所有的小比例类数据样本并从大比例类数据中随机选取同等数量的样本,产生一个新的可用于后续模型的均衡数据集。
反之,当数据量不足时则采用过抽样方法。通过增加小比例类的样本量来平衡数据集。不再是去掉冗余样本,通过如数据复制(repetition)、拔靴法(boostrapping)或合成少数过采样技术(SMOTE)产生了新的小比例类样本[1]。
注意:两种方法没有绝对优势。关键是看情况使用两种方法。过抽样与欠抽样合组合使用也常有效解决不均衡问题。
值得注意的是,当使用过抽样法来解决不均衡问题时,交叉验证法是需要合理应用的。
雷锋网提醒:过抽样法会提取出小比例类的观察数据 ,用拔靴法根据分布函数随机生成新数据。如果交叉验证法在过抽样后使用,基本上会让模型过拟合到一个特别的伪拔靴法结果。这就是为什么交叉验证应该在过抽样前完成,正如如何实现特征选择。只有当数据反复地重抽样,数据集才具有随机性来确保不会有过拟合问题。
成功泛化一个模型,最简单的方法是使用更多数据。问题是,现成的分类器,如逻辑回归或随机森林,倾向于通过抛弃掉小比例类数据进行泛化。一个简单的实践方法,是使用所有小比例类样本,和划分为n份的互斥大比例类样本,共同建立n个模型。例如保留 1000个小比例类别样本,对大比例类别随机抽样10,000个样本,你只需要把10,000个样本分为10份并训练10个不同的模型。
这方法很简单,并在水平方向完美的可扩展 (假如你有很多的数据),因为你可以在不同簇节点上训练并跑你的模型。模型融合泛化效果更好,这使得这方法易于处理。
上述方法,还可以通过调整小比例类别与大比例类别之间不同的比率来调优。最佳比率十分依赖于数据和使用的模型。但不要用同样的比率去训练 ensemble 里的所有模型,值得试着用不同比率模型融合。所以如果训练10个模型,一个模型使用1:1的比率(少类别:多类别)、另一个使用1:3、或2:1可能都合理。取决于模型,这会影响类别的权重。
Sergey在Quora提出了一个优雅的方法 [2]。不再依赖随机抽样,去保留训练样本的多样性,他建议把大比例类别聚类进r个组,r是它里面的案例数。对于每个组,仅保留质心(聚类的中心)。然后模型仅用小比例类别和质心数据进行训练。
所有之前的方法注重数据,并保持模型不变。但实际上,假如模型适合于不均衡数据,那就不需要对数据重抽样。假如数据倾斜不是太严重,采用著名的XGBoost算法是一个很好的开始,因为它从内部确保训练的数据包不会是不均衡的。在算法内部,数据其实秘密地重抽样了。
设计一个成本函数,对小比例类别误分类的惩罚,要多于大比例类别的误分类,这可能会产生自然地倾向小比例类别进行泛化的模型。例如,调整SVM来通过同样的比率(占总样本的比例),去惩罚小比例类别的误分类。
最后,雷锋网提醒,这不是一个完整的技术列表,仅仅是一个处理不均衡数据的开始。其实,并没有一个能适配所有的问题的、最好的方法或模型。所以强烈建议尝试不同的技术和模型,去评估哪个的效果最好。可以尝试创新地同时使用几种不同的方法。另外很重要的一点是,在很多不均衡类别发生的领域(如欺诈检测、实时交易),“市场规则”是经常改变的。所以,请检查过去的数据是否已过期。
via kdnuggets,雷锋网编译
相关文章:
雷峰网版权文章,未经授权禁止转载。详情见转载须知。