最强总结,十大回归算法,Ridge回归 !!

文摘   2024-10-23 11:26   北京  

哈喽,我是小白~

在前几天,咱们分享了关于回归类算法的总结,总共是十大回归类算法,这里跳转可以查看~

今天咱们再来分享其中一种重要的算法模型:Ridge回归。

如果需要本文PDF版本的同学,文末获取~

另外,文末有总结性的干货~

一起来看下今天的内容!

往期回归算法

最强总结,线性回归 

本期回归 - Ridge回归

什么是 Ridge 回归?

Ridge 回归是一种 线性回归 的改进版,适用于 多重共线性 问题。在线性回归中,模型试图找到一条最能描述数据趋势的直线,但当有多个自变量(特征)之间存在较强的相关性时,模型的结果可能会变得不稳定,导致模型的泛化能力较差。为了避免这个问题,Ridge 回归在损失函数中引入了一个 惩罚项,即对回归系数的大小进行一定的约束,从而防止过拟合。

简单来说,Ridge 回归 的目标是找到一种既能很好地拟合数据,又不会让模型过于复杂的平衡方案。

Ridge 回归公式

我们先来看线性回归的公式:

其中, 是我们要找的回归系数(即模型参数)。

线性回归的目标是最小化 均方误差(MSE),即:

Ridge 回归在此基础上加了一个 惩罚项

其中, 是一个非负的超参数,用来控制惩罚的强度。如果 ,Ridge 回归退化成普通的线性回归;如果  很大,那么模型会强烈约束参数 ,迫使它们接近于 0。

为什么需要 Ridge 回归?

当数据中有多重共线性时,不同的特征可能会高度相关,这使得线性回归模型的系数变得非常不稳定。Ridge 回归通过给系数添加惩罚项,可以减小这些不稳定性,使得模型更加稳健。

通俗的案例

案例:预测房价

假设我们要预测一个房子的价格 ,根据房子的面积  和卧室数量  两个因素来进行预测。我们的目标是找到合适的回归系数(即模型中的  和 ),来建立预测房价的模型。

但是,问题出现了:房子的面积和卧室数量之间可能有较强的相关性,因为更大的房子往往会有更多的卧室。如果直接用线性回归,模型的系数可能会因为这两个变量的强相关性变得不稳定,导致在某些情况下预测不准确。

在这种情况下,我们可以使用 Ridge 回归来约束模型的系数,避免系数过大或者过小。

Ridge 回归的简单计算

假设我们有以下几组数据:

面积(x1)卧室数量(x2)房价(y)
1203200
1504250
1705270
2006300

我们要拟合一个线性模型:

假设经过线性回归,我们得到的系数是:,但是这些系数可能会让模型对数据中的噪声非常敏感。

为了控制这种情况,我们引入 Ridge 回归,假设 。因此,我们要最小化的损失函数变为:

具体的步骤是:最小化均方误差(即预测值和实际值之间的差异),同时在惩罚项中对  和  的平方加权,以防止它们变得过大。

假设经过计算后,Ridge 回归得到了新的系数 。这些系数比线性回归的系数要小,说明 Ridge 回归限制了参数的过大波动。

这样简单地引入 Ridge 回归后,大家应该能理解它的基本概念和用法了,下面咱们详细的从原理和案例和大家聊聊~

公式解析

Ridge 回归(也称为 岭回归)是在传统的线性回归基础上加入了 L2 正则化(惩罚项)的一种回归方法,主要用于解决线性回归中的 多重共线性 问题。它通过引入一个惩罚项来限制回归系数的大小,从而提高模型的稳健性。

1. 线性回归的基本公式

线性回归的目标是找到参数  使得模型对数据的预测值与真实值之间的误差最小。线性回归模型的表达式为:

其中:

  •  是  的设计矩阵,包含  个样本,每个样本有  个特征;
  •  是  的系数向量,表示回归系数;
  •  是  的预测值向量。

线性回归的目标是最小化均方误差(MSE),即:

为了简化推导,去掉  这个系数,优化问题可以写成最小化如下的目标函数:

2. Ridge 回归的损失函数

为了控制模型过拟合,我们在上面的线性回归目标函数上加上一个 L2 惩罚项,即 Ridge 回归的损失函数:

其中:

  •  是惩罚系数,控制正则化的强度;
  •  是回归系数的 L2 范数的平方,用于限制系数的大小。

Ridge 回归的目标是最小化这个正则化后的损失函数。

3. 求解 Ridge 回归的系数

