基于最小二乘的矩阵分解问题

基于最小二乘的矩阵分解问题

例如已知代价函数: min  D=||YAX||2F m i n     D = | | Y − A X | | F 2

一般思想是将固定其中一个因子矩阵,计算关于另外一个因子矩阵的导数。为了计算方便一般将上述代价函数转为如下形式:

min  D=tr[(YAX)(YAX)T] or   tr[(YAX)T(YAX)] m i n     D = t r [ ( Y − A X ) ( Y − A X ) T ]   o r       t r [ ( Y − A X ) T ( Y − A X ) ]

将代价函数转化为求取矩阵的迹之后,可更加方便求解最优化问题。

计算因子矩阵

  • 固定 X X , 计算 A A
  • 固定 A A , 计算 X X
  • 往复循环直至满足阈值条件,参见als思想

以计算 A A 为例

固定 X X , 计算对 D D 关于 A A 的导数

dDdA=d[tr(YYTAXYTYXTAT+AXXTAT)]dA d D d A = d [ t r ( Y Y T − A X Y T − Y X T A T + A X X T A T ) ] d A

化简之,
dDdA=2AXXT2YXT d D d A = 2 A X X T − 2 Y X T

则可得, AYXT(XXT)1 A ← Y X T ( X X T ) − 1
同理可得, X(ATA)1ATY X ← ( A T A ) − 1 A T Y

附录1:关于矩阵分解的HALS代码
E = T - A*B';
%% algorithm based on HALS
while iter < iter_max
    iter = iter + 1;
    for j = 1:J
        Cj = E + A(:,j)*B(:,j)';
        B(:,j) = pinv(A(:,j)'*A(:,j))*Cj'*A(:,j);
        B(:,j) = max(eps,B(:,j));

        A(:,j) = pinv(B(:,j)'*B(:,j))*Cj*B(:,j);
        A(:,j) = max(eps,A(:,j));
        A(:,j) = A(:,j)./norm(A(:,j));
        E = Cj - A(:,j)*B(:,j)';
    end
end
附录2:关于迹函数的求导

详见《矩阵分析与应用》第五章 作者张贤达

p-1
p-2
p-3
p-4
p-5

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值