用偏向一个类的大量数据来预测类



我有一个关于如何处理一些有趣数据的问题。

我目前有一些数据(计数是真实的,但情况是假的),我们预测人们今天将在网上购买的t恤数量。我们对每个人的特性属性都有相当多的了解,这些属性每天都在变化。我们还知道前几天每个人买了多少件t恤。

我想要的是一个算法,它能够产生一个连续的变量,这个变量是一个人今天将要购买的t恤数量的排名或"分数"。我的最终目标是,如果我能将这个分数附加到每个人身上,我就可以根据分数对他们进行排序,并在特定的UI中使用它们。目前,我一直在使用sci-kit的随机森林回归,我的目标类别是每个人昨天购买t恤的数量。除了我的数据有点困难,因为有很多人买了0件t恤之外,这个方法效果很好。这是一个问题,因为我的随机森林给了我很多预测的0的类,我不能有效地对它们进行排序。我知道为什么会这样,但我不知道最好的解决办法是什么。

我想要的是一个非零分数(即使它是一个非常小的接近0的数字),它告诉我更多关于特征和预测类的信息。我觉得我的一些特征一定能告诉我一些东西,给我一个比0更好的预测。

我认为固有的问题是使用随机森林回归器作为算法。每棵树都有一票;然而,有太多的零,以至于有很多森林里所有的树都投票给0。我想尝试另一种算法,但我不知道哪一种效果最好。目前,我正在对整个数据集进行训练,并使用scikit提供的out-of-bag估计。

下面是数据类的计数(使用python的Counter([target classes]))。设置如下:{predicted_class_value: counts_of_that_value_in_the_target_class_list}{0: 3560426、1:121256、2:10582、3:1029、4:412、5:88、6:66、7:35、8:21、9:17、10:17、11:2、13:2、15:2、21:2、17:1、18:1、52:1、25:1}

我已经尝试了一些事情来操纵训练数据,但我真的是在猜测要做的事情。

我尝试的一件事是根据其他数据将训练集中的零的数量缩放为线性缩放的数量。因此,我没有向算法传递350万行0类数据,而是将其缩小到25万行。所以我的训练集看起来像:{0:250000,1:121256,2:10582,3:1029,…}。这对从算法返回的0的数量有很大的影响。我已经从算法猜测99%的数据为0到只有50%。然而,我不知道这是一件有效的事情,或者它是否有意义。

我尝试过的其他事情包括增加森林大小-但这并没有太大的影响,告诉随机森林只使用每棵树的sqrt特征-这有一个很好的效果,并使用袋外估计-这似乎也有很好的结果。

总结一下,我有一组数据,其中一个类的数据量不成比例。我想有一些方法来产生一个连续的值,这个值是预测数据集中每个值的"分数",所以我可以对它们进行排序。

谢谢你的帮助!

这是一个不平衡的类问题。一种方法是过采样/欠采样。欠采样意味着从多数类中随机删除实例。过度抽样意味着使用少数派类的替代实例进行抽样。或者你可以使用两者的组合。你可以尝试的一件事是SMOTE[1],这是一种过采样算法,但它不是从少数类中抽样现有实例,而是创建合成实例,这将避免过拟合,理论上在泛化方面会更好。

[1]张晓明,张晓明,等。SMOTE:合成少数派过采样技术。人工智能研究(2002):321-357.

相关内容

  • 没有找到相关文章

最新更新