繁体   English   中英

分类编码后处理不平衡数据

[英]dealing with imbalanced data after encoding for classification

我最初有一个维度 (13961,48) 的数据,经过一次热编码和基本的数据按摩之后,在 (13961,862) 周围观察到维度。 数据不平衡,两类“保留”约为 6%,“未保留”约为 94%。

在运行任何算法(如逻辑、knn、决策树、随机森林)时,即使没有执行任何特征选择过程,数据也会产生非常高的准确率,并且除了“朴素偏差分类器”之外,准确率大多超过 94%。

这似乎很奇怪,甚至随机具有任意两个特征-> 提供超过 94% 的准确度,这通常看起来不现实。

也应用 SMOTE,即使对于上述任何算法的基线模型,如逻辑、knn、决策树、随机森林、

去除前 20 个特征后,这给出了超过 94% 的良好结果的准确率(检查了解真实性)

 g = data[Target_col_Y_name]
 df = pd.concat([g.value_counts(), 
            g.value_counts(normalize=True).mul(100)],axis=1, keys=('counts','percentage'))

print('The % distribution between the retention and non-retention flag\n')

print (df)

# The code o/p to show the imbalance is

 The % distribution between the retention and non-retention flag

              counts  percentage
Non Retained   13105   93.868634
Retained         856    6.131366

我的数据有 7 个数值变量,例如月份、金额、利率和所有其他变量(大约 855)作为单热编码转换的分类变量。

有什么方法可以处理此类关于基线、特征选择或不平衡优化技术的数据? 请通过查看每个级别的维度和不平衡计数来指导。

除了 Elias 的回答之外,我还想补充一些东西。

首先,你必须明白,即使你创建了“哑分类器”,它总是预测“不保留”,你仍然有 94% 的时间是正确的。 因此,在这种情况下,准确性显然是弱指标。

您绝对应该了解混淆矩阵和随之而来的指标(如 AUC)。

其中一个指标是F1分数,它是准确率和召回率的调和平均值。 不平衡类设置的准确性更好,但是......它不一定是最好的。 F1 将偏爱这些具有相似精度和召回率的分类器。 但这不是对你很重要的事情。

例如,如果您要构建 sfw 内容过滤器,您可以将一些 SFW 内容标记为 nsfw(负类),这会增加假阴性率(并降低召回率),但您希望确保保留只有安全的(高精度)。

在您的情况下,您可以推断更糟糕的情况:保留不好的东西或放弃好的东西,然后以这种方式选择指标。

就策略而言:有很多方法可以处理类不平衡:采样技术(尝试下采样、除 SMOTE 或 ROSE 之外的上采样)并检查您的验证分数(仅训练指标几乎无用)是否有所提高。 请记住在训练验证拆分后应用采样/增强技术。

此外,一些模型有特殊的超参数来更多地关注稀有类(例如在 xgboost 中有scale_pos_weight参数)。 根据我的经验,调整这个超参数比 SMOTE 更有效。

祝你好运

一般来说,准确度不是一个很好的衡量标准,特别是对于不平衡的类。 我会推荐this other stackoverflow answer ,它解释了何时使用F1分数以及何时使用AUROC,这两者都是比准确性更好的衡量标准; 在这种情况下,F1 更好。

几点要澄清:

  • 对于诸如随机森林之类的模型,您不应该为了提高准确性而删除特征,因为它只会将它们视为无关紧要的特征。 我推荐随机森林,因为它往往非常准确( 在某些情况下除外),并且只需使用clf.feature_significances_ (如果使用 scipy 随机森林)就可以显示重要的特征。

  • 决策树的性能几乎总是比随机森林差,因为随机森林是许多聚合决策树。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM