机器学习学习笔记(13)----岭回归(Ridge回归)

article/2025/9/13 0:35:49

在《机器学习学习笔记(4)----线性回归的数学解析》,我们通过计算线性模型的损失函数的梯度,得到使得损失函数为最小值的\omega的解析解,被称之为普通最小二乘法:

\omega =(X^{T}X)^{-1}X^{T}y   (1)

公式(1)能够求得的前提是X^{T}X是满秩矩阵,这样才能计算得到它的逆矩阵。但是在很多情况下,矩阵不可逆。特别是当样本数m很大时,m >> n时,矩阵基本上是不可逆的,因为矩阵中出现大量线性相关的行向量的几率很高。这时,我们直接去算公式(1)是算不出来结果的。

为了解决这个问题,我们需要重新定义损失函数,在损失函数中引入范数项:

J(\omega)=\frac{1}{2m}((y-X\omega ) ^{T}(y-X\omega ) + \lambda \left \|\omega \right \|_{p}^{p} )   (2)

其中\lambda是个正整数,当p=2时,就是指岭回归模型。

这样J(\omega )的最小值就要求不仅是左边的部分要求得最小值,后面的范数项也要求得最小值。

对于岭回归模型,损失函数可以写成:

J(\omega )=\frac{1}{2m}((y-X\omega)^{T}(y-X\omega)+\lambda \omega^{T}\omega(3)

注意:

\frac{\partial(\omega ^{T} \omega)}{\partial\omega }=2\omega(4)

再根据我们前面在《机器学习学习笔记(4)----线性回归的数学解析》已经推导的结果,可得损失函数的梯度的表达式是:

\bigtriangledown J(\omega )=\frac{1}{2m}(2X^{T}X\omega-2X^{T}y+2\lambda \omega) =\frac{1}{m}(X^{T}X\omega-X^{T}y+\lambda \omega)(5)

\bigtriangledown J(\omega )=0,则:

X^{T}X\omega+\lambda \omega=X^{T}y   (6)

(X^{T}X+\lambda I) \omega=X^{T}y  (7),其中I是单位矩阵。

\omega=(X^{T}X+\lambda I)^{-1} X^{T}y  (8)

因为加入了\lambda I项,通过调整\lambda值,  X^{T}X+\lambda I肯定可以调整为满秩矩阵,因此可以求得其逆矩阵。

接下来,我们用python实现一个岭回归算法(ridge.py):

import numpy as npclass RidgeRegression:def __init__(self, lambda_v=0.05):# 范数项的系数self.lambda_v = lambda_v# 模型参数w(训练时初始化)self.w = Nonedef _ridge(self, X, y):'''岭回归算法'''_,n = X.shapeI = np.identity(n)tmp = np.linalg.inv(np.matmul(X.T, X) + self.lambda_v*I)tmp = np.matmul(tmp, X.T)return np.matmul(tmp, y)def _preprocess_data_X(self, X):'''数据预处理'''# 扩展X,添加x0列并设置为1m, n = X.shapeX_ = np.empty((m, n+1))X_[:,0] = 1X_[:, 1:] = Xreturn X_def train(self, X_train, y_train):'''训练模型'''# 预处理X_train(添加x0列并设置为1)_X_train = self._preprocess_data_X(X_train)# 使用岭回归算法估算wself.w = self._ridge(_X_train, y_train)def predict(self, X):'''预测'''# 预处理X_train(添加x0列并设置为1)_X = self._preprocess_data_X(X)return np.matmul(_X, self.w)

_ridge函数,就是岭回归算法的实现。

使用红酒口感数据集,对上面的岭回归算法实现进行测试,红酒数据集的路径:https://archive.ics.uci.edu/ml/datasets/wine+quality,winequality-red.csv。

先加载数据集:

>>> import numpy as np
>>> data = np.genfromtxt('winequality-red.csv',delimiter=';',skip_header=True)
>>> X=data[:,:-1]
>>> y = data[:,-1]

然后创建模型:

>>> from ridge import RidgeRegression
>>> ridge_r = RidgeRegression()

然后,用train_test_split切分训练集和测试集:

>>> X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3)

然后,做训练和预测:

>>> ridge_r.train(X_train, y_train)

>>> y_pred = ridge_r.predict(X_test)

使用均方误差来衡量回归模型的回归效果:

