Figure 7.1: Logistic regression (GP version)
randn('state',0);
rand('state',0);
a = 1;
b = -5;
m = 100;
u = 10*rand(m,1);
y = (rand(m,1) < exp(a*u+b)./(1+exp(a*u+b)));
ind_false = find( y == 0 );
ind_true = find( y == 1 );
X = [u(ind_true); u(ind_false)];
X = [X ones(size(u,1),1)];
[m,n] = size(X);
q = length(ind_true);
cvx_begin gp
variables z(n) t(q) s(m)
minimize( prod(t)*prod(s) )
subject to
for k = 1:q
prod( z.^(X(k,:)') ) <= t(k);
end
for k = 1:m
1 + prod( z.^(-X(k,:)') ) <= s(k);
end
cvx_end
theta = log(z);
aml = -theta(1);
bml = -theta(2);
us = linspace(-1,11,1000)';
ps = exp(aml*us + bml)./(1+exp(aml*us+bml));
plot(us,ps,'-', u(ind_true),y(ind_true),'o', ...
u(ind_false),y(ind_false),'o');
axis([-1, 11,-0.1,1.1]);
Successive approximation method to be employed.
For improved efficiency, sedumi is solving the dual problem.
sedumi will be called several times to refine the solution.
Original size: 653 variables, 255 equality constraints
200 exponentials add 1600 variables, 1000 equality constraints
-----------------------------------------------------------------
Errors
Act Centering Conic Status
-----------------------------------
200 4.877e+00 2.483e+00 Inaccurate/Solved
200 1.916e-01 3.074e-03 Inaccurate/Solved
200 2.876e-02 7.453e-05 Inaccurate/Solved
200 3.532e-03 2.881e-06 Inaccurate/Solved
200 8.029e-04 1.050e-06 Inaccurate/Solved
200 5.033e-05 1.408e-06S Inaccurate/Solved
200 3.281e-04S 3.781e-08 Solved
200 9.024e-05 1.240e-08 Solved
200 1.139e-05 1.160e-08S Solved
200 6.599e-05S 8.124e-09 Inaccurate/Solved
200 2.564e-05 0.000e+00 Solved
-----------------------------------------------------------------
Status: Solved
Optimal value (cvx_optval): +2.10331e+14