#!/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) | |