我正在使用随机森林的 r 包根据氨基酸序列预测蛋白质对之间的距离,主要兴趣是接近的蛋白质(距离更小)。我的训练数据集由 10k 对蛋白质和它们之间的实际距离组成。然而,很少有蛋白质对(小于 0.2%)之间的距离很小,问题是经过训练的随机森林在预测距离较大的蛋白质之间的距离时变得非常准确,而对于距离较小的蛋白质则非常不利。他们。我尝试对训练数据中距离较远的蛋白质进行下采样,但结果仍然不好。我对紧密的蛋白质(它们之间距离小的那些对)更感兴趣。
2 回答
几个建议:
1) 查看gbm
包装中的 GBM。
2) 创建更多功能以帮助 RF 了解驱动距离的因素。
3) 绘制误差与单个变量的图,以寻找驱动关系的因素。(ggplot2 非常适合,尤其是使用colour
andsize
选项。)
4) 您还可以根据距离将 1 或 0 分配给 y 变量(即,如果距离 < x;设置为 1 / 如果距离 >= x;设置为 0)。一旦你有了两个类,你就可以使用 RF 中的 strata 参数来创建均匀平衡的样本,并使用 RF 的importance() 和 varImpPlot() 函数查看哪些变量导致了距离的差异。
5)尝试使用距离相关变量的日志。RF 通常可以很好地补偿非线性,但尝试一下也无妨。
我的猜测是,#2 是你想花时间的地方,尽管它也是最难的,需要最多的思考。
我认为考虑到您的问题可能会对您有所帮助的是 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。