为了最小化 Ridge 回归的损失函数,我们需要对  求导并解方程。

目标函数

展开 第一项 

因此,目标函数可以写成:

接下来,我们对  求导数:

令导数等于 0,得到:

简化后:

这就是 Ridge 回归的正规方程。将  提出来,可以写成:

其中, 是一个  的单位矩阵,用于确保  是可逆的。

4. Ridge 回归系数的解

为了求解回归系数 ,我们可以通过矩阵求逆得到:

这个公式表明了 Ridge 回归与普通线性回归的区别。普通线性回归的系数为:

当  是奇异矩阵或接近奇异时,普通线性回归的解会非常不稳定,而 Ridge 回归通过在  上加上 来确保其可逆性,即使  存在多重共线性。

5. Ridge 回归的正则化作用

正则化参数  的作用是对回归系数进行限制。根据公式 ,可以看出:

  • 当  时,Ridge 回归退化为普通的线性回归;
  • 当  越大时,惩罚项对系数的影响越大,回归系数  会趋向于零,模型会更简单,但也可能导致 欠拟合

6. 总结 Ridge 回归的推导步骤

  1. 原始线性回归模型:通过最小化均方误差  来求解系数。
  2. 引入正则化项:加入  来控制回归系数的大小,防止过拟合。
  3. 求导并求解:通过对损失函数求导,得到正规方程 
  4. 解出系数:通过矩阵求逆得到 ,并通过调整  控制模型的复杂度。

Ridge 回归的核心思想是平衡模型的拟合能力和系数的复杂度,在处理多重共线性问题时表现尤为有效。

优缺点和适用场景

Ridge 回归的优缺点

优点

  1. 解决多重共线性问题:当特征之间存在高度相关时(即多重共线性),普通的线性回归模型容易失效,系数会变得不稳定。Ridge 回归通过引入惩罚项有效减少了系数的不稳定性,避免了模型对数据的过度拟合。

  2. 降低模型复杂度,防止过拟合:Ridge 回归通过惩罚系数(L2 正则化)控制回归系数的大小,限制了模型的复杂度。特别是当特征数量远大于样本数时,模型容易过拟合,Ridge 回归可以很好地应对这种情况。

  3. 提升泛化能力:在测试数据上的表现更加稳健,尤其是在数据有噪声或特征较多时,Ridge 回归的正则化可以提高模型的泛化能力。

  4. 可用于高维数据:在高维数据中,线性回归容易受噪声的影响,而 Ridge 回归能够抑制系数的过大波动,使得模型更加稳健,适合特征数量大于样本数量的情况。

  5. 简单高效:Ridge 回归是一种扩展了的线性回归,算法简单且可以使用矩阵运算快速求解,计算效率较高。

缺点

  1. 难以选择合适的正则化参数:正则化参数  的选择对模型的性能有较大影响。如果  过小,正则化效果不明显,可能导致过拟合;如果  过大,模型可能欠拟合。因此,通常需要通过交叉验证等方式来调节这个参数。

  2. 不能完全消除不重要的特征:Ridge 回归通过缩小回归系数来减小不重要特征的影响,但不会将系数完全缩小为 0。相比之下,Lasso 回归可以将不重要的特征的系数缩为 0,从而实现特征选择。

  3. 不适合非线性问题:Ridge 回归本质上是一种线性模型,如果数据的真实关系是非线性的,Ridge 回归无法很好地捕捉这种非线性关系。在这种情况下,应该考虑非线性模型或核 Ridge 回归。

Ridge 回归的适用场景

Ridge 回归适用于特征较多、特征之间存在一定相关性,并且需要避免模型过拟合的情况。常见的使用场景包括:

  1. 高维数据:当特征维度远大于样本数量时,Ridge 回归非常有用。由于普通的线性回归会导致不稳定的解,Ridge 回归通过正则化能够有效解决这个问题。

  2. 数据中存在噪声:当数据中有噪声时,Ridge 回归可以通过缩小系数的大小,避免模型对噪声的过度敏感,从而提升模型的稳健性。

  3. 多重共线性问题:当特征之间存在高度相关时,普通线性回归的系数会变得不稳定,Ridge 回归通过正则化系数来减少多重共线性带来的影响,使得模型更加稳健。

  4. 需要降低模型复杂度:当模型出现过拟合时,Ridge 回归是一个有效的正则化手段,通过控制模型复杂度来提升泛化能力。

常见的使用 Ridge 回归处理的案例

1. 预测房价

