Dictionary Learning Tools for Matlab.
1. 简介
字典
p=0 ,通过 MP(matching pursuit)匹配追踪算法求解,比如 ORMP(order recursive matching pursuit);p=1 ,通过 LARS 算法求解;- ORMP 还是 LARS 均是基于贪心的思路求解;
2. 字典学习
在给定训练集
3. 求解
MOD or ILS-DLA
MOD(Method of Optimized Directions),ILS-DLA(iterative least squares dictionary learning algorithms)
此时迭代算法的思路分为如下三步:
- 固定
D ,求解W - 固定
W ,根据最小二乘法求解D=(XWT)(WWT)−1 - 归一化
D ,也即将其各个列缩放为单位向量;
for i = 1:noIt W = sparseapprox(X, D, 'mexOMP', 'tnz', s); D = (X*W')/(W*W'); D = dictnormalize(D); end
- 固定
K-SVD
K-SVD 也是基于迭代求解思路而提出的算法,迭代主要分为如下两步:
- 固定
D ,求解W ; - 记录
W 中非零的元素,使用 SVD 分解更新D 和W ;
% X: N*L, D: N*K, W: K*L for i = 1:noIt W = sparseapprox(X, D, 'mexOMP', 'tnz', s); R = X - D*W; for k=1:K % 找到非零列 I = find(W(k, :)); Ri = R(:, I) + D(:, k)*W(k, I); % 奇异值分解 [U, S, V] = svds(Ri, 1, 'L'); % 更新 D(:, k) = U; W(k, I) = S*V'; R(:, I) = Ri - D(:, k)*W(k, I); end end
- 固定