具有偏态分布的数据的均方误差

机器算法验证 错误 偏度
2022-03-23 10:43:14

我正在做回归任务,我的数据集中的响应变量有一个倾斜的分布。说,为了简单起见,我有一个模型 Y~X 和 Y(响应变量)在 [1,5] 但在 [4,5] 范围内的值比 [1,2] 多得多范围。因此,如果我只看 MSE 误差,无论 X 的值如何,预测 Y 为 4.5 的多数预测器都可以完成线性回归。

我想知道是否有任何有条不紊的方法来纠正 MSE 以考虑这种情况,并且当它得到 Y = 1 错误时,可能比它得到 Y = 5 错误时更多地惩罚多数预测器。基本上,我正在为偏斜数据寻找一个公平的错误度量。

更新: 为简单起见,假设多数预测器预测所有事物的 4.5,而不管 X 的值如何。我的预测器准确地预测 1,但总是预测 5 的 4.4。

Y 的测试集是一个 1,其余是 200 个数字,每个数字等于 5。基于 MSE,多数预测器比我的预测器好,但它没有任何意义。

我想修改 MSE 以支持对 1 的准确预测,而不是对 5 的准确预测。也许我可以将每个残差乘以实际 Y 频率的倒数?对于 Y 是连续的情况,我如何使用这样的 MSE?

更新 2: 所以有些人建议也许应该更正确地对 Y 进行采样,我需要找到我的数据的子样本,以提供 Y 的均匀分布。这在我的情况下是不可能的。假设我正在爬亚马逊,我看到的大多数评级都是 5(因为亚马逊删除了表现不佳的产品),但也有一些项目的评级为 1。现在,如果我使用一个多数预测器在任何地方预测 5,它将在 MSE 值方面击败我的 SVM,但多数预测器对我的系统没有任何价值。此外,我不想仅仅为了使收视率分布均匀而丢弃我的数据。我相信它应该是通过正确选择度量(误差度量)来实现的

附件是一个示例分布。 在此处输入图像描述

2个回答

一种可能的务实反应受到逻辑回归中使用的 logit 转换背后的动机的启发。在这种情况下,原始响应被限制在 0 和 1 之间,因此将其视为具有正态分布会导致各种问题。部分响应是通过 log(y/(1-y)) 进行转换,其中 y 是建模响应。

您的问题是可比较的,只是限制是 1 和 5 而不是 0 和 1。如果您想使用由正态分布假设驱动的方法分析数据(我会将平方误差的使用分类为其中),您可以考虑转换如下所示,它没有上限或下限(在 R 中,但如果您不熟悉它,代码应该是有意义的;关键行是从原始“y”创建“z”变量的那一行"):

# generate some skewed data in the [1,5] space:
y <- rnorm(1000,4,1)
y[y<1] <- runif(sum(y<1),1,3)
y[y>5] <- runif(sum(y>5),3.5,5)

# transform it similar to logit transform
z <- log((y-1)/4 / (1-(y-1)/4))

# plot the results
par(mfrow=c(1,2))
hist(y); hist(z)

在此处输入图像描述

新的 z 变量更适合 OLS 或您可能想尝试的任何其他类似技术。

如果我理解正确,您面临的问题是使用 MSE 您正在开发一个糟糕的预测器。这是偏斜人口问题的常见问题。例如,如果您试图在 99% 的人没有癌症的人群中预测一个人是否患有癌症(二进制),通过分析常规血液检查,通过最小化 MSE 训练的模型会说没有人患有癌症,并且精确度为 99%。

解决此问题的一种方法是使用 Fscore 而不是 Precision 或 MSE。Fscore 是一个错误度量,它同时使用 Precision 和 Recall。http://en.wikipedia.org/wiki/F1_score

我在 Andrew Ng 的 Coursera 机器学习课程中学到了这一点。这是有关偏斜类的错误度量的特定类的视频。http://www.youtube.com/watch?v=uj605bVFH8Y

希望这可以帮助!