Python 中用于 ML 的鲁棒回归

2025 年 6 月 25 日 | 阅读 8 分钟

引言

鲁棒回归是一种特殊的回归分析形式,它能在存在非理想数据的情况下进行强大的校正。确切地说,它旨在在存在异常值、缺失值或噪声的情况下,也能产生可靠和准确的结果。与非常容易受异常值影响的普通 OLS 方法相比,鲁棒回归采用定制的损失函数或算法来最大限度地减少异常值的影响。

关键重要性

  • 保证模型在数据行为不佳甚至混乱时的可靠性。
  • 有助于提高 机器学习模型 对从未见过的数据的泛化能力。
  • 适用于金融、医疗保健以及环境科学等领域,因为这些领域噪声和异常值很常见。

传统回归技术的挑战

具体来说,OLS 传统回归方法基于输入数据遵循某些属性的信念。

  • 误差的正态分布:由于 OLS 用正态分布来表示残差,这是 OLS 的一个假设。
  • 对异常值的敏感性:仅仅一个异常值就会导致回归系数和预测值严重失真,从而产生不准确的结果。
  • 方差齐性(同方差性):验证误差的方差在自变量的不同水平上是恒定的。

如果这些假设不成立,那么传统回归可能产生有偏或误导性的结果。一个简单的应用是,如果数据集中存在几个极端异常值,OLS 会倾向于生成更契合异常值而不是大部分数据点的系数。通常,这种敏感性需要预处理步骤来去除或减弱异常值的影响,这会限制时间和潜在地引入错误。

鲁棒回归在机器学习中的应用

在机器学习中,有许多情况需要使用鲁棒回归技术,以确保在存在噪声或非理想数据集时模型不会失去其准确性和鲁棒性。

  • 金融:预测股票价格和市场趋势,因为历史数据可能包含由市场崩盘等意外事件引起的异常值。
  • 医疗保健:对患者结果进行建模,这可能由于受试者测量错误或罕见的医疗问题而导致异常值。
  • 环境科学:环境监测系统中的传感器数据分析,这些系统可能遭受瞬时故障或环境(生态)干扰。
  • 自主系统:机器人和自动驾驶汽车中的决策模型,传感器精度不佳是一个常见问题。
  • 电子商务:在电子商务中进行推荐,尤其是在客户购买行为异常的情况下,例如异常的购买模式。

鲁棒回归的关键概念

异常值及其对回归模型的影响

异常值数据点是指与数据集的整体模式显著不同的点。异常值问题经常影响经典回归模型(如普通最小二乘法 OLS)的系数估计,导致预测可能出错以及模型可靠性下降。

为什么会出现异常值?

  • 测量错误
  • 数据中的自然变异
  • 数据输入错误

异常值的影响

  • 参数估计的偏差。
  • 残差的膨胀导致预测误差增大。
  • 数据分布的误表示导致过拟合或欠拟合。

鲁棒回归方法试图减弱异常值的影响,以获得对噪声或不规则数据更具泛化能力的模型。

鲁棒损失函数

鲁棒回归技术最小化损失函数,从而生成不受异常值影响的鲁棒回归方程。通过使这些损失函数对极端偏差不敏感,模型性能会更稳定。

Huber 损失:

结合了 L1 和 L2 损失函数的最佳特性。对于小残差,它表现为 L2 损失;对于大残差,它切换为 L1 损失,以控制异常值的影响。

数学表达式

Robust Regression for ML in Python

主要特点

  • 结合了鲁棒性和效率
  • 对于包含轻微异常值的数据集有效
  • 应用:具有不同噪声水平的回归问题

Tukey 的双平方损失

一种鲁棒的损失函数,其中大于阈值的残差被赋予零权重。

数学表达式

Robust Regression for ML in Python

主要特点

  • 在忽略极端异常值方面表现得更具侵略性。
  • 阈值 cc 的调整会带来某些要求。
  • 应用:包含极端或聚类异常值的数据

分位数损失

可以容纳目标变量特定分位数的预测,因此非常适合具有偏斜或异方差分布的数据集。

数学表达式

Robust Regression for ML in Python

其中 τ 是期望的分位数(例如,0.5 表示中位数)。

主要特点

  • 可针对不同分位数进行定制。
  • 有助于分析非均匀数据中的关系。
  • 应用:预测和风险分析

与普通最小二乘法 (OLS) 的比较

方面普通最小二乘法 (OLS)鲁棒回归
对异常值的敏感性高度敏感最小化异常值影响
损失函数L2 损失专用损失函数(Huber、Tukey)
性能最适合干净、正态分布的数据对于有噪声或非标准数据具有可靠性
实施易于实现且计算效率高稍微复杂,开销较高
最佳用例干净的数据集,线性关系具有噪声、偏斜分布或异常值的数据

