偏斜/高峰度数据的支持向量回归

机器算法验证 机器学习 支持向量机 交叉验证 预测模型 异常值
2022-03-11 12:52:32

我正在使用支持向量回归来模拟一些相当倾斜的数据(具有高峰度)。我已经尝试直接对数据进行建模,但我得到了错误的预测,我认为这主要是由于数据的分布,它与非常肥大的尾巴正好倾斜。我很确定一些异常值(它们是合法的数据点)正在影响 SVR 训练,也许还会影响交叉验证,目前我正在通过最小化均方误差来优化超参数。

我尝试在应用 SVR 之前缩放我的数据(例如使用 sqrt 函数来减少异常值)以及使用不同的超参数最小化函数(例如绝对误差),这似乎可以提供更好的结果,但仍然不是很好。我很好奇是否有人遇到过类似的问题以及他们是如何解决的?欢迎任何建议和/或替代方法。

3个回答

您可以使用偏斜重尾Lambert W 分布将您的数据转换为表现更好的数据(免责声明:我是两篇论文和LambertW R 包的作者)。Box-Cox 变换的优势在于它们没有任何正性限制,可以从数据中估计 (MLE) 变换的最佳参数,您也可以忘记变换并将数据建模为 Lambert W x F 直接分配。

LambertWR提供了几个估计器、转换、方法等。我特别推荐看看

   Gaussianize()
   IGMM()
   MLE_LambertW()

偏态 Lambert W x F 分布是一个通用框架,可以生成任何分布 F 的偏态版本。相反,您可以使偏态数据再次对称;这个对称数据的分布基本上决定了你拥有什么样的Lambert W x F;如果数据只是有点不对称,那么你可能有一个倾斜的 Lambert W x Gaussian;如果您的数据也很重,那么您可以尝试使用倾斜的 Lambert W x t。

重尾 Lambert W x F 是 Tukey 的 h 分布的推广,它们提供了一种逆变换来使数据成为高斯分布(也来自非对称)。在论文中,我证明即使是 Cauchy 也可以被高斯化到您 - 以及几个正态性测试 - 无法将其与正态样本区分开来的水平。

处理负值的一种方法是将变量转移到正范围(比如大于或等于 0.1),应用 Box-Cox 变换(或仅使用 log() 进行快速测试),然后进行标准化。标准化对于 SVR 可能很重要,因为 SVR 依赖于对所有系数统一应用的二次惩罚(因此 SVR 不是尺度不变的,并且可以从变量标准化中受益)。确保检查生成的变量分布——它们不应该有太大的偏差(理想情况下它们应该看起来像高斯分布)

另一种可以尝试的技术是x <- x / norm(x)根据“空间符号预处理:一种向多元估计器赋予适度鲁棒性的简单方法”对输入向量应用“空间符号”变换。J.化学。信息。模型(2006)卷。46 (3) pp. 1402–1409虽然我对这种技术运气不佳,但里程可能会有所不同。

接近解决方案的一种方法是构建两个模型:一个用于与分布一致的值,另一个用于异常值。我在这方面的建议是创建一个二进制响应变量 (0,1),如果数据点在您的分布范围内,则值为 0,如果在分布范围内,则值为 1。因此,对于您想要保留在数据中的异常值的情况,您的目标变量中将包含 1,其余为 0。现在运行逻辑回归以预测异常值的概率,您可以乘以平均值对于具有个体概率的异常值组来获得预测。对于其余数据,您可以运行 SVM 来预测值。

因为这些值是离群值,所以它们的相关概率很低,即使你取偏斜的离群值的平均值,离群值的期望值也会被它们附加的低概率拉低,并在那里使它变得更合理的预测。

在预测保险服务提供商的索赔金额时遇到了类似的情况。我已经使用上述技术大幅提高了模型的性能。

另一种方法可能是对目标变量进行对数转换,如果目标变量中只有正值,这是可能的。但请确保您是否正在对目标变量进行对数转换,同时预测您需要包含错误分量的变量。

因此,是您的模型方程,例如log(Y)=a+BX+ϵ

那么,Y=exp(a+BX+ϵ)

您可以查看以下链接进行日志转换: http: //www.vims.edu/people/newman_mc/pubs/Newman1993.pdf