在房价预测的任务中,特征可以包括房屋的面积、房龄、卧室数量、地理位置、装修质量等。这些特征之间可能存在多重共线性(例如面积和卧室数量可能高度相关)。使用 Ridge 回归,可以有效控制回归系数,避免模型过拟合到这些相关特征上,从而提高模型的泛化能力。

2. 医学数据分析

在生物医学领域,数据集往往包含大量特征(如基因表达数据、患者病史等),而样本量相对较小。特征之间可能有一定相关性,Ridge 回归可以在这种高维数据下发挥作用,防止模型对训练数据过拟合,从而提高在新数据上的预测能力。

3. 金融市场预测

在金融市场中,投资组合的收益可能受多种因素影响,如利率、经济指标、公司财务数据等。这些变量之间可能存在多重共线性,例如利率和通货膨胀率可能有较强相关性。通过 Ridge 回归,可以减少这些相关特征对模型的影响,构建一个更为稳定的预测模型。

4. 文本分类

在文本分类任务中,例如情感分析或新闻分类,词袋模型会产生大量的特征(每个词作为一个特征),且特征之间可能存在一定的相关性(例如相同主题下的相关词汇)。Ridge 回归可以通过正则化来减少特征之间的多重共线性问题,提高分类模型的准确性。

5. 广告点击率预测

在广告投放中,点击率预测模型需要考虑用户的多个行为特征,如浏览历史、购买记录、地理位置等。由于这些特征可能高度相关(例如,用户所在城市和浏览商品之间可能存在共性),Ridge 回归可以帮助降低共线性对模型的影响,使预测结果更加准确。

总的来说,Ridge 回归的优点 在于解决多重共线性、降低模型复杂度、提升泛化能力,尤其适用于高维数据、有噪声数据或多重共线性较严重的场景。它的 缺点 主要是不能将不重要的特征系数缩为 0,且需要调节正则化参数 。Ridge 回归常用于预测房价、医学数据分析、金融市场预测等场景,可以有效避免过拟合,提高模型的稳健性和泛化能力。

完整案例

我们使用 Kaggle 上的加利福尼亚房价数据集来进行实验。这个数据集提供了更多的样本数和特征,适合 Ridge 回归进行建模和分析。

加利福尼亚房价数据集包含加利福尼亚州多个地区的房屋价格及其相关特征,比如房屋的纬度、经度、人口、房屋年龄、平均房间数、收入中位数等。

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import Ridge
from sklearn.metrics import mean_squared_error, r2_score
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import fetch_california_housing

# 设置Seaborn的颜色主题
sns.set(style="whitegrid", palette="bright")

# 加载加利福尼亚房价数据集
california = fetch_california_housing()
data = pd.DataFrame(california.data, columns=california.feature_names)
data['PRICE'] = california.target

# 数据标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(data[california.feature_names])
y = data['PRICE']

# 数据分割为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)

# 创建 Ridge 回归模型,设置惩罚项参数 alpha
ridge_model = Ridge(alpha=1.0)
ridge_model.fit(X_train, y_train)

# 预测房价
y_train_pred = ridge_model.predict(X_train)
y_test_pred = ridge_model.predict(X_test)

# 计算模型评估指标
train_rmse = np.sqrt(mean_squared_error(y_train, y_train_pred))
test_rmse = np.sqrt(mean_squared_error(y_test, y_test_pred))
train_r2 = r2_score(y_train, y_train_pred)
test_r2 = r2_score(y_test, y_test_pred)

print(f"训练集 RMSE: {train_rmse:.2f}, R²: {train_r2:.2f}")
print(f"测试集 RMSE: {test_rmse:.2f}, R²: {test_r2:.2f}")

# ------------------ 可视化分析图形 -------------------

# 图1: 特征重要性条形图
coefficients = pd.Series(ridge_model.coef_, index=california.feature_names)
coefficients = coefficients.sort_values()

plt.figure(figsize=(106))
sns.barplot(x=coefficients, y=coefficients.index, palette='coolwarm')
plt.title('Feature Importance in Ridge Regression (California Housing)')
plt.xlabel('Coefficient Value')
plt.ylabel('Features')
plt.grid(True)
plt.show()

# 图2: 真实值 vs 预测值的对比图(测试集)
plt.figure(figsize=(88))
plt.scatter(y_test, y_test_pred, c='orange', edgecolors='b', s=80, alpha=0.6, linewidths=1.5)
plt.plot([min(y_test), max(y_test)], [min(y_test), max(y_test)], 'k--', lw=2)
plt.title('Actual vs Predicted House Prices (Test Data)', fontsize=16)
plt.xlabel('Actual Prices ($1000s)', fontsize=12)
plt.ylabel('Predicted Prices ($1000s)', fontsize=12)
plt.grid(True)
plt.show()

