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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
clear;
rand('state', 123456);
n = 8;
m = 3;
K = 3;
y = [ 2 1 3 2 3 3 1 2]';
U = SimplexGen(K);
UU = zeros(n, K-1, K);
for jj=1:K
UU(:, :, jj) = U(y, :) - U(jj*ones(n, 1), :);
end
VV = zeros(n, K-1, K);
for i=1:n
for j=1:K-1
for k=1:K
VV(i, j, k) = U(y(i), j) - U(k, j);
end
end
end
Z = [ones(n, 1), -1 + 2 * rand(n, m)];
V = -1 + 2 * rand(m+1, K-1);
ZV = Z*V;
Q = zeros(n, K);
for i=1:n
for j=1:K
Q(i, j) = ZV(i, :) * (U(y(i), :) - U(j, :))';
end
end
% calculate loss
kappa = 0.5;
p = 1.5;
%rho = ones(n, 1);
rho = zeros(n, 1);
for i=1:K
nk = sum(y == i);
rho(y==i) = (n/(K*nk));
end
lambda = 0.123;
H = zeros(n, K);
for i=1:n
for j=1:K
q = Q(i, j);
if (q <= -kappa)
H(i, j) = (1 - q - (kappa + 1)/2.0);
elseif (q <= 1)
H(i, j) = (1/(2*kappa + 2)) * (1 - q)^2;
else
H(i, j) = 0;
end
end
end
R = zeros(n, K);
I = eye(K);
for i=1:n
R(i, :) = I(y(i, :), :);
end
R = ~logical(R);
J = eye(m+1);
J(1, 1) = 0;
L = sum((H.^p).*R, 2).^(1/p);
L = 1/n * sum(rho.*L) + lambda * trace(V'*J*V);
% DON"T REMOVE YET!!
|