稀疏表示:用较少的基本信号的线性组合来表达大部分或者全部的原始信号。
假设我们用一个m*n的矩阵表示数据集Y,每一行代表一个样本,每一列代表样本的一个属性,一般而言,该矩阵大多数元素不为0。 稀疏表示的含义是,寻找一个系数矩阵X以及一个字典矩阵D,使得D*X尽可能的还原Y,且X尽可能的稀疏。X就是Y的稀疏表示。公式如下:
Y为训练样本,D为字典,X为稀疏系数。
寻找最优解(X最稀疏)是NP-Hard问题。用追逐算法(Pursuit Algorithm)得到的次优解代替。
K-SVD算法:广义的K-means算法。
关于k-means算法可以参考该博客https://blog.csdn.net/cc198877/article/details/9167989
K-SVD是一个迭代过程。
1、假设字典D是固定的,使用追踪算法寻找最佳的系数矩阵X。
2、依次更新字典D的每一列,同时更新对应的系数。
3、循环1、2。
公式推导:
K-SVD的目标函数为
(3)
假设D是固定的,Y有N个样本,则
(4)
此时公式(3)如下
(5)
假设字典D和系数矩阵X是固定的,更新D中的k列()和它对应的系数矩阵X中的k行()。公式(4)可以表示如下。
(6)
EK为字典的第k列的残差,即没有dk项时表示的误差,也就是字典的第k列在表示Y的过程中究竟起到了多大的作用。
在上式中,K-1项是确定的,只有第K项不确定。
因为直接使用SVD得到和,会导致是满向量(大多数元素为非0)的,所以更新的不能满足稀疏条件。当去掉中的0元素时,再使用SVD更新时,就不会出现上述状况。(此处有疑问,为什么去掉会满足) 过程如下:
参考:
1、https://blog.csdn.net/cc198877/article/details/9167989
2、https://blog.csdn.net/chengfanyong/article/details/40923905
来源:CSDN
作者:鲁青的青未
链接:https://blog.csdn.net/w1378236582/article/details/80414735