1 | %KCENTERM Kernel Weighted Centering Mapping |
---|
2 | % |
---|
3 | % W = kcenterm(K,V) |
---|
4 | % |
---|
5 | % INPUT |
---|
6 | % K NxN kernel or similarity matrix (dataset) |
---|
7 | % V 'C' (default) or Nx1 weight vector of nonnegative values; sum(V)=1 |
---|
8 | % |
---|
9 | % OUTPUT |
---|
10 | % W Kernel weighted centering mapping |
---|
11 | % |
---|
12 | % DEFAULT |
---|
13 | % V = 'C'; |
---|
14 | % |
---|
15 | % DESCRIPTION |
---|
16 | % Defines a mapping that centers the given NxN kernel matrix K:=K(X,X) |
---|
17 | % such that the weighted mean coincides with the origin in the vector space |
---|
18 | % induced by K. The nonnegative weights of the mean are defined by an |
---|
19 | % Nx1 vector V; sum(V) = 1. V = 'C' stands for V=ones(N,1)/N, hence |
---|
20 | % the true centering. |
---|
21 | % |
---|
22 | % The mapping works with both positive (semi-)definite and indefinite |
---|
23 | % kernels. V can be applied to a new MxN kernel Knew:=K(Xnew,X). |
---|
24 | % |
---|
25 | % SEE ALSO |
---|
26 | % KPCA, MAPPINGS, DATASETS |
---|
27 | % |
---|
28 | |
---|
29 | % Copyright: Ela Pekalska, ela.pekalska@googlemail.com |
---|
30 | % Faculty EWI, Delft University of Technology and |
---|
31 | % School of Computer Science, University of Manchester |
---|
32 | % |
---|
33 | |
---|
34 | function [V,KK] = kcenterm(K,v) |
---|
35 | |
---|
36 | if nargin < 2 | isempty(v) |
---|
37 | v = 'c'; |
---|
38 | end |
---|
39 | |
---|
40 | if nargin < 1 | isempty(K) |
---|
41 | V = mapping(mfilename); |
---|
42 | V = setname(V,'kcenterm'); |
---|
43 | return |
---|
44 | end |
---|
45 | |
---|
46 | |
---|
47 | if (isdataset(K) | isa(K,'double')) |
---|
48 | if ismapping(v) |
---|
49 | |
---|
50 | [m,n] = size(K); |
---|
51 | pars = getdata(v); |
---|
52 | |
---|
53 | v = pars{1}; |
---|
54 | Kwm = pars{2}; |
---|
55 | |
---|
56 | H = eye(n) - v*ones(1,n); |
---|
57 | V = (K - repmat(Kwm',m,1))* H; |
---|
58 | return; |
---|
59 | end |
---|
60 | end |
---|
61 | |
---|
62 | |
---|
63 | |
---|
64 | lab = getlab(K); |
---|
65 | lablist = getlablist(K); |
---|
66 | [n,m,c] = getsize(K); |
---|
67 | |
---|
68 | tol = 1e-12; |
---|
69 | if ~issym(K,tol), |
---|
70 | error('Kernel matrix K should be symmetric.') |
---|
71 | end |
---|
72 | |
---|
73 | if v == 'c', |
---|
74 | v = ones(n,1)/n; |
---|
75 | end |
---|
76 | |
---|
77 | if length(v)==1 |
---|
78 | l = intersect(v,1:n) |
---|
79 | v = zeros(n,1); |
---|
80 | v(l) = 1; |
---|
81 | end |
---|
82 | |
---|
83 | if length(v) ~= n, |
---|
84 | error('V has a wrong size.'); |
---|
85 | end |
---|
86 | |
---|
87 | if any(v) < 0 | any(v) > 1, |
---|
88 | error('V should have elements in [0,1].'); |
---|
89 | end |
---|
90 | |
---|
91 | if abs(sum(v) - 1) > tol |
---|
92 | error('sum(V) ~= 1.'); |
---|
93 | end |
---|
94 | |
---|
95 | |
---|
96 | % Center K such that the weighted mean coincides with the origin |
---|
97 | Kwm = K*v; |
---|
98 | if nargout > 1 |
---|
99 | H = eye(n) - v*ones(1,n); |
---|
100 | KK = H * K * H; |
---|
101 | end |
---|
102 | |
---|
103 | V = mapping(mfilename,'trained',{v,Kwm},[],m,m); |
---|
104 | V = setname(V,'kcenterm'); |
---|
105 | return |
---|