随机森林对不平衡数据的回归

Posted

技术标签:

【中文标题】随机森林对不平衡数据的回归【英文标题】:regression with random forest on imbalanced data 【发布时间】:2013-03-11 00:48:56 【问题描述】:

我正在使用随机森林的 r 包根据氨基酸序列预测蛋白质对之间的距离,主要兴趣是接近的蛋白质(距离更小)。我的训练数据集由 10k 对蛋白质和它们之间的实际距离组成。然而,很少有蛋白质对(小于 0.2%)之间的距离很小,问题是经过训练的随机森林在预测距离较大的蛋白质之间的距离时变得非常准确,而对于距离较小的蛋白质则非常不利。他们。我尝试对训练数据中距离较远的蛋白质进行下采样,但结果仍然不好。我对紧密的蛋白质(它们之间距离小的那些对)更感兴趣。 有一个非常明显的过度拟合信号,因为我的训练准确率为 78,我的测试准确率为 51% 任何建议都非常感谢

【问题讨论】:

您有一个数据不平衡的案例。 0.2% 是微不足道的,因此模型(随机森林)会忽略它们。如果您的测试集包含更多距离较短的数据,您应该将它们移动到训练集并使用交叉验证来测试准确性。可能这还不够,因此下一步是对小距离样本进行重采样(搜索“不平衡数据重采样”) 【参考方案1】:

我认为针对您的问题可能对您有所帮助的是 Synthetic Minority Over-Sampling Technical for Regression (SMOTER)。有一些关于这个主题的研究。但是,与您可能遇到的分类对应物 (SMOTE) 相比,它的探索程度仍然较低。

我可能会根据您对从研究角度理解它的兴趣程度来推荐下面引用的论文。我非常感谢在生成合成观测值时引入高斯噪声。

如果您对实际解决方案更感兴趣,第一作者在她的 Github 页面上提供了一个 R 实现。 https://github.com/paobranco/SMOGN-LIDTA17

如果 Python 更能说服您,我最近发布了 SMOGN 算法的完全 Pythonic 实现,该算法现已可用,目前正在进行单元测试。 https://github.com/nickkunz/smogn

Branco, P.、Torgo, L.、Ribeiro, R. (2017)。 “SMOGN:一种不平衡回归的预处理方法”。机器学习研究论文集,74:36-50.http://proceedings.mlr.press/v74/branco17a/branco17a.pdf.

【讨论】:

【参考方案2】:

几个建议:

1) 查看gbm 包中的 GBM。

2) 创建更多功能以帮助 RF 了解驱动距离的因素。

3) 绘制误差与单个变量的图,以寻找驱动关系的因素。 (ggplot2 非常适合,尤其是使用 coloursize 选项。)

4) 您还可以根据距离将 1 或 0 分配给 y 变量(即,如果距离 = x;设置为 0)。一旦你有了两个类,你就可以使用 RF 中的 strata 参数来创建均匀平衡的样本,并使用 RF 的importance() 和 varImpPlot() 函数查看是哪些变量导致了距离的差异。

5) 尝试使用距离相关变量的对数。 RF 通常可以很好地补偿非线性,但尝试一下也无妨。

我的猜测是,#2 是你想花时间的地方,尽管它也是最难的,需要最多思考的地方。

【讨论】:

以上是关于随机森林对不平衡数据的回归的主要内容,如果未能解决你的问题,请参考以下文章

不平衡的训练数据集和回归模型

解决sklearn 随机森林数据不平衡的方法

类非常不平衡的随机森林

随机森林:平衡测试集?

如何在 Scikit-Learn 的随机森林分类器中设置子样本大小?特别是对于不平衡的数据

mllib 如何在内部对不平衡数据集的类进行加权?