求解 || Ax -b || + w || x ||

(常用的求解式子)

求解
arg ⁡ min ⁡ x ∥ A x − b ∥ 2 2 + w ∥ x ∥ 2 2 \arg\min_x \| Ax - b \|^2_2 + w \|x\|^2_2 argxminAxb22+wx22
其中w为控制系数,x的维度设为 n
两种理解

方法一

直接对x求导等于0可得
( A T A + w ∗ eye ( n ) ) x = A T b (A^TA+w*\text{eye}(n)) x = A^Tb (ATA+weye(n))x=ATb
由于x之前的矩阵正定,直接求逆,或者SVD等求解x即可

方法二

看做两项
A x − b Ax-b Axb eye ( n ) x − 0 \text{eye}(n)x-0 eye(n)x0
这样
A ′ = [ A , w eye ( n ) ] A'=[A, w \text{eye}(n)] A=[A,weye(n)]
b ′ = [ b , w 0 ] b'=[b, w \mathbf{0}] b=[b,w0]
上述 方括号表示拼接,这里为竖直拼接
所以最终求解为
A ′ x = b ′ A'x=b' Ax=b
注意此时A’不是正定矩阵,该式的最小二乘解为
A ′ T A ′ x = A ′ T b ′ A'^TA'x=A'^Tb' ATAx=ATb
利用块矩阵乘法分析,可以发现该结果正好是方法一的结果。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ADMM(Alternating Direction Method of Multipliers)方法是一种求解带有约束条件的优化问题的方法。它可以用于求解如下形式的问题: min f(x) + g(z) s.t. Ax + Bz = c 其中,f(x)和g(z)是两个凸函数,x和z是优化变量,A、B和c是给定的常数矩阵和向量。 对于这个问题,我们可以将其转化为如下形式: min 1/2||x*alpha-y||_2^2+rho/2||beta||_2^2 s.t. alpha=beta 其中,x和y是给定的矩阵和向量,alpha和beta是待求解的变量,rho是一个正常数。 ADMM算法的求解步骤如下: 1. 初始化变量alpha、beta和z为任意值 2. 重复执行以下步骤直到收敛: a. 通过交替方向更新alpha和beta: alpha = argmin 1/2||x*alpha-y||_2^2 + (rho/2)||alpha - z + beta||_2^2 beta = argmin (rho/2)||alpha - z + beta||_2^2 b. 更新z为 z = (x*alpha + rho*(beta - beta)) / (1+rho) 3. 返回最终的alpha和beta值 在matlab中,可以按照以下方式实现ADMM算法: ```matlab % 初始化变量 alpha = randn(size(x,2),1); beta = randn(size(x,2),1); z = randn(size(x,2),1); rho = 1; % 迭代次数 max_iter = 100; % ADMM算法迭代 for iter = 1:max_iter % 更新alpha alpha = (x'*x + rho*eye(size(x,2))) \ (x'*y + rho*(z - beta)); % 更新beta beta = soft_threshold(alpha + z, 1/rho); % 更新z z = (x*alpha + rho*(beta + beta)) / (1 + rho); end % 返回最终结果 W_out = alpha; ``` 其中,soft_threshold函数可以用于求解带有L1正则化的问题,其实现方式如下: ```matlab function y = soft_threshold(x, lambda) y = sign(x) .* max(abs(x) - lambda, 0); end ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值