ESL3.4 学习笔记(奇异值分解与拉格朗日乘子法下的岭回归,Lasso回归,最小角回归及三者对比分析)

3.4 收缩的方法

这是一篇有关《统计学习基础》,原书名The Elements of Statistical Learning的学习笔记,该书学习难度较高,有很棒的学者将其翻译成中文并放在自己的个人网站上,翻译质量非常高,本博客中有关翻译的内容都是出自该学者的网页,个人解读部分才是自己经过查阅资料和其他学者的学习笔记,结合个人理解总结成的原创内容。
有关ESL更多的学习笔记的markdown文件,可在作者GitHub上查看下载。

原文 The Elements of Statistical Learning
翻译 szcf-weiya
时间 2018-08-21
解读 Hytn Chen
更新 2020-02-17


超级长文预警~

翻译原文

通过保留一部分预测变量而丢弃剩余的变量,子集选择 (subset selection) 可得到一个可解释的、预测误差可能比全模型低的模型.然而,因为这是一个离散的过程(变量不是保留就是丢弃),所以经常表现为高方差,因此不会降低全模型的预测误差.而收缩方法 (shrinkage methods) 更加连续,因此不会受 高易变性 (high variability) 太大的影响.

岭回归

岭回归 (Ridge regression) 根据回归系数的大小加上惩罚因子对它们进行收缩.岭回归的系数使得带惩罚的残差平方和最小

β ^ r i d g e = arg ⁡ min ⁡ β { ∑ i = 1 N ( y i − β 0 − ∑ j = 1 p x i j β j ) 2 + λ ∑ j = 1 p β j 2 } (3.41) \hat{\beta}^{ridge}=\underset{\beta}{\arg\min}\Big\{\sum\limits_{i=1}^N(y_i-\beta_0-\sum\limits_{j=1}^px_{ij}\beta_j)^2+\lambda\sum\limits_{j=1}^p\beta_j^2\Big\}\tag{3.41} β^ridge=βargmin{ i=1N(yiβ0j=1pxijβj)2+λj=1pβj2}(3.41)

这里 λ ≥ 0 \lambda\ge 0 λ0是控制收缩程度的参数: λ \lambda λ值越大,收缩的程度越大.每个系数都向零收缩. 通过参数的平方和来惩罚的想法也用在了神经网络,也被称作权重衰减 (weight decay)(第 11 章).

岭回归问题可以等价地写成

β ^ r i d g e = arg ⁡ min ⁡ β ∑ i = 1 N ( y i − β 0 − ∑ j = 1 p x i j β j ) 2 subject to  ∑ j = 1 p β j 2 ≤ t (3.42) \begin{aligned} \hat{\beta}^{ridge}&=\underset{\beta}{\arg\min}\sum\limits_{i=1}^N(y_i-\beta_0-\sum\limits_{j=1}^px_{ij}\beta_j)^2\\ & \text{subject to }\sum\limits_{j=1}^p\beta_j^2 \le t \end{aligned} \tag{3.42} β^ridge=βargmini=1N(yiβ0j=1pxijβj)2subject to j=1pβj2t(3.42)

上式用参数显式表达了对回归参数大小的约束.

!!! note “weiya 注:”
( 3.41 ) (3.41) (3.41) 其实是对式 ( 3.42 ) (3.42) (3.42) 应用 Lagrange 乘子法得到的.

( 3.41 ) (3.41) (3.41) 中的 λ \lambda λ ( 3.42 ) (3.42) (3.42) 中的 t t t 存在一一对应.当在线性回归模型中有许多相关变量,它们的系数可能很难确定且有高方差.某个变量的较大的正系数可以与相关性强的变量的差不多大的负系数相互抵消.通过对系数加入大小限制,如 ( 3.42 ) (3.42) (3.42),这个问题能得以减轻.

!!! note “weiya 注:”
这里说的是,在没有对参数大小进行限制前,会存在一对相关性强的变量,它们系数取值符号相反,但绝对值差不多大,会大大增加方差,这也就是高方差的体现,但其实它们的合作用效果近似为 0 0 0,所以考虑引进对参数大小的惩罚.

对输入按比例进行缩放时,岭回归的解不相等,因此求解 ( 3.41 ) (3.41) (3.41) 前我们需要对输入进行标准化.另外,注意到惩罚项不包含截距 β 0 \beta_0 β0对截距的惩罚会使得过程依赖于 Y \mathbf{Y} Y 的初始选择;也就是,对每个 y i y_i yi 加上常数 c c c 不是简单地导致预测值会偏离同样的量 c c c.可以证明(练习 3.5)经过对输入进行中心化(每个 x i j x_{ij} xij 替换为 x i j − x ˉ j x_{ij}-\bar x_j xijxˉj)后, ( 3.41 ) (3.41) (3.41) 的解可以分成两部分.我们用 y ˉ = 1 N ∑ 1 N y i \bar y=\frac{1}{N}\sum_1^Ny_i yˉ=N11Nyi 来估计 β 0 \beta_0 β0.剩余的参数利用中心化的 x i j x_{ij} xij 通过无截距的岭回归来估计.今后我们假设中心化已经完成,则输入矩阵 X \mathbf X X p p p(不是 p + 1 p+1 p+1)列.

!!! info “weiya 注:Ex. 3.5”
已解答,详细证明过程见 Issue 95: Ex. 3.5

( 3.41 ) (3.41) (3.41) 的准则写成矩阵形式

R S S ( λ ) = ( y − X β ) T ( y − X β ) + λ β T β (3.43) \rm{RSS}(\lambda)=(\mathbf{y}-\mathbf{X}\beta)^T(\mathbf{y}-\mathbf{X}\beta)+\lambda\beta^T\beta \tag{3.43} RSS(λ)=(yXβ)T(yXβ)+λβTβ(3.43)

可以简单地看出岭回归的解为

β ^ r i d g e = ( X T X + λ I ) − 1 X T y (3.44) \hat{\beta}^{ridge}=(\mathbf{X^TX}+\lambda \mathbf{I})^{-1}\mathbf{X}^T\mathbf{y}\tag{3.44} β^ridge=(XTX+λI)1XTy(3.44)

其中 I \mathbf{I} I p × p p\times p p×p 的单位矩阵.注意到选择二次函数惩罚 β T β \beta^T\beta βTβ,岭回归的解仍是 y \mathbf{y} y 的线性函数.解在求逆之前向矩阵 X T X \mathbf{X^TX} XTX 的对角元上加入正的常数值.即使 X T X \mathbf{X^TX} XTX 不是满秩,这样会使得问题非奇异,而且这是第一次将岭回归引入统计学中 (Hoerl and Kennard, 19701)的主要动力.传统的岭回归的描述从定义 (3.44) 开始.我们选择通过 (3.41) 和 (3.42) 来阐述,因为这两式让我们看清楚了它是怎样实现的.

图 3.8 展示了前列腺癌例子的岭回归系数估计,绘制成关于 d f ( λ ) df(\lambda) df(λ) 的函数图象, d f ( λ ) df(\lambda) df(λ) 为由惩罚 λ \lambda λ 得到的有效自由度 (effective degrees of freedom)(由式 (3.50) 中定义).在正交输入的情形下,岭回归估计仅仅是最小二乘估计的缩小版本,也就是 β ^ r i d g e = β ^ / ( 1 + λ ) \hat{\beta}^{ridge}=\hat{\beta}/(1+\lambda) β^ridge=β^/(1+λ)

在这里插入图片描述

图 3.8 当惩罚参数 λ \lambda λ 不同时,前列腺癌例子岭回归的变化曲线.画出系数关于有效自由度 d f ( λ ) df(\lambda) df(λ) 的曲线.垂直直线画在 d f = 5.0 df=5.0 df=5.0 处,这是由交叉验证选择出来的.

当给定一个合适的先验分布,岭回归也可以从后验分布的均值或众数得到.具体地,假设 y i ∼ N ( β 0 + x i T β , σ 2 ) y_i \sim N(\beta_0+x^T_i\beta,\sigma^2) yiN(β0+xiTβ,σ2),参数 β j \beta_j βj 的分布均为 N ( 0 , τ 2 ) N(0,\tau^2) N(0,τ2),每个都相互独立.则当 τ 2 \tau^2 τ2 σ 2 \sigma^2 σ2 值已知时, β \beta β 后验分布密度函数的对数值(的负数)与 (3.41) 中花括号里面的表达式成比例**(weiya 注:原文直接说与花括号的表达式相等,但应该是常数倍)**,且 λ = σ 2 / τ 2 \lambda=\sigma^2/\tau^2 λ=σ2/τ2练习 3.6).因此岭回归估计是后验分布的众数;又因分布为高斯分布,则也是后验分布的均值.

!!! info “weiya 注:Ex. 3.6”
将解答过程移至Issue 96: Ex. 3.6

中心化输入矩阵 X \mathbf{X} X奇异值分解 (SVD) 让我们进一步了解了岭回归的本质.这个分解在许多统计方法分析中非常有用. N × p N\times p N×p 阶矩阵 X \mathbf{X} X 的 SVD 分解有如下形式
X = U D V T (3.45) \mathbf{X=UDV^T}\tag{3.45} X=UDVT(3.45)

这里 U \mathbf{U} U V \mathbf{V} V 分别是 N × p N\times p N×p p × p p\times p p×p 的正交矩阵, U \mathbf{U} U的列张成 X X X 的列空间, V \mathbf{V} V 的列张成 X X X 的行空间. D \mathbf{D} D p × p p\times p p×p 的对角矩阵,对角元 d 1 ≥ d 2 ≥ ⋯ ≥ d p ≥ 0 d_1\ge d_2 \ge \cdots \ge d_p \ge 0 d1d2dp0 称作 X \mathbf{X} X 的奇异值.如果一个或多个 d j = 0 d_j=0 dj=0,则 X \mathbf{X} X 为奇异的.

weiya 注:(以下关于奇异值分解内容来自张贤达的《矩阵分析与应用》)

奇异值分解最早由Beltrami在1873年对实正方矩阵提出来的.Beltrami从双线性函数
f ( x , y ) = x T A y , A ∈ R n × m f(x,y)=x^TAy,\qquad A\in R^{n\times m} f(x,y)=xTAy,ARn×m
出发,通过引入线性变换
x = U ξ , y = V η x=U\xi,\qquad y=V\eta x=Uξ,y=Vη
将双线性函数变为
f ( x , y ) = ξ T S η f(x,y)=\xi^TS\eta f(x,y)=ξTSη
式中
S = U T A V S=U^TAV S=UTAV
若选择 U U U V V V为正交矩阵,则他们的选择各存在 n 2 − n n^2-n n2n个自由度.他提出利用这些自由度使矩阵 S S S的非对角元为0,即矩阵 S = Σ = d i a g ( σ 1 , σ 2 , … , σ n ) S=\Sigma=diag(\sigma_1,\sigma_2,\ldots,\sigma_n) S=Σ=diag(σ1,σ2,,σn)为对角矩阵.则
A = U Σ V T A=U\Sigma V^T A=UΣVT
这是Beltrami于1873年得到的实正方矩阵的奇异值分解.后来,Autonne于1902年把奇异值分解推广到复正方矩阵;Eckart与Young于1939年又进一步把它推广到一般的长方形矩阵.因此,现在常将任意复长方矩阵奇异值分解定理称为Autonee-Eckart-Young定理,详见下述

A ∈ R m × n A\in R^{m\times n} ARm×n(或 C m × n C^{m\times n} Cm×n),则存在正交(或酉)矩阵 U ∈ R m × m U\in R^{m\times m} URm×m(或 C m × m C^{m\times m} Cm×m)和 V ∈ R n × n V\in R^{n\times n} VRn×n(或 C n × n C^{n\times n} Cn×n)使得
A = U Σ V T ( o r U Σ V H ) A=U\Sigma V^T(or\quad U\Sigma V^H) A=UΣVT(orUΣVH)
式中
Σ = [ Σ 1 O O O ] \Sigma= \left[ \begin{array}{cc} \Sigma_1&O\\ O&O \end{array} \right] Σ=[Σ1OOO]
Σ 1 = d i a g ( σ 1 , σ 2 , … , σ r ) \Sigma_1=diag(\sigma_1,\sigma_2,\ldots,\sigma_r) Σ1=diag(σ1,σ2,,σr),其对角元素按照顺序
σ 1 > σ 2 ⋯ ≥ σ r > 0 , r = r a n k ( A ) \sigma_1\gt \sigma_2\cdots\ge\sigma_r>0,\qquad r=rank(A) σ1>σ2σr>0,r=rank(A)
排列

以下说明来自wiki:
这里的奇异值分解称作Thin SVD
M = U n Σ n V T M=U_n\Sigma_nV^T M=UnΣnVT
只有 U U U中对应 V T V^T VT中行向量的 n n n个列向量被计算, U U U的其它列不被计算. U n U_n Un m × n m\times n m×n, Σ n \Sigma_n Σn n × n n\times n n×n的对角矩阵, V V V n × n n\times n n×n

利用奇异值分解,通过简化我们可以把最小二乘拟合向量写成

X β ^ l s = X ( X T X ) − 1 X T y = U U T y (3.46) \begin{aligned} \mathbf{X}\hat{\beta}^{ls}&=\mathbf{X(X^TX)^{-1}X^Ty}\\ &=\mathbf{UU^Ty}\tag{3.46} \end{aligned} Xβ^ls=X(XTX)1XTy=UUTy(3.46)

注意到 U T y \mathbf{U}^T\mathbf y UTy y \mathbf{y} y 正交基 U \mathbf{U} U 下的坐标.同时注意其与 (3.33) 的相似性; Q \mathbf{Q} Q U \mathbf{U} U X \mathbf{X} X 列空间的两个不同的正交基练习 3.8).

!!! info “weiya 注:Ex. 3.8”
已解答,具体证明过程见 Issue 97: Ex. 3.8

现在岭回归的解为

X β ^ r i d g e = X ( X T X + λ I ) − 1 X T y = U D ( D 2 + λ I ) − 1 D U T y = ∑ j = 1 p u j d j 2 d j 2 + λ u j T y (3.47) \begin{aligned} \mathbf{X}\hat{\beta}^{ridge}&=\mathbf{X}(\mathbf{X^TX}+\lambda \mathbf{I})^{-1}\mathbf{X^Ty}\\ &= \mathbf{UD}(\mathbf{D^2}+\lambda \mathbf{I})^{-1}\mathbf{DU^Ty}\\ &= \sum\limits_{j=1}^p\mathbf{u}_j\dfrac{d_j^2}{d_j^2+\lambda}\mathbf{u_j^Ty}\tag{3.47} \end{aligned} Xβ^ridge=X(XTX+λI)1XTy=UD(D2+λI)1DUTy=j=1pujdj2+λdj2ujTy(3.47)

其中 u j \mathbf{u}_j uj U \mathbf{U} U 的列向量.注意到因为 λ ≥ 0 \lambda \ge 0 λ0,我们有 d j 2 / ( d j 2 + λ ) ≤ 1 d_j^2/(d^2_j+\lambda)\le 1 dj2/(dj2+λ)1.类似线性回归,岭回归计算 y \mathbf{y} y 关于正规基 U \mathbf{U} U 的坐标.通过因子 d j 2 / ( d j 2 + λ ) d^2_j/(d^2_j+\lambda) dj2/(dj2

  • 9
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是C语言中实现颜色比例法、RGB与ESL转换的完整算法: 颜色比例法: ```c #include <stdio.h> int main() { float r, g, b; printf("Enter RGB values (0-255): "); scanf("%f %f %f", &r, &g, &b); // normalize the RGB values r /= 255; g /= 255; b /= 255; // calculate the maximum RGB value float cmax = (r > g) ? r : g; if (b > cmax) { cmax = b; } // calculate the minimum RGB value float cmin = (r < g) ? r : g; if (b < cmin) { cmin = b; } // calculate the difference between max and min float diff = cmax - cmin; // calculate hue float hue = 0; if (diff == 0) { hue = 0; } else if (cmax == r) { hue = (60 * ((g - b) / diff) + 360) % 360; } else if (cmax == g) { hue = (60 * ((b - r) / diff) + 120) % 360; } else if (cmax == b) { hue = (60 * ((r - g) / diff) + 240) % 360; } // calculate saturation float saturation = (cmax == 0) ? 0 : (diff / cmax) * 100; // calculate lightness float lightness = (cmax + cmin) / 2 * 100; printf("HSL values: %.2f %.2f %.2f\n", hue, saturation, lightness); return 0; } ``` RGB与ESL转换: ```c #include <stdio.h> int main() { float r, g, b; printf("Enter RGB values (0-255): "); scanf("%f %f %f", &r, &g, &b); // normalize the RGB values r /= 255; g /= 255; b /= 255; // calculate the maximum RGB value float cmax = (r > g) ? r : g; if (b > cmax) { cmax = b; } // calculate the minimum RGB value float cmin = (r < g) ? r : g; if (b < cmin) { cmin = b; } // calculate the difference between max and min float diff = cmax - cmin; // calculate hue float hue = 0; if (diff == 0) { hue = 0; } else if (cmax == r) { hue = (60 * ((g - b) / diff) + 360) % 360; } else if (cmax == g) { hue = (60 * ((b - r) / diff) + 120) % 360; } else if (cmax == b) { hue = (60 * ((r - g) / diff) + 240) % 360; } // calculate saturation float saturation = (cmax == 0) ? 0 : (diff / cmax) * 100; // calculate lightness float lightness = (cmax + cmin) / 2 * 100; // convert to ESL float hue_prime = hue / 60; float chroma = (1 - fabs(2 * lightness - 1)) * saturation; float x = chroma * (1 - fabs(fmod(hue_prime, 2) - 1)); float m = lightness - chroma / 2; // convert to RGB float r1, g1, b1; if (hue < 60) { r1 = chroma; g1 = x; b1 = 0; } else if (hue < 120) { r1 = x; g1 = chroma; b1 = 0; } else if (hue < 180) { r1 = 0; g1 = chroma; b1 = x; } else if (hue < 240) { r1 = 0; g1 = x; b1 = chroma; } else if (hue < 300) { r1 = x; g1 = 0; b1 = chroma; } else { r1 = chroma; g1 = 0; b1 = x; } r1 += m; g1 += m; b1 += m; // convert to 0-255 range int r2 = r1 * 255; int g2 = g1 * 255; int b2 = b1 * 255; printf("ESL values: %.2f %.2f %.2f\n", hue_prime, chroma, m); printf("RGB values: %d %d %d\n", r2, g2, b2); return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值