sklearn基础--『监督学习』之岭回归

岭回归 (Ridge Regression)是一种用于处理共线性数据 的线性回归改进方法。

和上一篇用基于最小二乘法的线性回归相比,它通过放弃最小二乘的无偏性,

以损失部分信息、降低精度为代价来获得更实际和可靠性更强的回归系数。

1. 概述

岭回归的模型对于存在大量相关特征(这些特征之间存在很高的相关性)的数据时效果远好于基于最小二乘法的线性模型。

原因就是它通过给系数的大小增加一个约束条件(即L2正则化项 ),来防止模型过度拟合训练数据。

损失函数一般定义为: L ( w ) = ( y − w X ) 2 + λ ∥ w ∥ 2 L(w) = (y-wX)^2+\lambda\parallel w\parallel_2 L(w)=(y−wX)2+λ∥w∥2

其中 λ ∥ w ∥ 2 = λ ∑ i = 1 n w i 2 \lambda\parallel w\parallel_2 = \lambda\sum_{i=1}^{n}w_i^2 λ∥w∥2=λ∑i=1nwi2,也就是 L2正则化项

模型训练的过程就是寻找让损失函数 L ( w ) L(w) L(w)最小的参数 w w w。

也就等价于:\begin{align} & arg\ min(y-wX)^2 \\ & s.t. \sum w_{ij}^2 < s \end{align}

这两个公式表示,在满足约束条件 ∑ w i j 2 < s \sum w_{ij}^2 < s ∑wij2<s的情况下,计算 ( y − w X ) 2 (y-wX)^2 (y−wX)2的最小值。

2. 创建样本数据

岭回归 适用于特征之间有很高关联性的数据集。

所以用scikit-learn中的加州住房数据集 ,这个数据集有8个房屋售价相关的属性,属性之间关联性高。

数据集的文件获取可以参考:sklearn基础--『数据加载』之真实数据集

从上面的文章中下载数据集(是一个zip压缩文件),

如下例所示,下载之后在 D:\share\data 中解压,就可以加载了。

python 复制代码
import os
from sklearn.datasets import fetch_california_housing

home_dir = "D:\share\data"
data = fetch_california_housing(data_home=os.path.join(home_dir, "cal_housing"))
X = data["data"]
y = data["target"]

大约有2万多条数据。

3. 模型训练

数据加载之后,首先划分训练集和测试集。

python 复制代码
from sklearn.model_selection import train_test_split

# 分割训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1)

然后用岭回归模型训练数据:

python 复制代码
from sklearn.linear_model import Ridge

# 初始化岭回归线性模型
reg = Ridge()
# 训练模型
reg.fit(X_train, y_train)

这里,用的Ridge()模型的默认参数,它的一些主要参数如下(训练模型时可根据情况调整参数):

  1. alpha :控制正则化强度的常量,也就是上面公式中的 λ \lambda λ,默认值1,设置为0时,就是最小二乘法
  2. fit_intercept :是否拟合此模型的截距,默认 True
  3. copy_X :是否复制X(也就是训练数据),默认 True,设置为False的话,有可能会改变训练数据
  4. tol:算法迭代时,收敛的精度上限
  5. solver :迭代时使用的求解器,包含** {auto, svd, cholesky, lsqr, sparse_cg, sag, saga, lbfgs}** 等算法,默认 auto(根据数据类型自动选择求解器)

最后,用测试数据来验证训练后模型的性能。

python 复制代码
y_pred = reg.predict(X_test)
mse = metrics.mean_squared_error(y_test, y_pred)
r2 = metrics.r2_score(y_test, y_pred)
m_error = metrics.median_absolute_error(y_test, y_pred)

print("均方误差:{}".format(mse))
print("复相关系数:{}".format(r2))
print("中位数绝对误差:{}".format(m_error))

# 运行结果
均方误差:0.0029948538129997903
复相关系数:0.9987534427417275
中位数绝对误差:0.049467455621301726

从结果来看,模型的性能还不错,均方误差中位数绝对误差 都比较小,而复相关系数高,说明在测试数据中,预测的值和实际的值比较接近。

4. 总结

总之,岭回归 在很多场景下都有应用,例如多元线性回归、时间序列预测、特征选择等。

它的主要优点是可以处理共线性数据,并且在加入噪声的情况下会有更稳定的性能。

然而,由于其对数据的缩放敏感岭回归 的一个主要局限性是它可能对数据的尺度非常敏感

此外,岭回归 正则化参数的选择通常需要一些经验或者实验来确定,这也增加了其应用的复杂性

PS.
共线性是指特征之间存在高度相关性,这可能导致线性回归模型的不稳定。

相关推荐
星马梦缘13 小时前
机器学习与模式识别 第八章 MAP与偏方差 模拟卷及答案
人工智能·机器学习·map·岭回归·mle·双重下降
JackHCC14 小时前
自进化智能体协同进化综述
人工智能·机器学习
星马梦缘14 小时前
机器学习与模式识别 第十二章 自适应学习优化器 考点压缩
人工智能·机器学习·优化器·sgd·adam·rmsprop
qcx2315 小时前
Agentic RAG不止能回答问题,已经能自动修复真实CVE漏洞了
人工智能·机器学习·ai·llm·脑信号
jaychouchannel15 小时前
RecursiveCharacterTextSplitter 中文切分隐形缺陷:重叠、断语义、列表割裂完整复现与修复
人工智能·机器学习
天佑木枫16 小时前
AI:AI 开车撞了人,谁赔钱?——自动驾驶的法律黑洞
人工智能·机器学习·自动驾驶
zhiSiBuYu051716 小时前
混合检索实战指南:关键词与向量的完美融合
人工智能·python·机器学习
2601_9623446217 小时前
计算机毕业设计之基于大数据的手机销售数据对比分析系统
大数据·人工智能·深度学习·机器学习·智能手机·数据挖掘·课程设计
烟锁池塘柳017 小时前
【机器学习】万字长文详解集成学习 Ensemble Learning:从 Bagging、Boosting 到 Stacking 的全解析
机器学习·集成学习·boosting
2601_9623446218 小时前
计算机毕业设计之基于大数据的视频数据分析平台及可视化
java·大数据·人工智能·深度学习·机器学习·数据分析·课程设计