我有二元分类问题,其中一个类占所有观察的99.1%(210 000)。作为处理不平衡数据的策略,我选择了采样技术。但是我不知道该怎么做:对我的大多数人进行抽样测量,或者对代表性较低的课程进行过度采样。 如果有人有建议吗?
谢谢。
P.S。 我使用sklearn的随机森林算法。
答案 0 :(得分:2)
我认为上面接受的答案中有一个拼写错误。你不应该“低估少数人”和“对大多数人进行过度抽样”;相反,你应该对大多数人进行抽样,并对少数人进行过度抽样。
如果您熟悉Weka,您可以轻松地尝试使用不同的数据不平衡技术和不同的分类器来研究哪种方法效果最好。对于Weka中的欠采样,请参阅此帖子:combination of smote and undersampling on weka。
对于Weka中的过采样,您可以尝试使用SMOTE算法(此处提供了一些信息:http://weka.sourceforge.net/doc.packages/SMOTE/weka/filters/supervised/instance/SMOTE.html)。当然,创建20,811个合成少数数据(即,如果您正在寻找平衡数据)在计算上比欠采样更昂贵,因为:(1)与创建合成数据相关的计算成本; (2)与42,000个样本(包括为少数群体类别创建的20,811个合成样本)的训练相关的计算成本更高,而不是21,000个样本。
根据我的经验,您提到的两种数据不平衡方法都运行良好,但我通常首先尝试使用欠采样,因为从资源的角度来看,我认为它的价格要便宜一些。
这里有用于欠采样和过采样的Python包:
答案 1 :(得分:1)
是一个超参数。交叉验证哪些最有效。 但是使用训练/测试/验证集。
答案 2 :(得分:0)
欠采样:
通常,当我们有数十亿(很多)数据点并且没有足够的计算或内存(RAM)资源来处理数据时,就会执行欠采样。与在某些情况下在完整数据或过采样数据上训练数据相比,欠采样可能导致更差的性能。在其他情况下,由于采样不足,我们可能不会造成明显的性能损失。
进行欠采样主要是为了在有限的计算,内存和/或存储约束内工作时使模型的训练更易于管理和可行。
过度采样:
过度采样往往效果很好,因为与过度采样相比,过度采样不会丢失任何信息。