-
Notifications
You must be signed in to change notification settings - Fork 5
/
example_sNNLS_rsNNLS.m
53 lines (40 loc) · 1.23 KB
/
example_sNNLS_rsNNLS.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
%
% simple example application of sNNLS and rsNNLS
%
clear all
%%% data dimensionality
D = 100;
%%% number data samples
N = 100;
%%% OC: overcompleteness
OCrange = [1,2,4,8];
numOC = length(OCrange);
Lrange = [5:5:50];
numL = length(Lrange);
for OCcount = 1:numOC
K = D*OCrange(OCcount);
W = createDictionaryRand(D,K);
fprintf('\n\n\novercompleteness: %d coherence: %f\n',OCrange(OCcount),max(max(W'*W-diag(diag(W'*W)))));
for Lcount = 1:numL
L = Lrange(Lcount);
fprintf('L: %d\n',L);
%%% make "true" coding matrix
Htrue = zeros(K,N);
for n = 1:N
rp = randperm(K);
Htrue(rp(1:L),n) = 10*abs(randn(L,1));
end
%%% make synthetic data
X = W*Htrue;
frobX = norm(X,'fro');
%%% run sparse coders
fprintf('sNNLS')
tic
H = sparseNNLS(X,W,[],[],L,L);
fprintf('\t... t: %f \tE: %f \tCorrect: %f\n', toc, norm(X-W*H,'fro'), mean(sum((H>0) & (Htrue>0))));
fprintf('rsNNLS')
tic
H = sparseNNLS(X,W,[],[],L,size(W,2));
fprintf('\t... t: %f \tE: %f \tCorrect: %f\n', toc, norm(X-W*H,'fro'), mean(sum((H>0) & (Htrue>0))));
end
end