Python解决数据样本类别分布不均衡问题
作者:互联网
所谓不平衡指的是:不同类别的样本数量差异非常大。
数据规模上可以分为大数据分布不均衡和小数据分布不均衡。大数据分布不均衡:例如拥有1000万条记录的数据集中,其中占比50万条的少数分类样本便于属于这种情况。小数据分布不均衡:例如拥有1000条数据样本的数据集中,其中占有10条的少数分类样本便于属于这种情况。
样本类别分布不平衡主要出现在分类问题的建模上。导致样本量少的分类所包含的特征过少,很难从中提取规律;即使得到分类模型,也容易产生过度依赖于有限的数据样本而导致过拟合的问题,当模型应用到新的数据上,模型的准确性和鲁棒性很差。
样本分布不平衡主要在于不同类别间的样本比例差异,超过10倍,就要考虑该问题,超过20倍,一定要解决。
1. 数据挖掘中容易出现样本不均衡的场景
1. 异常检测场景
比如恶意刷单、黄牛订单、信用卡欺诈、电力窃电、设备故障等。这些数据样本所占的比例通常是整体样本中很少一部分,以信用卡欺诈为例,欺诈比例一般在 0.1% 以内。
2. 客户流失场景
大型企业流失的客户相对于整体客户通常是少量的。比如电信、石油等。
3. 低频事件的发生
例如每年1次的双11盛会一般都会产生较高的销售额,但放到全年来看这一天的销售额占比很可能只有1%不到,尤其对于很少参与活动的公司而言,这种情况更加明显。这种属于典型的低频事件。
2. 解决样本不均衡
1. 过抽样和欠抽样解决样本不均衡
过抽样
(也叫上采样、over-sampling)即增加分类中少量样本的数量,简单方法就是复制少数类样本形成多条记录,缺点是样本特征少导致过拟合。
改进的过抽样:通过在少数类中加入随机噪声、干扰数据或通过一定规则产生新的合成样本。如SMOTE算法(Synthetic Minority Oversampling Technique即合成少数类过采样技术)。
欠抽样
(也叫下采样、under-sample)即减少分类中多数样本的数量,简单方法就是随机去掉一些多数类样本减小规模,缺点丢失多数类样本中的重要信息。
总体上,过抽样和欠抽样更适合大数据分布不均衡的情况。
2. 正负样本的惩罚权重解决样本不均衡
思想:对不同样本数量的类别赋予不同的权重(一般分类中的小样本量类别权重高,大样本量类别权重低)。
很多算法都有基于类别参数的调整设置,以 SVM 为例,在class_weight:{dict, 'balanced'}中针对不同类别手动指定不同的权重。适用默认方法balanced,SVM将权重设置为与不同类别样本数量呈反比的权重来做自动均衡处理,计算公式:n_samples / (n_classes * np.bincount(y))。
3. 组合/集成方法解决样本不均衡
思想:在每次生成训练集时使用所有分类中的小样本量,同时从分类中的大样本量中随机抽取数据来与小样本量合并构成训练集,这样反复多次得到很多训练集和训练模型。最后使用组合方法(比如投票、加权投票等)产生分类预测结果。
例如: 在数据集中的正、负的样本分别为100和10000条,比例为1:100。此时可以将负样本(类别中的大量样本集)随机分为100份(当然也可以分更多),每份100条数据;然后每次形成训练集时使用所有的正样本(100条)和随机抽取的负样本(100条)形成新的数据集。如此反复可以得到100个训练集和对应的训练模型。
来自:《Python数据分析与数据化运营》
标签:分类,Python,样本,均衡,样本量,类别,100 来源: https://www.cnblogs.com/keye/p/11152018.html