>>> mse = mean_squared_error(y_test, y_pred)
>>> mse
0.4284235160100709
>>> y_train_pred = ridge_r.predict(X_train)
>>> mse_train = mean_squared_error(y_train, y_train_pred)
>>> mse_train
0.41419102073144654

训练集的拟合效果好于测试集。

使用sklearn库中的岭回归模型进行训练和预测,并评估回归效果:

>>> from sklearn.linear_model import Ridge
>>> rg =Ridge(0.05, normalize=True)
>>> rg.fit(X_train, y_train)
Ridge(alpha=0.05, copy_X=True, fit_intercept=True, max_iter=None,
      normalize=True, random_state=None, solver='auto', tol=0.001)
>>> y_pred=rg.predict(X_test)
>>> mse=mean_squared_error(y_test, y_pred)
>>> mse
0.4275656395927125
>>> y_train_pred = rg.predict(X_train)
>>> mse_train = mean_squared_error(y_train, y_train_pred)
>>> mse_train
0.4143351974898082

发现和我们示例的岭回归的效果差不多。

参考资料:

《机器学习:从公理到算法》

《机器学习算法》


http://chatgpt.dhexx.cn/article/WIxfd7yU.shtml

相关文章

Python机器学习教程—岭回归的原理和实现

在某些场景下,线性回归无法给出一个效果好的预测模型,那么就需要使用线性回归的升级版,去面对更复杂的应用场景,本文所记录的岭回归便是线性回归的一个升级版。 目录 强势样本对模型的影响 实例 岭回归定义 岭回归的实现 岭…

岭回归和Lasso回归

偏差和方差 机器学习算法针对特定数据所训练出来的模型并非是十全十美的,再加上数据本身的复杂性,误差不可避免。说到误差,就必须考虑其来源:模型误差 偏差(Bias) 方差(Variance) …

基于Python的岭回归模型

本文是使用Python进行岭回归模型分析,消除多重共线性 一、岭回归原理 自变量之间存在多重共线性,当时,加上一个正的常数矩阵(K>0),岭回归估计定义公式: (k为岭参数) 的奇异程度比奇异程度小&…

用SPSS进行岭回归分析

打开SPSS将数据输入到SPSS中。 点击左上角文件->新建->语法 输入 * Encoding: UTF-8. INCLUDE D:\Program Files\IBM\SPSS\Statistics\27\Samples\Simplified Chinese\Ridge regression.sps. ridgereg enter x1 x2 x3 x4 x5 x6 x7 x8 x9 x10/depy.include内容需要自己寻找…

R语言与岭回归

岭参数的一般选择原则 选择k(或lambda)值,使得:各回归系数的岭估计基本稳定用最小二乘估计时符号不合理的回归系数,其岭回归的符号变得合理回归系数没有不合乎实际意义的绝对值残差平方和增大的不多 用R语言进行岭回归…

岭回归(Ridge Regression)及实现

岭回归(Ridge Regression)及实现 https://blog.csdn.net/google19890102/article/details/27228279 一、一般线性回归遇到的问题 在处理复杂的数据的回归问题时,普通的线性回归会遇到一些问题,主要表现在: 在处理复杂的数据的回归问题时&…

岭回归(R语言)

代码实现如下&#xff1a; data3.3<-read.csv("C:/Users/Administrator/Desktop/data3.3.csv",headTRUE) datas<-data.frame(scale(data3.3[,1:6])) # 对样本数据进行标准化处理并转换为数据框的存储格式 library(MASS) ridge3.3<-lm.ridge(y~.-1,datas,l…

多元线性回归-岭回归

目录 1.精确相关关系 2.高度相关关系 3.多重共线性与相关性 4.岭回归 5.linear_model.Ridge 5.1.案例1&#xff1a;加利福尼亚房屋价值数据 5.2.案例2:波士顿房价数据集 6.选取最佳正则化参数取值 1.精确相关关系 精确相关关系&#xff0c;即完全相关。如矩阵A并不是满…

回归——岭回归

1、作用 岭回归是一种专用于共线性数据分析的有偏估计回归方法&#xff0c;实质上是一种改良的最小二乘估计法&#xff0c;通过放弃最小二乘法的无偏性&#xff0c;以损失部分信息、降低精度为代价获得回归系数更为符合实际、更可靠的回归方法&#xff0c;对病态数据的拟合要强…

