Huber回归与岭回归的比较

数据分析机器学习领域,回归模型的选择对于预测结果的准确性至关重要。本文通过一个生成的回归数据集,探讨了Huber回归和岭回归在面对数据集中的异常值时的不同表现。特别地,关注了Huber回归中参数epsilon的变化对模型预测的影响。

首先,生成了一个包含20个样本和1个特征的回归数据集,并人为添加了四个异常值。这些异常值的添加是为了模拟现实世界中数据的不完美性,以及测试不同回归模型对异常值的鲁棒性。

import matplotlib.pyplot as plt import numpy as np from sklearn.datasets import make_regression from sklearn.linear_model import HuberRegressor, Ridge # 生成示例数据 rng = np.random.RandomState(0) X, y = make_regression(n_samples=20, n_features=1, random_state=0, noise=4.0, bias=100.0) # 添加四个强异常值到数据集中 X_outliers = rng.normal(0, 0.5, size=(4, 1)) y_outliers = rng.normal(0, 2.0, size=4) X_outliers[:2, :] += X.max() + X.mean() / 4.0 X_outliers[2:, :] += X.min() - X.mean() / 4.0 y_outliers[:2] += y.min() - y.mean() / 4.0 y_outliers[2:] += y.max() + y.mean() / 4.0 X = np.vstack((X, X_outliers)) y = np.concatenate((y, y_outliers)) plt.plot(X, y, "b.")

接下来,使用Huber回归模型对数据集进行拟合,并观察了不同epsilon值下模型的表现。Huber回归是一种鲁棒的线性回归方法,它在异常值存在时比传统的岭回归更加稳定。随着epsilon值的增加,Huber回归的决策函数逐渐接近岭回归。

# 为Huber回归设置一系列epsilon值 colors = ["r-", "b-", "y-", "m-"] x = np.linspace(X.min(), X.max(), 7) epsilon_values = [1, 1.5, 1.75, 1.9] for k, epsilon in enumerate(epsilon_values): huber = HuberRegressor(alpha=0.0, epsilon=epsilon) huber.fit(X, y) coef_ = huber.coef_ * x + huber.intercept_ plt.plot(x, coef_, colors[k], label="huber loss, %s" % epsilon) # 拟合岭回归模型以进行比较 ridge = Ridge(alpha=0.0, random_state=0) ridge.fit(X, y) coef_ridge = ridge.coef_ coef_ = ridge.coef_ * x + ridge.intercept_ plt.plot(x, coef_, "g-", label="ridge regression") plt.title("HuberRegressor与Ridge回归的比较") plt.xlabel("X") plt.ylabel("y") plt.legend(loc=0) plt.show()

通过上述代码,可以看到,在存在异常值的情况下,Huber回归模型的预测结果受到的影响较小,而岭回归模型则对异常值更加敏感。随着Huber回归中epsilon参数的增加,其预测结果逐渐接近岭回归,这表明epsilon参数在调节模型对异常值的敏感度方面起到了关键作用。

总的来说,Huber回归和岭回归都是处理线性回归问题的有效工具,但在面对数据中的异常值时,Huber回归因其鲁棒性而表现出更好的性能。选择合适的回归模型需要根据数据的特点和分析目标来决定。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485