如何转换一个不平衡的属性,使其更适合线性回归?
您有多种选择,您可以通过查看性能来选择最佳选择。
第一个是使用猜测。对于仅正值,对数变换是有意义的热门候选者(对于此处的小值可能是正确的,以避免过大的负变换值)。
如果百分比增加具有特定的现实意义,那么对数变换是很自然的。财务数据通常是这种情况。为什么 log 是热门候选人?您可能知道,当存在附加的现实世界效应时,通常会出现正态分布。现在,当你有乘法效应时,你会得到https://en.wikipedia.org/wiki/Log-normal_distribution。
其他常见的转换是幂转换,您可以在其中获取一些值的幂。我不认为还有很多非常常见的。从理论上讲,您的完美变换会使线性回归高斯噪声,但没有人能说出那会是什么,而且很可能现实无论如何都不是完全线性的。
当变换后的值遵循高斯分布时,变换会更有趣。但这只是一个猜测,最终只有最终的性能评估才能说明更多信息。
对于第二个选项,请注意您可以强制转换后的值是您想要的任何分布。例如,如果您对值进行排序,您会得到一个统一的变换分布。您甚至可以通过合适的映射将其强制为高斯。但是,在您的情况下,这将失去右侧有趣的凹凸。
我认为这些是最常见的选择。在数据科学中,没有什么是显而易见的,大多数时候你只能通过性能评估(与整个模型的交叉验证)来决定。
结论:
设置性能测试(交叉验证;如果您喜欢公平的最终评估,则不在最终测试集上)并尝试以下所有方法
- 尝试未转换。它可能已经是拥有最多信息的地方。
- 尝试对数转换(如果您有一些非常小的值,则添加一个小的偏移量)
- 如果您愿意,请尝试电源转换
我认为考虑到您的问题可能会对您有所帮助的是 Synthetic Minority Over-Sampling Technical for Regression (SMOTER)。有一些关于这个主题的研究。但是,与您可能遇到的分类对应物相比,它的探索程度仍然较低。
我可能会建议下面引用的论文(以及在http://proceedings.mlr.press/v74/上介绍的会议),这取决于您对从研究角度理解它的兴趣程度。我非常感谢在生成合成观测值时引入高斯噪声。
如果您对实际解决方案更感兴趣,第一作者在她的 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。