# 图3: 残差图(测试集)
residuals = y_test - y_test_pred

plt.figure(figsize=(106))
sns.histplot(residuals, kde=True, color='purple', bins=20)
plt.title('Distribution of Residuals (Test Data)', fontsize=16)
plt.xlabel('Residuals', fontsize=12)
plt.ylabel('Frequency', fontsize=12)
plt.grid(True)
plt.show()

# 图4: 残差与预测值的关系图
plt.figure(figsize=(106))
sns.scatterplot(x=y_test_pred, y=residuals, hue=residuals, palette="cool", s=100, edgecolor='b')
plt.axhline(0, color='red', linestyle='--', lw=2)
plt.title('Residuals vs Predicted Prices', fontsize=16)
plt.xlabel('Predicted Prices ($1000s)', fontsize=12)
plt.ylabel('Residuals', fontsize=12)
plt.grid(True)
plt.show()
  1. 数据预处理:使用 fetch_california_housing() 加载加利福尼亚房价数据集。对特征进行标准化处理,以确保不同特征的量纲相同。

  2. 模型训练与预测:使用 Ridge 模型进行 Ridge 回归,alpha=1.0 代表正则化强度。分割数据集为训练集和测试集,训练模型并进行预测。输出模型在训练集和测试集上的 RMSE 和 R² 指标,用以评估模型性能。

数据分析图示

图1:特征重要性条形图,展示了 Ridge 回归中的每个特征系数大小。揭示了各个特征对房价预测的相对重要性。每个特征的系数表示该特征对目标变量(房价)的影响程度和方向。

正系数(> 0)表示该特征对房价有正向影响,即随着该特征的值增加,房价也会上升。

负系数(< 0)表示该特征对房价有负向影响,即随着该特征的值增加,房价会下降。

此外,系数的大小也反映了该特征影响的强度,系数绝对值越大,说明该特征对房价预测的影响越大。

图2:测试集实际房价和预测房价的对比散点图。每一个点表示一组真实房价和预测房价,点的位置越接近对角线(即 y=xy=x 的直线),表示模型的预测结果越准确。

对角线上的点:表示预测值与实际值非常接近,说明模型预测得较好。

远离对角线的点:表示模型的预测误差较大,说明在该样本上模型未能很好地拟合实际数据。

图3:残差分布图,通过直方图和 KDE(核密度估计)展示残差的分布情况。

残差:即 ,表示模型预测与实际值的差异。

  • 理想情况下,残差应当呈现正态分布,并且均值接近 0,这意味着模型没有系统性误差。
  • 该图揭示了残差是否对称分布,以及有没有显著的偏差(比如过多的正残差或负残差)。
  • 如果残差集中在 0 附近,说明模型的预测偏差较小;如果残差分布过宽或有偏,说明模型存在较大的误差。

图4:残差与预测房价的关系图。该图可以帮助我们检查模型是否在不同的预测值范围内表现出不同的误差模式。

  • 水平线(残差=0):表示没有误差。如果大多数点都接近该水平线,说明模型在不同房价区间内表现稳定。
  • 明显的模式或趋势:如果残差与预测值之间呈现出某种趋势或形状,说明模型在某些房价区间上可能存在系统性误差(例如,高价房或低价房预测不准)。

结果分析

  • 训练集与测试集的 RMSE 和 R²:可以衡量模型的拟合效果。如果测试集的 RMSE 低且 R² 高,则 Ridge 回归模型表现较好。
  • 可视化分析:特征重要性图说明了哪些变量对房价的影响最大;残差图与残差分布图有助于检查模型在不同房价区间的预测误差情况。

综上所有的内容,Ridge 回归不仅有效解决了房价预测中的多重共线性问题,还通过丰富的可视化图形清晰展示了模型的表现及其潜在问题。

往期回归算法

最强总结,线性回归 

最后

以上就是今天所有的内容了。
获取本文PDF,点击名片回复「基础算法模型」即可~
 
另外, 我们整理了机器学习算法册子,总共16大块的内容,124个问题的总结点击领取!
如果对你来说比较有用,记得点赞、转发,收藏起来慢慢学习~
下期会有更多干货等着你!~

Python和机器学习初学者
Python和机器学习分享,只写干货,一起学习~
 最新文章