如何处理随机森林中的计数数据

数据挖掘 机器学习 随机森林 数据清理 机器学习模型 数据争吵
2021-09-19 16:42:15

我正在研究一个分类模型,其中我的目标类是一个有偏见的类,其类形状为

    0     1 
 20694   101

我的大部分功能都是触发某个事件的次数。在探索这些特征时,我发现我的目标变量只与某些特征值相关联。例如如下

                 0         1
Feature V1      
0                12014    75
1                6490     16
2                1177     6
3                402      2
4                176      2
5                100    
6                84 
7                61 
8                39 
9                23 
10               26 
11               14 

正如我们所看到的,只有当 V1 的值为 0 到 4 时才会出现 1。因此,对于任何看不见的数据,只要 V1 的值大于 4,我的模型总是会预测为 0。

我想过使用bestNormalize包,但是它建议的转换在应用于数据时会失去相关性。

任何建议都会有很大帮助。

非常感谢提前!!

PS如果需要,很高兴分享数据。

3个回答

一些想法:

  1. 您的数据高度不平衡。这是一个必须处理的关键问题。可能的解决方案包括简单的欠采样/过采样到更复杂的合成方法(如 SMOTE)。
  2. 决策树和随机森林不需要特征缩放——这意味着不需要归一化(除非您计划使用其他一些使用正则化的建模技术)。
  3. 仅仅因为V1数据集仅显示和的值之间的特定关系target并不意味着它总是如此 - 特别是如果您的模型要部署一段​​时间。这种关系可能会随着时间而改变,所以不要急于人为地缩减你的模型。

我认为最简单的选择是清除其中没有“1”类的功能。不禁止在算法中使用每一个未来。请始终记住,您的完整模型是超级不平衡的,如果您构建的模型始终预测为 '0' 类,您将获得的准确度为: 0,995% 。可能在这种情况下,调整你的算法更有趣,他正确识别你的类“1”,所以我会建立一个专注于正确识别最多“1”的算法。

我认为 SMOTE 是首先尝试的最佳方法,如果您想进一步研究 XGBoost 参数,尤其Scale_pos_weight是负类与正类的数量之比。

假设数据集有 90 个负类观察值和 10 个正类观察值,那么 scale_pos_Weight 的理想值应该是 9。您可以查看此链接