Contents
Generate problem data
rand('seed', 0);
randn('seed', 0);
n = 2;
m = 200;
N = m/2;
M = m/2;
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)];
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;
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)');