【机器学习04】岭回归

4 岭回归 4.1 简介 普通线性回归模型使用基于梯度下降的最小二乘法&#xff0c;在最小化损失函数的前提下&#xff0c;寻找最优模型参数&#xff0c;在此过程中&#xff0c;包括少数异常样本在内的全部训练数据都会对最终模型参数造成程度相等的影响&#xff0c;异常值对模型…

机器学习——岭回归

岭回归的简单介绍 什么是岭回归&#xff1f;什么时候要用到岭回归&#xff1f;岭回归是一种解决标准方程法不能求逆矩阵时的办法。我们都知道&#xff0c;用标准方程法最大的一个缺点就是当数据的特征多于数据的样本时&#xff0c;标准方程法是不能使用的&#xff0c;因为不能…

数学建模学习:岭回归和lasso回归

线性回归 在多元线性回归模型中&#xff0c;估计回归系数使用的是OLS&#xff0c;并在最后讨论异方差和多重共线性对模型的影响。事实上&#xff0c;回归中自变量的选择大有门道&#xff0c;变量过多可能会导致多重共线性问题导致回归系数不显著&#xff0c;甚至造成OLS估计失…

python机器学习| 岭回归介绍及实现

岭回归介绍及实现 1 岭回归的引入2 岭回归的原理2.1 原理介绍2.2 原理代码实现 3 API 实现 1 岭回归的引入 在线性回归-正规方程和梯度下降中&#xff0c;我们介绍了基于正规方程或者梯度下降的优化算法&#xff0c;来寻找最优解。 在正规方程解中&#xff0c;它是基于直接求导…

岭回归与lasso回归算法

模型压缩与正则化主要包含岭回归&#xff08;Ridge regression&#xff09;和Lasso两种方法&#xff0c;二者的主要原理是将系数往等于0的方向压缩。 岭回归 lasso 全称&#xff1a;Least absolute shrinkage and selection operator最小绝对缩减和选择算子 一、岭回归示…

岭回归-回归实操

python 岭回归算法之回归实操 基本概念 正则化 正则化是指对模型做显式约束&#xff0c;以避免过拟合。本文用到的岭回归就是L2正则化。&#xff08;从数学的观点来看&#xff0c;岭回归惩罚了系数的L2范数或w的欧式长度&#xff09; 正则化的具体原理就不在这里多叙述了&a…

线性回归与岭回归

目录 一、什么是线性回归 1.线性回归简述 2.数组和矩阵 3.线性回归的算法 二、权重的求解 1.正规方程 2.梯度下降 三、线性回归案例 1.案例概述 2.数据获取 3.数据分割 4.数据标准化 5.模型训练 6.回归性能评估 7.梯度下降与正规方程区别 四、岭回归Ridge 1.过拟…

什么是岭回归?

问题引出&#xff1a; 当使用最小二乘法解决一下线性回归&#xff1a; 假设:已知x1,x2与y的关系服从线性回归模型&#xff1a; y102x13x2c 当x1和x2存在线性相关性时&#xff0c;使用最小二乘法来预测回归模型&#xff0c;就变得困难起来&#xff0c;因此物品们必须使用逐步回…

岭回归总结

岭回归存在的目的&#xff1a; 解决多重共线性下&#xff0c;最小二乘估计失效的问题 岭回归的作用&#xff1a;(在引入变量太多&#xff0c;又存在多重共线性&#xff0c;难以抉择去留哪个变量时可以通过该方法筛选变量) 1.找出多重共线性的变量&#xff0c;并提剔除部分 2…

岭回归(ridge regression)

岭回归&#xff08;ridge regression&#xff09; 在处理回归问题时&#xff0c;常遇到的问题 在处理复杂的数据的回归问题时&#xff0c;普通的线性回归会遇到一些问题&#xff0c;主要表现在&#xff1a;   预测精度&#xff1a;这里要处理好这样一对为题&#xff0c;即样…

【回归分析】一文读懂岭回归,附案例教学

1、作用 岭回归是一种专用于共线性数据分析的有偏估计回归方法&#xff0c;实质上是一种改良的最小二乘估计法&#xff0c;通过放弃最小二乘法的无偏性&#xff0c;以损失部分信息、降低精度为代价获得回归系数更为符合实际、更可靠的回归方法&#xff0c;对病态数据的拟合要强…