K-SVD 算法

K-SVD 算法

一、问题描述

K-SVD可以看做K-means的一种泛化形式,K-means算法总每个信号量只能用一个原子来近似表示,而K-SVD中每个信号是用多个原子的线性组合来表示的。K-SVD通过构建字典来对数据进行稀疏表示,经常用于图像压缩、编码、分类等应用。

二、主要问题

K-SVD 算法

K-SVD 算法
K-SVD 数学模型

K-SVD 数学模型

三、算法求解

3.1 求解步骤

给定训练数据后一次找到全局最优的字典为NP问题,只能逐步逼近最优解.构造D算法分两步:稀疏表示字典更新

  • 稀疏表示
    首先设定一个初始化的字典,用该字典对给定数据迚行稀疏表示(即用尽量少的系数尽可能近似地表示数据),得到系数矩阵X。此时,应把DX看成D中每列不X中对应每行乘积的和,也就是把DX分“片”,即:(di 表示D的列 , xi表示X的行),然后逐片优化。

  • 字典更新
    初始字典往往不是最优的,满足稀疏性的系数矩阵表示的数据和原数据会有较大误差,我们需要在满足稀疏度的条件下逐行逐列更新优化,减小整体误差,逼近可用字典。剥离字典中第k(1-K)项dk的贡献,计算当前表示误差矩阵:
    误差值为 :上式可以看做把第k个基分量剥离后,表达中产生空洞,如何找到一个新基,以更好的填补这个洞,就是SVD 方法的功能所在,当误差值稳定的时候字典基本收敛。

3.2 输入输出

  • 输入参数

  1. 测量矩阵Y;

  • 输出参数

  1. 字典D;

  2. 稀疏稀疏矩阵X;

四、代码示意

Github上K-SVD代码

五、总结

K-SVD算法是常用的字典生成算法,另一种是MOD算法,后期可以学习。

六、参考文献

  1. http://www.cnblogs.com/daniel-D/p/3222576.html

  2. http://www.cnblogs.com/daniel-D/p/3224003.html

  3. http://www.cnblogs.com/daniel-D/p/3231247.html

  4. Ksvd算法:http://blog.csdn.net/chengfanyong/article/details/40923905

  5. 《K-SVD: An Algorithm for Designing Overcomplete Dictionaries for Sparse Representation》

posted @ 2017-04-17 20:35  yangnk  阅读(1760)  评论(0编辑  收藏  举报