阅读本文需要的背景知识点:标准线性回归算法 、一丢丢编程知识
一、引言
前面一节我们学习了机器学习 算法系列(三)- 标准线性回归算法(Standard Linea算法的五个特性 r RePython gression A矩阵 lgorithm),最后求得标准线性回归的代价函数的解析解 w 为:
w=(XTX)−1XTyw=left(X^{T} Xright)^{-1} X^{T} y w =算法设计与分析 ( X T X ) −算法设计与分析 1 X T y
其中提到如果矩阵 X 的转置与矩阵 X 相乘后的矩阵不是满秩矩阵时,这个矩阵是不可逆的,还提到其本质是多个自变量 x 之间存在多重共线性。下面来介绍多重共矩阵和行列式的区别 线性的问题与解决这个问题的其中一个方法 – 岭回归1 (Ridge Regression)
二、多重共线性
先来看看多重共线性在维基百科中的解释:
多重共线性2 (Multicollinearity)python基础教程 是指多变量线性回工商银行 归中,变量之间由于存在精确相关关系或高度相关关系而使回归估计不准确。
那么什么是精确相关关系与高度相关关系呢?假如有下面的(1)式,其中 w1 = 2、w2 = 3,同时如果又存在(2)式的关系,这时就说明 x1 与 x2 存在精确相矩阵相乘怎么算 关关系。python是什么意思 当 x1 与 x2 之间存在近似精确相关关系,例如 x1 约等于 2 倍python基础教程 的 x2,则说明存在高度相关关系。
{y=2机器学习 x1+3×2(1)x2=2×1(2)python是什么意思 left{begin{array}{l} y=2 x_{1}矩阵游戏 +3 x_{2} &工龄差一年工资差多少 (1)\ x_{机器学习 2}=2 x_{1} & (2) end{array}right. { y = 2 x 1 + 3 x 2 x 2 = 2 x 1 ( 1 ) ( 2 ) python编程
算法设计与分析 因为由(2)式可以将(1)式改写成不同的形式,这样就会导致 w 存在无数种解,会使得最后的回归估计不准确。google
⟹{y=2×1+3×2⇒w1=2w2=3y=8×1⇒w1=8w2=0y=4×2⇒w1=0w2=4y=6×1+x2⇒w1=6w2=1…Longrightarrowleft{begin{array}{lll} y=2 x_{1}+3 x_{2} & Rightarrow w_{1}=2 & w_{2}算法分析的目的是 =3 \ y=8 x_{1} & Rightarrow w_{1}=8 & w_{2}=0 \ y=4 x_{2} & Rightarrow w_{1矩阵和行列式的区别 }=0 & w矩阵计算器 _{2}=4 \ y=6 x_{1}+x_{2} & Rightarrow w_{1}=6 & w_{2}=1 \ ldots & &am机器学习 p; end{array}right. ⟹ ⎩ ⎪ ⎪ ⎪ ⎪ ⎪ ⎨ ⎪ ⎪ ⎪ ⎪ ⎪ ⎧ y = 2 x 1 + 3 x 2 y = 8 x 1 y = 4 x 2 y = 6 x 1 + x 2 … ⇒ w 1 = 2 ⇒ w 1 = 8 ⇒ w 1 = 0 ⇒ w 1 = 6 w 2 = 3 w 2公司让员工下班发手机电量截图 = 0 w 2 = 4 w 2 = 1
根据 w 的解析解,可以通过下面的公式来求矩阵的迹 解其中的逆矩阵运算,被除数为矩阵的伴随矩阵3 ,除数为矩阵的行列式。可以看到矩阵可逆的矩阵的乘法运算 条件是其行列算法工程师 式不能为零。
(XTX)−1=(XTX工资超过5000怎么扣税 )∗∣X公司让员工下班发手机电量截图 TX∣left(X^TXright)^{-1} = frac{left(X^TXright)^*}{mid X^TX mid } ( X T X ) − 1 = ∣ X T X ∣ ( X T X ) ∗
如果自变量之间存在多重矩阵相乘怎么算 共线性,会使得矩阵的行列式为零,导致矩阵不可逆。如下图算法是指什么 中的示例 X,可以看到 x1 与 x2 存在精确相关关系,相乘后的矩阵经过初等变换4 后其行列式为零,说明相乘后的矩阵的行列式也必然为零(初等变换不改变行列式为零的判断),这时的矩阵不矩阵 可逆。如果自变量之间是高度相关工龄越长退休金越多吗 关系,会使得矩阵的行列式近似等于零,这时所得的 w 的偏差会很大,也会造成回归估计不准确。
X=[112124136148]XT=[111112342468]XTX=[410201030602060120]⟶初等变换[100012000]begin{array}{c} X=left[begin{array}{lll} 1 & 1 & 2 \ 1 & 2 & 4 \ 1 & 3 & 6 \ 1 & 4 & 8 end{array}right] quad X^{T}=left[begin{array}{llll} 1 & 1 & 1 & 1 \ 1 & 2 & 3 & 4 \ 2 & 4 & 6 & 8 end{array}right] \ X^{T} X=left[begin{array}{ccc} 4 & 10 & 20 \ 10 & 30 & 60 \ 20 & 60 & 120 end{array}right] stackrel{text { 初等变换 }}矩阵的秩 {lonpython可以做什么工作 grightarrow}left[begin{array}{lll} 1 & 0 & 0 \ 0 & 1 & 2 \ 0 & 0 & 0 end{array}right] end{a公司让员工下班发手机电量截图 rray} X = ⎣ ⎢ ⎢ ⎢ ⎡矩阵的乘法运算 1 1python基础教程 1 1 1 2 3 4 2 4 6宫颈癌 8 ⎦ ⎥ ⎥ ⎥ ⎤ X T = ⎣ ⎢ ⎡ 1 1 2 1 2 4 1 3 6 1 4 8 ⎦ ⎥ ⎤ X T X = ⎣ ⎢ ⎡ 4 1 0 2 0 1 0 3 0 6 0 2 0 6 0 1 2 0 ⎦ ⎥ ⎤ ⟶ 初等变换 ⎣ ⎢ ⎡ 1 0 0 0 1 0 0 2 0 ⎦ ⎥ ⎤
多重共线性的问题既然是自变量之间存在相关关系,其中一个解决方矩阵转置 法就是剔除掉共线的自变量,可以通过计算方差扩大因子5 (宫颈癌 Variance inflation factor,VIF)来量化自变量之间的相关关系,方差扩大因子越大说明自变量的共线性越严重。
另一种方式是通过对代价函数正则化加入惩罚项来解决,其中一种正则化方式被称为吉洪诺夫正则化(Tikhonov re枸杞 gpython怎么读 ula算法 rization),这种代价函数正则化后的线性回归被称为岭回归(Ridge Regression)。
三、算法步骤
岭回归的代价python编程 函数第一项与标准线性回归的一致,都是欧几里得距离的平方和,只是在后面加上了一个 w 向量的L2-范数6 的平方作为惩罚项(L2-范数的含义为向量 W 每个元素的平方和然后开平方),其中 表示惩罚项的系数,人为的公司让员工下班发手机电量截图 控制惩罚项的大小。由于正则项是L2-范数,有时这种正则化方式也被称为L2正则化。
Cost(w)=∑i=1N(yi−wTxi)2+∥w∥22operatorname{Cost}(w) = sum_{python保留字 i = 1}^N left(算法导论 y_i – w^Tx_i right)^2 + lambda|w|_{2}^{2} C o s t ( w ) = i = 1 ∑ N ( y i − w T x i ) 2 + ∥ w ∥ 2 2
同标准线性回归一样,也是求龚俊 使得岭回归的代价函数最小时 w 的大小:
w=argminw(∑i=1N(yi−wTxi)2+∥w∥22矩阵转置 )w=underset{w}{operatorname{argmin}}lpython是什么意思 eft(sum_{i=1}^{N}left(y_{i}-w^{T} x算法工程师 _{i}right)^{2}+lambda|w|_{2}^{2}right) w = w a r g m i n ( i = 1 ∑ N ( y i算法的五个特性 − w T x i python语言 ) 2 + ∥ w ∥ 2 2 )
代价函数通过求导直接得到 w 的解析解,其中 X 为 N x M 矩阵,y 为 N 维列向量, 属于实数集,I 为 M x M 的单位矩阵。
w=(XTX+I)−1XTy∈Rw=left(X^{T} X+lambda算法是指什么 Iright)^{-1} X^{T}y quad lambda in mat算法设计与分析 hbb{R} w = ( X T X + I ) − 1python编程 X T y ∈ R
X=[x1Tx2T⋮xNT]=[X11X12⋯X1MX21X22⋯X2M⋮⋮⋱⋮XN1XN2⋯XNM]y=(y1y2⋮yN)X=left[begin{array}{c} x_{1}^{T} \ x_{2}^{T} \ vdots \ x_{N}^{T} end{array}right]=left[begin{array}{cccc} X_{11} & X_{12} & cdots & X_{1 M} \ X_{21} & X_{22} & cdots & X_{2 M} \ vdots & vdots & ddots & vdots \ X_{N 1} & X_{N 2} & cdots & X_{N M} end{array}right] quad y=left(算法设计与分析 begin{array}{c} y_{1} \ y_{2} \ vdots \ y_{N} end{array}right) X = ⎣ ⎢ ⎢ ⎢ ⎢ ⎡ x 1 T x 2 T ⋮ x N T ⎦ ⎥ ⎥ ⎥ ⎥ ⎤枸杞 = ⎣ ⎢ ⎢ ⎢ ⎢ ⎡ X 1 1 X 2 1 ⋮ X N 1 X 1 2 X 2 2 ⋮ X N 2 ⋯ ⋯ ⋱ ⋯ X 1 M X 2 M ⋮ X N M ⎦ ⎥ ⎥ ⎥ ⎥ ⎤ y = ⎝ ⎜ ⎜ ⎜ ⎜ ⎛ python可以做什么工作 y 1 y 2 ⋮ y N ⎠ ⎟ ⎟ ⎟ ⎟ ⎞
四、原理证明
岭回归代价函数为凸函数
同样需要证明:
f(x1+x22)≤f(x1)+f(x2)2fleft(frac{x_{1}+x_{2}}{矩阵转置 2}right) leq frac{fleft(x_{1}right)+fleft(x_{2}right)}{2} f ( 2 x 1 + x 2 ) ≤ 2 f ( x 1算法设计与分析 ) + f ( x 2 )
不等式左边:
Cos矩阵转置 t(python可以做什么工作 w1+w22算法的空间复杂度是指 )=∑i=1N[(w1+w22)Txi−yi]2+∥w1+w22∥22operpython语言 atorname{Cost}left(frac{w_{1}+w_{2}}{2}righ算法是指什么 t)=sum_{i=1}^{N}left[left(frac{w_{1}+w_{2}}{2}right)^{T} x_{i}-y_{i}right]^{2}+lambdaleft|fr矩阵的秩 ac{w_{1}Python +w_{2}}{2}right|_{2}^{2} C o s t ( 2 w 1 + w 2 ) = i = 1 ∑ N [ ( 2 w 1 + w 2 ) T x i − y i ] 2 + ∥ ∥ ∥ ∥ ∥ 2 w 1 +宫颈癌 w 2 ∥ ∥ ∥ ∥ ∥ 2 2
不等式右边:
Cost(w1)+Cost(w2)2=∑i矩阵相乘怎么算 =1N(w1Txi−y矩阵 i)2+∑i=1N(w2Txi−yi)2+∥w1∥22+∥w2∥222frac{operatorname{Cost}left(w_{1}rightGo )+operatorname{Cost}left(w_{2}right)}{2}=frac{sum_{i=1}^{Npython安装教程 }left(w_{1}^{T} x_{i}-y_{i}right)^{2}+sum_{i=1}^{N}left(w_{2}python123 ^{T} x_{i}-y_{i}right)^{2python123平台登录 }+la算法是指什么 mbdaleft|w_{1}rig矩阵计算器 ht|_{2}^{2}+lambdaleft|w_{2}rig龚俊 ht|_{2}^{2}}{2} 2 C o s t ( w 1 ) + C o s t ( w 2 ) = 2 ∑ i = 1 N ( w 1 T x i − y i ) 2 + ∑ i = 1 N ( w 2 T x i − y i ) 2 + ∥ w 1 ∥ 2 2 + ∥ w 2 ∥ 2 2
(1)不等式python123 两边的工龄越长退休金越多吗 前算法的有穷性是指 半部分与标准线性回归一致,只需要证明剩下的差值大于等于零即可
(2)将其工资超过5000怎么扣税 改写成向量点算法的时间复杂度取决于 积的形式
(3)展开括号
(4)合并相同的项,w1的转置乘w2与w2的转置乘w1互为转置,又因为算法的五个特性 结果为实数,所以这个矩阵的逆 两项可以合并
(5)可以写成向量的平方的形式
=算法是指什么 ∥w1∥22+∥w2∥22−2∥w1+w22∥22(1)=[w1Tw1+w2Tw2−2(w1+w22)T(w1+w22)](2)=(w1Tw1+w2Tw2−w1Tw1+w2Tw2+w1Tw2+w2Tw12)(3)=2(w1Tw1+w2Tw2−2w1Tw2)(4)矩阵计算器 =2(w1−w2)T(w1−w2)(5)beginpython是什么意思 {aligned} Delt矩阵计算器 a &=lambdaleft|w_{1}righpython123 t|_{2}^{2}+lambdaleft|w_{2}right|_{2}^{2}-2 lambdaleft|frac{w_{1}+w_{2}}工龄差一年工资差多少 {2}right|_{2}^{2} & (1) \ &=lambdal算法设计与分析 eft[w_{1}^{T} w_{1}+w_{2}^{T} w_{2}-2left(frac{w_{1}+w_{2}}{2}right)^{T}left(frac{w_{1}+w_{2}}{2}right)right] & (2) \ &=lambdalef公积金 t(w_{1}^{T} w矩阵转置 _{1}+w_{2}^{T} w_{2}-frac{w_{1}^{T} w_{1}+w_{2}^{T} w_{2}+w_{1}^{T} w_{2}+w_{2}^{T} w_{1}}{2}right) & (3) \ &=frac{lapython编程 mbda}{2}left(w_{1}^{T} w_{1}+w_{2}^{T} w_{2}-2矩阵计算器 w_{1}^{T} w_{2}right) & (4)工商银行 \ &=工资超过5000怎么扣税 frac{lambda}{2}left(w_{1}-w_{2}right)^{T}left(w_{1}-w_{2}right) & (5) end{aligned} = ∥ w 1 ∥ 2 2 + ∥ w 2 ∥ 2 2 − 2 ∥ ∥ ∥ ∥ ∥ 2 w 1 + w 2 ∥ ∥ ∥ ∥ ∥ 2 2 = [ w 1 T w 1 + w 2 T w 2 − 2 ( 2 w 1 + w 2 ) T ( 2 w 1 + w 2 ) ] = ( w 1 T w 1 + w 2 T w 2 − 2 w 1 T w 1 + w 2 T w 2 + w 1 T w 2 + w 2 T w 1 ) = 2 ( w 1 T w 1 + w 2 T w 2 矩阵的逆 − 2 w 1 T w矩阵和行列式的区别 2 ) = 2 ( w 1 − w 2 ) T ( w 1 − w 2 ) ( 1 ) ( 2 ) ( 3 ) ( 4算法导论 ) ( 5 )
不等式右边减去不等python123平台登录 式左边的差值为平方式的连加运算加上两向量差的平方,人为的控制 的大小,最后的结果在实数范围内必然大于等于零,证毕。
岭回归代python编程 价函数的解工商银行 析解
(1)岭回归的代价函数
(2)前面三项为标准线性回归代价函数展开后的结果,w 的 L2-范数的平方可以写成向量 w 的点算法的特征 积
(3)合并第一项与第四项
Cospython可以做什么工作 t(w)=∑i=1N(yi−wTxi)2+∥w∥22(1)=wTXTXw−2wTXTy+yTy+wTw(2)=wT(XTX+I)w−2wTXTy+yTy(3)begin{aligned} operatorname{Cost}(w) &=sum_{i=1}^{N}left(y_{python语言 i}-w^{T} x_{i}ri矩阵相乘怎么算 ght)^{2}+lambda|w|_{2}^{2}矩阵和行列式的区别 &工商银行 ; (1)\ &=w^{T} X^{T} X w-2 w^{T} X^{Python T} y+y^{T} y+工龄越长退休金越多吗 lambda w^{T} w & (2)\ &=w^{T}left(X^{T} X+lambda Iright) w-2 w^{T} X^{T} y+y^{T矩阵和行列式的区别 } y & (3) end{aligned} C o s t ( w ) = i = 1 ∑ N ( y i − w T x i ) 2 + ∥ w ∥ 2 2 = w T X T X w − 2 w T X T y + y T y + w T w = w T ( X T X + I ) w − 2 w T X T y + y T y ( 1 ) ( 2 ) ( 3 )
(1)代价函数对 w 求偏导数,根据向量求导公式,只有第一项和第二项与 W 有关,最后一项为常数,又因为代价函数是个凸函数,矩阵相乘怎么算 当对 W 的偏导数为 0 向量时,代价函数为最小值。
(2)将第二项移项后同时除以2,再两边同时在前面乘以一个逆矩阵,等式左边的矩阵和逆矩阵乘后为单位矩阵,所以只剩下 w 向量。
∂Cost(w)∂w=2(XTX+I)w−2XTy=0(1)w=(XTX+I)−1XTy(2)begin{aligned} frac{partial operatorname{Cost(机器学习 w)}}{partial w} &= 2(X^TX + lambda I)w – 2X^Ty = 0 & (1) \python编程 w &= (X^TX + lambda I)^{-1}X^Ty & (2) end{aligned} ∂ w ∂ C矩阵相乘怎么算 o s t ( wpython123平台登录 ) w google = 2 ( X T X + I ) w − 2 X T y = 0 = ( X T X + I ) − 1 X T y ( 1 ) ( 2 )
可以看到岭回归代价函数的解析解相较于标准线性回归来说多了矩阵的秩 一个可以人为控制的对角矩阵,这时可以通过调整不同的 来使得括号内的矩阵可逆。
在上一节的工作年限与平均月工资的例子中,X 为 一个 5 x 2 的矩矩阵乘法 阵,y 为一个python可以做什么工作 5 维列向量,当 为 0.1 时,最后可以算矩阵相乘怎么算 得 w 为一个 2 维列向量,则这个例子的线性方程为 y = 2矩阵 139 * x算法导论 – 403.9。算法的空间复杂度是指
X=[1112131415]y=(159838986220779910510)X = begin{bmat算法分析的目的是 rix} 1 & 1\ 1 & 2\ 1 & 3\ 1 & 4\ 1 & 5 end{bmatrix} quad算法的有穷性是指 y = begin工资超过5000怎么扣税 {pmatrix} 1598\ 3898\ 6220\ 7799\ 10510 end{pmatrix} X = ⎣ ⎢ ⎢算法的有穷性是指 ⎢ ⎢ ⎢枸杞 ⎡ 1 1 1 1 1 1 2 3 4 5 ⎦ ⎥ ⎥ ⎥ ⎥ ⎥ ⎤ y = ⎝ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ 1 5 9 8 3 8 9 8 6 2 2 0 7 7 9 9 1 0 5 1 0 ⎠ ⎟ ⎟ ⎟ ⎟ ⎟ ⎞
w=(XTX+I)−1XTy=(−403.92139.0)w = left(X^TX + lambda Iright算法的有穷性是指 )^{-1}X^Ty = begin{pmatrix} -403.9\ 2139.0 end{pmatrix} w = ( X T X + I ) − 1 X T y = ( − 4 0 3 . 9 2 1 3 9 . 0 )
可以看到加了惩罚项后,相较于标准线性回归的结果,拟合变差了,但是通过人为的控制惩罚项的大小,解决了自变量多重共线性的问题。
五、代码实python123 现
使用 Python 实现线性回归算法:
import numpy as np
def ridge (X, y, lambdas=0.1 ):
"""
岭回归
args:
X - 训练数据集
y - 目标标签值
lambdas - 惩罚项系数
return:
w - 权重系数
"""
return np.linalg.inv(X.T.dot(X) + lambdas * np.eye(X.shape[1 ])).dot(X.T).dot(y)
六、第三算法 方库实现
scikit-learn7 实现:
from sklearn.linear_model import Ridge
reg = Ridge(alpha=0.1 , fit_intercept=False )
reg.fit(X, y)
w = reg.coef_
七、动画演示
下图展示了算法是指什么 惩罚系数 对各个自变量的权重系数的影响,横轴为惩罚系数 ,纵轴为权重系数,每一个颜色表示一矩阵计算器 个自变量的权重系数:
可以看到当 越大时( 向算法的特征 左移动),惩罚项占据主导地位,会使得每个自变量的权重系数趋近于零,而当 越小时( 向右移动),惩罚项的影响越来越小,会导致每个自变量的权重系数震荡的幅度变大。在实际应用中需要多次调整不同的 值来找到一个合适的模型使得最后的效果最好。
八、思维导图
九、参考文献
en.算法 wikipedia.org/w矩阵游戏 iki/Tikh矩阵的迹 on…
en.wikipedia.org/wiki/Multic…
en.wikipedia.org/wik矩阵相乘怎么算 i/Adjuga…
en.wikipedia.o算法 rg/wiki/Elemen…
en.wikipedia.org/wiki/Varian…
enpython安装教程 .wikipedpython编程 ia.org/wiki/Norm_(…
scikit-learn.org/stable/modu…
完整演示请点击这里
注算法分析的目的是 :本文力求准确并通俗易懂,但由于笔者也是初学者,水平有限,如文中存在错误或遗漏之处,恳请读者通过留言的方式批评指正
本文首发于——AI导图 ,欢迎关注