欢迎光临散文网 会员登陆 & 注册

奇异值阈值法SVT矩阵补全

2022-12-14 14:07 作者:021usc  | 我要投稿

介绍

奇异值阈值法SVT(Singular Value Thresholding)算法将压缩感知中求解基追踪问题式的线性Bregman迭代方法扩展到了矩阵核范数最小化问题中,该算法将核范数最小化问题转化为下面公式所示:

%5Cmin_%7BX%7D%20%5Ctau%20%7C%7CX%7C%7C_%7B%5Cast%7D%20%2B%20%5Cfrac%7B1%7D%7B2%7D%20%7C%7CX%7C%7C_F%5E%7B2%7D

s.t.%20%5Cmathcal%7BP%7D_%5COmega%20(X)%20%3D%20%5Cmathcal%7BP%7D_%5COmega(M)

式中:参数表示矩阵的Frobenius范数,%5Cmathcal%7BP%7D_%5COmega表示已知的下标数据集集合,可以用拉格朗日乘子法表示为公式所示:

L(X%2CY)%5C%20%3D%5Ctau%7C%7CX%7C%7C_*%20%2B%20%5Cfrac%7B1%7D%7B2%7D%7C%7CX%7C%7C_F%5E%7B2%7D%20%2B%20%3C%20Y%2C%5Cmathcal%7BP%7D_%CE%A9(M-X)%3E

虽然相对于早期的矩阵补全算法,比如基于半正定规划的方法以及奇异值投影法SVT可以在人工数据上具有较高的收敛精度以及速度,但是在图像数据上,其收敛精度以及速度大大降低。因此,SVT算法仍然需要进一步改进,以适应实际应用的需求。

代码

输出结果为

输出结果

可以看到,原始的矩阵其实是个低秩矩阵,秩为2;0表示缺失值,应该被填补成1,而算法的输出为1,结果还是符合预期的。

但当数据换成下面的数据时:

svt_data = np.array([[3, 3, 5, 4],
                    [6, 6, 0, 8],
                    [1, 3, 2, 3],
                    [2, 6, 4, 6],
                    [5, 3, 8, 9]])

输出结果为

输出结果

可以看到,原始0的位置被填充为5;按照低秩特点,该位置真实值应该为10。视频插补与矩阵补全中使用MC补全结果为9.7,可见对于某些数据还是不符合预期的。

在图像数据集上进行测试。随机丢失掉80%的像素点。

SVT算法随机丢失掉80%的像素点效果对比图
其他算法随机丢失80%的像素点效果对比图
SVT算法随机丢失90%的像素点效果对比图
其他算法随机丢失90%的像素点效果对比图

由于没写对比的算法,如从像素点恢复上,这里只能手动看出。对于90%像素点丢失的情况,其他算法相对于SVT算法,恢复的效果较好。


参考

https://blog.csdn.net/zfhsfdhdfajhsr/article/details/109709889

https://www.cnblogs.com/louisanu/p/12158793.html

代码

包含python代码和matlab代码。

https://gitee.com/youryouth/mc/tree/3695c308a5a85c66aa3c7951efd1ad593cd83caf/nmf/svt


奇异值阈值法SVT矩阵补全的评论 (共 条)

分享到微博请遵守国家法律