流行的鲁棒回归方法

RANSAC (Random Sample Consensus)

RANSAC 是一种鲁棒的回归算法,能够可靠地处理输入数据中的大量异常值。它通过选择数据的随机子集来估计模型参数,然后评估估计模型与所有数据部分的共识。

RANSAC 算法的步骤

  • 从数据集中选择一个随机的数据点子集。
  • 对该子集进行回归并拟合回归模型。
  • 确定内点:满足模型且在一定容差范围内的数据点。
  • 对固定数量的迭代重复此过程,或直到我们恰好拥有固定数量的内点。
  • 选择具有最多内点的模型并返回。

优点:

  • 它对异常值的容忍度很高,并且不需要看到异常值也能做到。
  • 它易于实现,并且对于较小的数据集计算效率很高。

缺点:

  • 对于包含许多与模型仅略有不同的内点的数据集,性能可能会下降。
  • 它对与容差阈值和迭代次数相关的参数高度敏感。

Theil-Sen 估计器

基于中位数的回归方法

Theil-Sen 估计器是一种非参数估计器,它计算数据集中所有数据点对斜率的中位数。这是一种对异常值鲁棒的方法,因为中位数不会对极端值做出剧烈反应。

Theil-Sen 估计器的步骤

  • 找到每对数据点之间的斜率。
  • 我们可以将最后一个回归斜率作为这些斜率的中位数。
  • 可以通过使用中位数斜率和中位数数据点来找到截距。

在高维数据中的应用

在处理存在异常值的高维数据时,Theil-Sen 估计器特别有效。例如,在环境科学或金融领域,它被用于需要鲁棒线性关系的情况。

Huber 回归

平衡对异常值的敏感性

Huber 回归是一种结合了平均绝对误差 (MAE) 的鲁棒性和平均平方误差 (MSE) 的效率的混合方法。它是一个分段损失函数。

  • 对于残差小于阈值的数据点,我们使用 MSE。
  • 无论如何,它可以通过采用 MAE 来处理残差大于阈值的数据点。

该方法对小的变化敏感,但对异常值不敏感。这是因为存在一个阈值参数(可以调整)对于实现所需的鲁棒性水平至关重要。

分位数回归

与经典回归相反,分位数回归预测响应变量的条件分位数,而不是均值。因此,它适用于具有异方差(即方差不恒定)的数据集,以及当您有兴趣了解分布的尾部时。

分位数回归的应用包括

  • 金融:经济价值风险 (VaR) 和极值建模。
  • 医疗保健:理解患者结果的变异性。
  • 环境研究:检查极端天气模式。

由于它不假设残差的方差恒定,因此分位数回归是鲁棒的,并且适合复杂现实世界的数据集。

在 Python 中实现鲁棒回归

Scikit-Learn

Scikit-learn 的回归技术是鲁棒的,例如 HuberRegressor 和 RANSACRegressor,它们效率高且易于使用。它将这些方法无缝集成到库中,使得预处理数据、创建管道和评估模型成为可能。

  • HuberRegressor:这是一种线性回归,它使用 Huber 损失而不是标准的均方误差,因此对异常值的敏感性较低。
  • RANSACRegressor:它是一种鲁棒模型,试图在数据的随机子集上拟合模型并丢弃异常值。

Statsmodels

将使用 Statsmodels 中鲁棒回归的高级功能,这是一个强大的统计建模库。该库支持

  • RLM (Robust Linear Model):RLM 中的定制损失函数(Huber、Andrew 和 Tukey 的 Biweight)专门设计用于有效处理异常值问题。
  • 提供模型整体性能可机器读取表示的等效版本。

PyTorch/TensorFlow 用于自定义实现

要构建自定义鲁棒回归模型,这些是最佳选择:PyTorchTensorFlow

  • 它还允许您定义自定义损失函数,如 Huber 损失或分位数损失。
  • 然而,这些框架为处理大型数据集以及将鲁棒回归集成到更大型的机器学习管道中提供了极大的灵活性。

分步代码示例

1. 数据准备和预处理

数据集的准备包括数据的清理和分割、处理缺失值的位置以及识别潜在的异常值。

2. 拟合鲁棒回归模型

并分别使用 Scikit-Learn 的 HuberRegressor 和 RANSACRegressor 处理异常值。

3. 可视化结果

对鲁棒回归模型与模型预测之间的比较。

代码

输出

Robust Regression for ML in Python