.. _examples_index:

********
Examples
********

In the following we show how ForBES can be used to model and solve some well
known optimization problems.

Support vector machines
=======================

SVMs can be cast as the following convex optimization problem

.. math::
    \mathrm{minimize}\ &\frac{\lambda}{2}\|x\|_2^2 + \sum_{i=1}^m \max\{0, 1-b_iz_i\},\\
    \mathrm{subject\ to}\ &Ax = z

Therefore we have

.. math::
    x_1 = x,\ f(x) = \frac{\lambda}{2}\|x\|_2^2,\ g(z) = \sum_{i=1}^m \max\{0, 1-b_iz_i\},\ A_1 = A,\ B = -I

Function :math:`g` is called hinge loss and is provided in the library (see Functions
for more information). The problem can therefore be defined as::

    f = squaredNorm(lambda);
    g = hingeLoss(1, b); % vector b contains the labels
    out = forbes(f, g, [], [], {A, -1, zeros(m, 1)});

Sparse logistic regression
==========================

Consider the following problem

.. math::
    \mathrm{minimize}\ \sum_{i=1}^m\log(1+\exp(-b_i \langle a_{i}, x\rangle)) + r\|x\|_1

The smooth term in this case is the logistic function, and the nonsmooth term is
the :math:`\ell_1` regularization. We then have

.. math::
    f(x) &= \frac{1}{m}\sum_{i=1}^m \log(1+\exp(-x_i)) \\
    g(x) &= r\|x\|_1 = \sum_i |x_i|

This problem can be defined using the functions in the library (see Functions
for more information) as follows::

    f = logLoss(1/m);
    g = l1Norm(r);
    C = diag(sparse(b))*X; % vector b contains the labels, X is the design matrix
    out = forbes(f, g, [], C);