##

    #!/usr/bin/python
    # The contents of this file are in the public domain. See LICENSE_FOR_EXAMPLE_PROGRAMS.txt
    #
    #
    # This is an example illustrating the use of a binary SVM classifier tool from
    # the dlib C++ Library.  In this example, we will create a simple test dataset
    # and show how to learn a classifier from it.
    #
    #
    # COMPILING/INSTALLING THE DLIB PYTHON INTERFACE
    #   You can install dlib using the command:
    #       pip install dlib
    #
    #   Alternatively, if you want to compile dlib yourself then go into the dlib
    #   root folder and run:
    #       python setup.py install
    #
    #   Compiling dlib should work on any operating system so long as you have
    #   CMake installed.  On Ubuntu, this can be done easily by running the
    #   command:
    #       sudo apt-get install cmake
    #

    import dlib
    try:
        import cPickle as pickle
    except ImportError:
        import pickle

    x = dlib.vectors()
    y = dlib.array()

    # Make a training dataset.  Here we have just two training examples.  Normally
    # you would use a much larger training dataset, but for the purpose of example
    # this is plenty.  For binary classification, the y labels should all be either +1 or -1.
    x.append(dlib.vector([1, 2, 3, -1, -2, -3]))
    y.append(+1)

    x.append(dlib.vector([-1, -2, -3, 1, 2, 3]))
    y.append(-1)

    # Now make a training object.  This object is responsible for turning a
    # training dataset into a prediction model.  This one here is a SVM trainer
    # that uses a linear kernel.  If you wanted to use a RBF kernel or histogram
    # intersection kernel you could change it to one of these lines:
    #  svm = dlib.svm_c_trainer_histogram_intersection()
    #  svm = dlib.svm_c_trainer_radial_basis()
    svm = dlib.svm_c_trainer_linear()
    svm.be_verbose()
    svm.set_c(10)

    # Now train the model.  The return value is the trained model capable of making predictions.
    classifier = svm.train(x, y)

    # Now run the model on our data and look at the results.
    print("prediction for first sample:  {}".format(classifier(x[0])))
    print("prediction for second sample: {}".format(classifier(x[1])))

    # classifier models can also be pickled in the same was as any other python object.
    with open('saved_model.pickle', 'wb') as handle:
        pickle.dump(classifier, handle, 2)