K-SVD 算法
一、问题描述
K-SVD可以看做K-means的一种泛化形式,K-means算法总每个信号量只能用一个原子来近似表示,而K-SVD中每个信号是用多个原子的线性组合来表示的。K-SVD通过构建字典来对数据进行稀疏表示,经常用于图像压缩、编码、分类等应用。
二、主要问题
![K-SVD 算法](http://ook10bb0l.bkt.clouddn.com/123.png)
K-SVD 算法
![K-SVD 算法](http://ook10bb0l.bkt.clouddn.com/123.png)
K-SVD 算法
![K-SVD 数学模型](http://ook10bb0l.bkt.clouddn.com/1492431647137.jpg)
K-SVD 数学模型
![K-SVD 数学模型](http://ook10bb0l.bkt.clouddn.com/1492431647137.jpg)
K-SVD 数学模型
三、算法求解
3.1 求解步骤
给定训练数据后一次找到全局最优的字典为NP问题,只能逐步逼近最优解.构造D算法分两步:稀疏表示和字典更新。
稀疏表示
首先设定一个初始化的字典,用该字典对给定数据迚行稀疏表示(即用尽量少的系数尽可能近似地表示数据),得到系数矩阵X。此时,应把DX看成D中每列不X中对应每行乘积的和,也就是把DX分“片”,即:(di 表示D的列 , xi表示X的行),然后逐片优化。字典更新
初始字典往往不是最优的,满足稀疏性的系数矩阵表示的数据和原数据会有较大误差,我们需要在满足稀疏度的条件下逐行逐列更新优化,减小整体误差,逼近可用字典。剥离字典中第k(1-K)项dk的贡献,计算当前表示误差矩阵:
误差值为 :上式可以看做把第k个基分量剥离后,表达中产生空洞,如何找到一个新基,以更好的填补这个洞,就是SVD 方法的功能所在,当误差值稳定的时候字典基本收敛。
3.2 输入输出
输入参数
测量矩阵Y;
输出参数
字典D;
稀疏稀疏矩阵X;
四、代码示意
Github上K-SVD代码。
五、总结
K-SVD算法是常用的字典生成算法,另一种是MOD算法,后期可以学习。
六、参考文献
Ksvd算法:http://blog.csdn.net/chengfanyong/article/details/40923905
《K-SVD: An Algorithm for Designing Overcomplete Dictionaries for Sparse Representation》