1 | %DISPC Dissimilarity based Parzen classifier |
---|
2 | % |
---|
3 | % W = dispc(A) |
---|
4 | % |
---|
5 | % A should be a dissimilarity based dataset with class labels as |
---|
6 | % feature labels. |
---|
7 | % |
---|
8 | % $Id: dispc.m,v 1.2 2001/07/10 16:35:58 pavel Exp $ |
---|
9 | |
---|
10 | % Copyright: R.P.W. Duin, duin@ph.tn.tudelft.nl |
---|
11 | % Faculty of Applied Physics, Delft University of Technology |
---|
12 | % P.O. Box 5046, 2600 GA Delft, The Netherlands |
---|
13 | |
---|
14 | function w = dispc(a,v) |
---|
15 | |
---|
16 | if nargin < 1 | isempty(a) % empty call (untrained classifier) |
---|
17 | w = mapping('dispc'); |
---|
18 | |
---|
19 | elseif nargin == 1 % training |
---|
20 | [nlab,lablist,m,k,c,p] = dataset(a); |
---|
21 | [nn,nf,fl] = renumlab(lablist,getfeat(a)); |
---|
22 | if c < 2 |
---|
23 | error('Dataset should containf more than one class') |
---|
24 | end |
---|
25 | if max(nf) > c |
---|
26 | error('Feature labels of dataset do not match with class labels') |
---|
27 | end |
---|
28 | w = []; |
---|
29 | for j=1:c |
---|
30 | F = find(nf==j); |
---|
31 | L = find(nlab==j); |
---|
32 | n = ceil(sqrt(length(L))); |
---|
33 | [b,r] = sort(+a(L,F)); |
---|
34 | for f=1:length(F) |
---|
35 | h(F(f)) = b(r(n,f),F(f)); |
---|
36 | end |
---|
37 | |
---|
38 | b = {+a(find(nlab==nf(j)),j) +a(find(nlab~=nf(j)),j)}; |
---|
39 | w = [w; mapping('distrc',b,fl(nf(j),:),1,1,1)]; |
---|
40 | end |
---|
41 | |
---|
42 | % w = cnormc(w,a); forget normalisation and apriori probs for the moment |
---|
43 | |
---|
44 | elseif nargin == 2 % evaluation |
---|
45 | [m,k] = size(a); |
---|
46 | b = +v; b1 = b{1}; b2 = b{2}; |
---|
47 | n1 = length(b1); n2 = length(b2); |
---|
48 | w1 = zeros(m,1); w2 = zeros(m,1); |
---|
49 | [d R1] = sort([b1;+a]); |
---|
50 | [d R2] = sort([b2;+a]); |
---|
51 | L1 = find(R1>n1); |
---|
52 | L2 = find(R2>n2); |
---|
53 | w1(R1(L1)-n1) = (n1+2-(L1-[1:m]'))/(n1+2); |
---|
54 | w2(R2(L2)-n2) = (n2+2-(L2-[1:m]'))/(n2+2); |
---|
55 | % disp([w1;w2]) |
---|
56 | w = invsig(dataset((w1+w2)/2,getlab(a),getfeat(v))); |
---|
57 | else |
---|
58 | error('Illegal call') |
---|
59 | end |
---|
60 | |
---|