在回归问题中处理不平衡数据的正确方法是什么?

机器算法验证 回归 机器学习 不平衡类 加权回归 加权抽样
2022-04-18 22:16:19

我正在处理数据不平衡的回归问题,我想知道我是否正确地加权了错误。我将尝试用一个简单的例子来说明这个概念。

想象一下,我正在建立一个模型来预测纽约和洛杉矶的房价。NY我有比 中更多的训练示例LA,但我希望算法在两个城市中表现同样出色。使问题进一步复杂化的是,房价NY的差异比 中的更大LA

这是一个示例训练数据集:

City    N_rooms  House_Price
NY      4        400
NY      7        1000
NY      5        800
NY      3        300
NY      7        600
NY      2        100
NY      4        500
LA      3        400
LA      5        500
LA      4        500

我有7培训示例NY3培训示例LA如果我的成本函数是MSE,即sum((y_pred - y_true)^2)/10,为了确保算法在两个城市中表现同样好,我需要对预测误差赋予不同的权重,即

sum(w * (y_pred - y_true)^2)/10

我想知道以下哪一项是定义w和/或重新调整训练数据的正确方法:

  1. 不要使用权重(即w=1
  2. 定义w为训练集中每一类的反频,即w=1/3for house inLAw=1/7for house inNY
  3. NY分别对 in和的价格进行标准化,即从 in的每栋房屋的价格LA中减去 in 的平均价格,然后将 in 的每栋房屋的价格除以 in 的房价标准差类似地,从 中的每栋房屋的价格中减去平均价格,然后将每栋房屋的价格除以 中的房价标准差现在在缩放数据上训练回归模型。要预测实际价格,请将逆缩放应用于模型预测。NYNYNYNYLALALALA
  4. 应用两个点23

注意:目标不仅是最小化整体误差,而且是构建一个在两个城市中表现同样出色的算法。

2个回答

如果我对您的理解正确,这里的问题是您希望以这样一种方式拟合您的回归,使其在两个城市都表现得同样好,这意味着您希望使用权重最小化加权平方和确保每个城市的数据具有相同的总权重。如果这是正确的,那么这应该是一个相当简单的问题,您可以使用加权最小二乘估计对于这种类型的估计,您有一个n×n对角加权矩阵w,系数估计量为:

β^=(xTwx)1(xTwy).

现在,假设你有nNY来自纽约的数据点和nLA来自洛杉矶的数据点(这样n=nNY+nLA)。然后你会使用权重wNY=1/nNYwLA=1/nLA在您的权重矩阵中,这将确保两个城市的权重总体相等。作为这种加权的结果,将给予来自城市样本较少的数据点更多的权重。

现在,我还将处理您的进一步复杂性,即您说一个城市的差异比另一个城市多。我在这里的建议是拟合一个使用加权最小二乘法的首次通过模型,一个城市的权重为统一,另一个城市的权重为自由参数。这将为您估计两个城市的误差方差的相对大小。然后,您可以在进行主要加权分析(如上所述)时采用该估计并将其作为附加权重应用。所以,例如,如果我们让δ^σ^NY2/σ^LA2表示估计的相对误差方差,然后我们将使用随后的权重wNY=1/nNYwLA=δ^/nLA在你的加权分析中。这应该允许您合并两个城市的不同误差方差,并应用您自己的权重来强制分析对两个城市给予“相等的权重”(在调整误差方差后)。

处理不平衡数据的一种方法是对响应变量中罕见或不常见的感兴趣区域进行过采样,而对常见区域进行欠采样。

我可能会建议下面引用的论文。如果您对实际解决方案更感兴趣,第一作者有一个关于如何完成此任务的 R 实现,可在她的 Github 页面上找到。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