不平衡的训练数据集和回归模型
Posted
技术标签:
【中文标题】不平衡的训练数据集和回归模型【英文标题】:Imbalanced training dataset and regression model 【发布时间】:2014-05-07 21:15:11 【问题描述】:我有一个表示蛋白质之间距离 (RMSD) 的大型数据集(>300,000 次观察)。我正在构建一个回归模型(随机森林),它应该可以预测任何两种蛋白质之间的距离。
我的问题是我对近距离比赛(短距离)更感兴趣,但是我的数据分布存在很大偏差,因此大多数距离都很大。我并不关心模型能够预测远距离的效果有多好,所以我想确保模型能够准确地预测近距离模型的距离。但是,当我在完整数据上训练模型时,模型的性能并不好,所以我想知道我能做的最好的采样方式是什么,这样我可以保证模型能够准确地预测近距离匹配距离尽可能地同时对数据进行如此多的分层,因为不幸的是,这种有偏差的数据分布代表了我将要验证和测试模型的真实世界数据分布。
以下是我的数据分布,第一列代表距离,第二列代表这个距离范围内的观察次数:
Distance Observations
0 330
1 1903
2 12210
3 35486
4 54640
5 62193
6 60728
7 47874
8 33666
9 21640
10 12535
11 6592
12 3159
13 1157
14 349
15 86
16 12
【问题讨论】:
这听起来更像是一个统计问题,而不是编程问题。我建议在Cross Validated 询问。 【参考方案1】:我在这里尝试的第一件事是建立距离的log 回归模型,因为这将集中较大距离的范围。如果您使用的是广义线性模型,这是对数链接函数;对于其他方法,您可以通过估计输入 x 的回归函数并对结果求幂来手动执行此操作:
y = exp(f(x))
记得使用距离的 log 进行一对一训练。
【讨论】:
【参考方案2】:在回归中处理不平衡分布的流行技术包括:
随机过采样/欠采样。 用于回归的合成少数过采样技术 (SMOTER)。其中有一个 R package 来实现。 我们瞄准R基于高度的C组合S策略 (WERCS)。其中有一个GitHub repository 的 R 代码来实现它。PS:您显示的表格似乎有分类问题,而不是回归问题。
【讨论】:
【参考方案3】:如前所述,我认为针对您的问题可能对您有所帮助的是 Synthetic Minority Over-Sampling Technique for Regression (SMOTER)。
如果您是 Python 用户,我目前正在努力改进 SMOGN 算法(SMOTER 的一种变体)的实现。 https://github.com/nickkunz/smogn
此外,Kaggle 上有一些应用 SMOGN 来改进预测结果的示例。 https://www.kaggle.com/aleksandradeis/regression-addressing-extreme-rare-cases
【讨论】:
以上是关于不平衡的训练数据集和回归模型的主要内容,如果未能解决你的问题,请参考以下文章
R语言plotly可视化:使用plotly可视化简单线性回归模型的回归线使用不同颜色区分训练集和测试集可视化分析模型在测试集上的泛化性能(linear regression plots)
R语言plotly可视化:可视化回归模型实际值和回归预测值的散点图分析回归模型的预测效能区分训练集和测试集一个好的模型大部分的散点在对角线附近添加边缘直方图以快速诊断模型可能存在的任何预测偏差