source: distools/aucdlpc.m @ 70

Last change on this file since 70 was 10, checked in by bduin, 14 years ago
File size: 3.0 KB
Line 
1%AUCDLPC AUC-LP classifier on dissimilarity data
2%
3%   [W,R] = AUCLPC(D,C)
4%
5% INPUT
6%   D   Dissimilarity data
7%   C   Trade-off parameter in the LP-optimization, similar to C in the SVM
8%       (optional; default: 10)
9%
10% OUTPUT
11%   W   Mapping: AUC-LP Classifier
12%   R   Object identifiers of support objects
13%
14% DEFAULTS
15%   C  = 10
16%
17% DESCRIPTION
18% Determines a linear programming classifier for the dissimilarity representation D.
19% This LP-function is determined for a two-class problem based on the maximization
20% of the AUC measure (area under the curve) of the corresponding ROC curve.
21% It calls AUCLPM(D,C,'SUBK',1).
22%
23%
24% SEE ALSO
25% MAPPINGS, DATASETS, AUCLPC, AUCLPM
26%
27% REFERENCE
28% D.M.J. Tax and C. Veenman, Tuning the hyperparameter of an AUC-optimized classifier,
29% in: Seventeenth Belgium-Netherlands conference on artificial intelligence, 2005, 224-231.
30
31% David Tax, Robert P.W. Duin, Elzbieta Pekalska, ela.pekalska@googlemail.com
32% Faculty of Electrical Engineering, Mathematics and Computer Science,
33% Delft University of Technology, The Netherlands.
34
35
36function [w,r] = aucdlpc(d,C,usematlab,prec)
37
38if nargin < 4, prec = 1e-7; end;
39if nargin < 3, usematlab = 0; end
40if nargin < 2 | isempty(C),
41  C = 10;
42end
43
44if nargin < 1 | isempty(d)
45    w = mapping(mfilename,C);
46    w = setname(w,'AUCDLPC');
47    return
48end
49
50
51[m,k,c] = getsize(d);
52
53if c > 2,
54  % multi-class problem
55
56  lab = getlab(d);
57  fe  = getfeatlab(d);
58  [nlab,nfe,lablist] = renumlab(lab,fe);
59
60  w = [];
61  N = [];
62  for i=1:c
63    mlab = 2 - (nlab == i);
64    mfe  = 2 - (nfe == i);
65    dd   = setlabels(d,mlab);
66    dd   = setfeatlab(dd,mfe);
67    if ~isempty(d.prior)
68      dd = setprior(dd,[d.prior(i),1-d.prior(i)]');
69    end
70    [v,J]= aucdlpc(dd,C,usematlab,prec);
71    w = [w,setlabels(v(:,1),lablist(i,:))];
72    N = [N; J];
73  end
74  r = unique(N);
75  w  = setname(w,'AUCDLPC');
76  return
77
78else
79  % two-class problem
80
81  v    = auclpm(d,C,'subk',1,1,usematlab);
82  nlab = getnlab(d);
83  p    = getprior(d);
84  q    = +(d*v);
85  [qq,J] = sort(q);
86  n1 = sum(nlab == 1);
87  n2 = sum(nlab == 2);
88%  e = n1-n2;
89%  J1 = cumsum(nlab(J) == 1);
90%  J2 = n2-cumsum(nlab(J) == 2);
91  e1 = p(1)*cumsum(nlab(J) == 1)/n1 + p(2)*(1 - cumsum(nlab(J) == 2)/n2);
92  e2 = p(2)*cumsum(nlab(J) == 2)/n2 + p(1)*(1 - cumsum(nlab(J) == 1)/n1);
93
94  [min1,k1] = min(e1);
95  [min2,k2] = min(e2);
96% if min1 < min2          % NO!! We should assume that AUCLPM gives a proper
97%    if k1 == length(q)   % and well defined class order: 1 -> -, 2 > +
98%      w0 = q(J(k1)) + realmin;
99%    else
100%      w0 = (q(J(k1))+q(J(k1+1)))/2;
101%    end
102%    w = v.data.u - v.data.v;
103%  else
104    if k2 == length(q)
105      w0 = q(J(k2)) + realmin;
106    else
107      w0 = (q(J(k2))+q(J(k2+1)))/2;
108    end
109    w = v.data.v - v.data.u;
110%  end
111
112  ss = sum(abs(w));
113  J  = find(abs(w) >= ss*prec);
114  w  = featsel(k,J)*affine(w(J),w0,d(:,J),getlablist(d),k,c);
115  w  = setout_conv(w,1);
116  w  = setname(w,'AUCDLPC');
117  r  = J;
118end
119return
Note: See TracBrowser for help on using the repository browser.