Contents

% Distributed linear support vector machine example

Generate problem data

rand('seed', 0);
randn('seed', 0);

n = 2;
m = 200;
N = m/2;
M = m/2;

% positive examples
Y = [1.5+0.9*randn(1,0.6*N), 1.5+0.7*randn(1,0.4*N);
2*(randn(1,0.6*N)+1), 2*(randn(1,0.4*N)-1)];

% negative examples
X = [-1.5+0.9*randn(1,0.6*M),  -1.5+0.7*randn(1,0.4*M);
2*(randn(1,0.6*M)-1), 2*(randn(1,0.4*M)+1)];

x = [X Y];
y = [ones(1,N) -ones(1,M)];
A = [ -((ones(n,1)*y).*x)' -y'];
xdat = x';
lambda = 1.0;

% partition the examples up in the worst possible way
% (subsystems only have positive or negative examples)
p = zeros(1,m);
p(y == 1)  = sort(randi([1 10], sum(y==1),1));
p(y == -1) = sort(randi([11 20], sum(y==-1),1));

Solve problem

[x history] = linear_svm(A, lambda, p, 1.0, 1.0);
iter	    r norm	   eps pri	    s norm	  eps dual	 objective
  1	    2.9530	    0.0297	    1.4676	    0.0297	      0.05
  2	    1.9801	    0.0331	    1.6816	    0.0488	      1.58
  3	    1.0197	    0.0458	    1.3087	    0.0532	      7.60
  4	    0.9436	    0.0561	    1.0746	    0.0554	      8.54
  5	    0.9444	    0.0649	    0.9008	    0.0562	      9.01
  6	    0.9496	    0.0719	    0.7339	    0.0560	      9.17
  7	    0.9143	    0.0770	    0.5603	    0.0605	      9.40
  8	    0.7525	    0.0804	    0.3914	    0.0668	     11.68
  9	    0.7373	    0.0821	    0.2032	    0.0728	     12.25
 10	    0.6569	    0.0823	    0.0943	    0.0782	     12.75
 11	    0.6171	    0.0816	    0.1587	    0.0832	     13.13
 12	    0.5971	    0.0803	    0.1992	    0.0881	     13.18
 13	    0.5683	    0.0783	    0.2423	    0.0929	     13.31
 14	    0.5399	    0.0759	    0.2734	    0.0975	     13.46
 15	    0.4846	    0.0735	    0.2743	    0.1016	     13.87
 16	    0.4656	    0.0712	    0.2565	    0.1054	     14.07
 17	    0.4655	    0.0691	    0.2169	    0.1092	     13.88
 18	    0.4664	    0.0675	    0.1637	    0.1131	     13.78
 19	    0.4666	    0.0663	    0.1247	    0.1171	     13.69
 20	    0.4604	    0.0655	    0.1159	    0.1210	     13.78
 21	    0.4584	    0.0650	    0.1244	    0.1251	     13.86
 22	    0.4558	    0.0646	    0.1200	    0.1291	     13.98
 23	    0.4295	    0.0644	    0.0946	    0.1330	     14.32
 24	    0.3584	    0.0644	    0.0765	    0.1358	     15.82
 25	    0.3566	    0.0646	    0.0512	    0.1385	     16.04
 26	    0.3570	    0.0649	    0.0467	    0.1411	     16.12
 27	    0.3523	    0.0653	    0.0613	    0.1438	     16.16
 28	    0.3316	    0.0658	    0.0627	    0.1464	     16.36
 29	    0.3251	    0.0663	    0.0694	    0.1490	     16.54
 30	    0.3242	    0.0669	    0.0708	    0.1514	     16.66
 31	    0.3236	    0.0675	    0.0686	    0.1539	     16.74
 32	    0.3229	    0.0682	    0.0649	    0.1564	     16.79
 33	    0.3222	    0.0687	    0.0596	    0.1588	     16.82
 34	    0.3217	    0.0692	    0.0522	    0.1614	     16.84
 35	    0.3124	    0.0697	    0.0457	    0.1638	     16.99
 36	    0.3055	    0.0701	    0.0513	    0.1662	     17.14
 37	    0.3044	    0.0706	    0.0537	    0.1686	     17.12
 38	    0.2834	    0.0711	    0.0566	    0.1708	     17.37
 39	    0.2130	    0.0716	    0.0769	    0.1723	     18.91
 40	    0.2058	    0.0722	    0.0844	    0.1737	     18.96
 41	    0.1941	    0.0728	    0.0808	    0.1750	     19.14
 42	    0.1834	    0.0735	    0.0797	    0.1762	     19.42
 43	    0.1779	    0.0742	    0.0843	    0.1773	     19.49
 44	    0.1749	    0.0749	    0.0843	    0.1785	     19.58
 45	    0.1741	    0.0756	    0.0791	    0.1796	     19.66
 46	    0.1735	    0.0762	    0.0717	    0.1807	     19.73
 47	    0.1726	    0.0769	    0.0643	    0.1818	     19.78
 48	    0.1714	    0.0774	    0.0568	    0.1829	     19.82
 49	    0.1707	    0.0779	    0.0484	    0.1840	     19.85
 50	    0.1603	    0.0783	    0.0459	    0.1850	     19.98
 51	    0.1571	    0.0787	    0.0452	    0.1859	     20.04
 52	    0.1563	    0.0791	    0.0442	    0.1869	     20.07
 53	    0.1560	    0.0795	    0.0433	    0.1878	     20.11
 54	    0.1560	    0.0798	    0.0426	    0.1887	     20.14
 55	    0.1562	    0.0801	    0.0416	    0.1897	     20.18
 56	    0.1566	    0.0804	    0.0398	    0.1906	     20.21
 57	    0.1572	    0.0807	    0.0370	    0.1915	     20.25
 58	    0.1578	    0.0809	    0.0334	    0.1924	     20.28
 59	    0.1582	    0.0812	    0.0295	    0.1933	     20.31
 60	    0.1586	    0.0814	    0.0255	    0.1942	     20.34
 61	    0.1588	    0.0816	    0.0216	    0.1951	     20.36
 62	    0.1588	    0.0818	    0.0182	    0.1959	     20.39
 63	    0.1318	    0.0819	    0.0218	    0.1965	     21.00
 64	    0.1285	    0.0820	    0.0271	    0.1971	     21.17
 65	    0.1276	    0.0821	    0.0242	    0.1976	     21.23
 66	    0.1268	    0.0821	    0.0150	    0.1981	     21.26
 67	    0.1235	    0.0821	    0.0054	    0.1986	     21.21
 68	    0.1226	    0.0820	    0.0124	    0.1991	     21.18
 69	    0.1219	    0.0820	    0.0170	    0.1997	     21.12
 70	    0.1216	    0.0819	    0.0169	    0.2003	     21.06
 71	    0.1219	    0.0819	    0.0132	    0.2010	     21.02
 72	    0.1221	    0.0818	    0.0087	    0.2016	     21.00
 73	    0.1221	    0.0817	    0.0066	    0.2023	     20.99
 74	    0.1219	    0.0817	    0.0079	    0.2029	     21.00
 75	    0.1218	    0.0816	    0.0093	    0.2036	     21.01
 76	    0.1216	    0.0815	    0.0096	    0.2043	     21.02
 77	    0.1141	    0.0815	    0.0134	    0.2049	     21.05
 78	    0.1126	    0.0815	    0.0181	    0.2055	     21.07
 79	    0.1111	    0.0815	    0.0217	    0.2061	     21.07
 80	    0.1092	    0.0816	    0.0258	    0.2068	     21.08
 81	    0.0867	    0.0816	    0.0323	    0.2073	     21.34
 82	    0.0669	    0.0817	    0.0406	    0.2076	     21.72
Elapsed time is 260.972176 seconds.

Reporting

K = length(history.objval);

h = figure;
plot(1:K, history.objval, 'k', 'MarkerSize', 10, 'LineWidth', 2);
ylabel('f(x^k) + g(z^k)'); xlabel('iter (k)');

g = figure;
subplot(2,1,1);
semilogy(1:K, max(1e-8, history.r_norm), 'k', ...
    1:K, history.eps_pri, 'k--',  'LineWidth', 2);
ylabel('||r||_2');

subplot(2,1,2);
semilogy(1:K, max(1e-8, history.s_norm), 'k', ...
    1:K, history.eps_dual, 'k--', 'LineWidth', 2);
ylabel('||s||_2'); xlabel('iter (k)');