奇异值阈值法SVT矩阵补全
介绍
奇异值阈值法SVT(Singular Value Thresholding)算法将压缩感知中求解基追踪问题式的线性Bregman迭代方法扩展到了矩阵核范数最小化问题中,该算法将核范数最小化问题转化为下面公式所示:
式中:参数表示矩阵的Frobenius范数,表示已知的下标数据集集合,可以用拉格朗日乘子法表示为公式所示:
虽然相对于早期的矩阵补全算法,比如基于半正定规划的方法以及奇异值投影法,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%的像素点。




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

参考
https://blog.csdn.net/zfhsfdhdfajhsr/article/details/109709889
https://www.cnblogs.com/louisanu/p/12158793.html
代码
https://gitee.com/youryouth/mc/tree/3695c308a5a85c66aa3c7951efd1ad593cd83caf/nmf/svt