{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "*This notebook contains an excerpt from the book [Machine Learning for OpenCV](https://www.packtpub.com/big-data-and-business-intelligence/machine-learning-opencv) by Michael Beyeler.\n", "The code is released under the [MIT license](https://opensource.org/licenses/MIT),\n", "and is available on [GitHub](https://github.com/mbeyeler/opencv-machine-learning).*\n", "\n", "*Note that this excerpt contains only the raw code - the book is rich with additional explanations and illustrations.\n", "If you find this content useful, please consider supporting the work by\n", "[buying the book](https://www.packtpub.com/big-data-and-business-intelligence/machine-learning-opencv)!*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "< [Detecting Pedestrians with Support Vector Machines](06.00-Detecting-Pedestrians-with-Support-Vector-Machines.ipynb) | [Contents](../README.md) | [Detecting Pedestrians in the Wild](06.02-Detecting-Pedestrians-in-the-Wild.ipynb) >" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Implementing Our First Support Vector Machine\n", "\n", "In order to understand how SVMs work, we have to think about **decision boundaries**.\n", "\n", "When we used linear classifiers or decision trees in earlier chapters, our goal was always to\n", "minimize the classification error. We did this by accuracy or mean squared error. An SVM\n", "tries to achieve low classification errors too, but it does so only implicitly. An SVM's explicit\n", "objective is to maximize the **margins** between data points of one class versus the other. This\n", "is the reason SVMs are sometimes also called **maximum-margin classifiers**.\n", "\n", "> For a detailed treatment of SVMs and how they work, please refer to the book.\n", "\n", "For our very first SVM, we should\n", "probably focus on a simple dataset, perhaps a binary classification task." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Generating the dataset\n", "\n", "A cool trick about scikit-learn's dataset module that I haven't told you about is that you can\n", "generate random datasets of controlled size and complexity. A few notable ones are:\n", "- `datasets.make_classification([n_samples, ...])`: This function generates a random $n$-class classification problem, where we can specify the number of samples, the number of features, and the number of target labels \n", "- `datasets.make_regression([n_samples, ...])`: This function generates a random regression problem\n", "- `datasets.make_blobs([n_samples, n_features, ...])`: This function generates a number of Gaussian blobs we can use for clustering\n", "\n", "This means that we can use `make_classification` to build a custom dataset for a binary\n", "classification task.\n", "\n", "For the sake of simplicity, let's limit ourselves to only two\n", "feature values (`n_features=2`; for example, an $x$ and a $y$ value). Let's say we want to create\n", "100 data samples:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from sklearn import datasets\n", "X, y = datasets.make_classification(n_samples=100, n_features=2,\n", " n_redundant=0, n_classes=2,\n", " random_state=7816)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We expect `X` to have 100 rows (data samples) and two columns (features), whereas the\n", "vector `y` should have a single column that contains all the target labels:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "((100, 2), (100,))" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X.shape, y.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Visualizing the dataset\n", "\n", "We can plot these data points in a scatter plot using Matplotlib. Here, the idea is to plot the\n", "$x$ values (found in the first column of `X`, `X[:, 0]`) against the $y$ values (found in the second\n", "column of `X`, `X[:, 1]`). A neat trick is to pass the target labels as color values (`c=y`):" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "plt.style.use('ggplot')\n", "plt.set_cmap('jet')\n", "%matplotlib inline\n", "plt.figure(figsize=(10, 6))\n", "plt.scatter(X[:, 0], X[:, 1], c=y, s=100)\n", "plt.xlabel('x values')\n", "plt.ylabel('y values')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can see that, for the most part, data points of the two classes are clearly separated.\n", "However, there are a few regions (particularly near the left and bottom of the plot) where\n", "the data points of both classes intermingle. These will be hard to classify correctly, as we\n", "will see in just a second." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Preprocessing the dataset\n", "\n", "The next step is to split the data points into training and test sets, as we have done before.\n", "But, before we do that, we have to prepare the data for OpenCV:\n", "- All feature values in `X` must be 32-bit floating point numbers\n", "- Target labels must be either -1 or +1\n", "\n", "We can achieve this with the following code:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy as np\n", "X = X.astype(np.float32)\n", "y = y * 2 - 1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can pass the data to scikit-learn's `train_test_split` function, like we did in the\n", "earlier chapters:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from sklearn import model_selection as ms\n", "X_train, X_test, y_train, y_test = ms.train_test_split(\n", " X, y, test_size=0.2, random_state=42\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here I chose to reserve 20 percent of all data points for the test set, but you can adjust this\n", "number according to your liking." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Building the support vector machine\n", "\n", "In OpenCV, SVMs are built, trained, and scored the same exact way as every other learning\n", "algorithm we have encountered so far, using the following steps.\n", "\n", "Call the `create` method to construct a new SVM:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import cv2\n", "svm = cv2.ml.SVM_create()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As shown in the following command, there are different *modes* in which we can\n", "operate an SVM. For now, all we care about is the case we discussed in the\n", "previous example: an SVM that tries to partition the data with a straight line. This\n", "can be specified with the `setKernel` method:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": true }, "outputs": [], "source": [ "svm.setKernel(cv2.ml.SVM_LINEAR)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Call the classifier's `train` method to find the optimal decision boundary:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "svm.train(X_train, cv2.ml.ROW_SAMPLE, y_train);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Call the classifier's `predict` method to predict the target labels of all data\n", "samples in the test set:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": true }, "outputs": [], "source": [ "_, y_pred = svm.predict(X_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Use scikit-learn's `metrics` module to score the classifier:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.80000000000000004" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn import metrics\n", "metrics.accuracy_score(y_test, y_pred)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Congratulations, we got 80 percent correctly classified test samples!\n", "\n", "Of course, so far we have no idea what happened under the hood. For all we know, we\n", "might as well have gotten these commands off a web search and typed them into the\n", "terminal, without really knowing what we're doing. But this is not who we want to be.\n", "\n", "Getting a system to work is one thing and understanding it is another. Let us get to that!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Visualizing the decision boundary\n", "\n", "What was true in trying to understand our data is true for trying to understand our\n", "classifier: visualization is the first step in understanding a system. We know the SVM\n", "somehow came up with a decision boundary that allowed us to correctly classify 80 percent\n", "of the test samples. But how can we find out what that decision boundary actually looks\n", "like?\n", "\n", "For this, we will borrow a trick from the guys behind scikit-learn. The idea is to generate a\n", "fine grid of $x$ and $y$ coordinates and run that through the SVM's `predict` method. This will\n", "allow us to know, for every $(x, y)$ point, what target label the classifier would have\n", "predicted.\n", "\n", "We will do this in a dedicated function, which we call `plot_decision_boundary`. The\n", "function takes as inputs an SVM object, the feature values of the test set, and the target\n", "labels of the test set. The function then creates a contour plot, on top of which we will plot the individual data points colored\n", "by their true target labels:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def plot_decision_boundary(svm, X_test, y_test):\n", " # create a mesh to plot in\n", " h = 0.02 # step size in mesh\n", " x_min, x_max = X_test[:, 0].min() - 1, X_test[:, 0].max() + 1\n", " y_min, y_max = X_test[:, 1].min() - 1, X_test[:, 1].max() + 1\n", " xx, yy = np.meshgrid(np.arange(x_min, x_max, h),\n", " np.arange(y_min, y_max, h))\n", " \n", " X_hypo = np.c_[xx.ravel().astype(np.float32),\n", " yy.ravel().astype(np.float32)]\n", " _, zz = svm.predict(X_hypo)\n", " zz = zz.reshape(xx.shape)\n", " \n", " plt.contourf(xx, yy, zz, cmap=plt.cm.coolwarm, alpha=0.8)\n", " plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, s=200)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nKgAAABf8/zgrhpk4YPegAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(10, 6))\n", "plot_decision_boundary(svm, X_test, y_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we get a better sense of what is going on!\n", "\n", "The SVM found a straight line (a **linear decision boundary**) that best separates the blue and\n", "the red data samples. It didn't get all the data points right, as there are three blue dots in the\n", "red zone and one red dot in the blue zone.\n", "\n", "However, we can convince ourselves that this is the best straight line we could have chosen\n", "by wiggling the line around in our heads. If you're not sure why, please refer to the book (p. 148).\n", "\n", "So what can we do to improve our classification performance?\n", "\n", "One solution is to move away from straight lines and onto more complicated decision\n", "boundaries." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Dealing with nonlinear decision boundaries\n", "\n", "What if the data cannot be optimally partitioned using a linear decision boundary? In such\n", "a case, we say the data is not linearly separable.\n", "\n", "The basic idea to deal with data that is not linearly separable is to create **nonlinear\n", "combinations** of the original features. This is the same as saying we want to project our\n", "data to a higher-dimensional space (for example, from 2D to 3D) in which the data\n", "suddenly becomes linearly separable.\n", "\n", "The book has a nice figure illustrating this idea." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Implementing nonlinear support vector machines\n", "\n", "OpenCV provides a whole range of different SVM kernels with which we can experiment.\n", "\n", "Some of the most commonly used ones include:\n", "- `cv2.ml.SVM_LINEAR`: This is the kernel we used previously. It provides a linear decision boundary in the original feature space (the $x$ and $y$ values).\n", "- `cv2.ml.SVM_POLY`: This kernel provides a decision boundary that is a polynomial function in the original feature space. In order to use this kernel, we also have to specify a coefficient via `svm.setCoef0` (usually set to 0) and the degree of the polynomial via `svm.setDegree`.\n", "- `cv2.ml.SVM_RBF`: This kernel implements the kind of Gaussian function we discussed earlier.\n", "- `cv2.ml.SVM_SIGMOID`: This kernel implements a sigmoid function, similar to the one we encountered when talking about logistic regression in [Chapter 3](03.00-First-Steps-in-Supervised-Learning.ipynb), *First Steps in Supervised Learning*.\n", "- `cv2.ml.SVM_INTER`: This kernel is a new addition to OpenCV 3. It separates classes based on the similarity of their histograms.\n", "\n", "In order to test some of the SVM kernels we just talked about, we will return to our code\n", "sample mentioned earlier. We want to repeat the process of building and training the SVM\n", "on the dataset generated earlier, but this time we want to use a whole range of different\n", "kernels:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": true }, "outputs": [], "source": [ "kernels = [cv2.ml.SVM_LINEAR, cv2.ml.SVM_INTER, cv2.ml.SVM_SIGMOID, cv2.ml.SVM_RBF]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Do you remember what all of these stand for?\n", "\n", "Setting a different SVM kernel is relatively simple. We take an entry from the kernels list\n", "and pass it to the setKernels method of the SVM class. That's all.\n", "\n", "The laziest way to repeat things is to use a for loop:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(14, 8))\n", "for idx, kernel in enumerate(kernels):\n", " svm = cv2.ml.SVM_create()\n", " svm.setKernel(kernel)\n", " svm.train(X_train, cv2.ml.ROW_SAMPLE, y_train)\n", " _, y_pred = svm.predict(X_test)\n", " \n", " plt.subplot(2, 2, idx + 1)\n", " plot_decision_boundary(svm, X_test, y_test)\n", " plt.title('accuracy = %.2f' % metrics.accuracy_score(y_test, y_pred))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's break the figure down step-by-step:\n", "\n", "First, we find that the linear kernel (top-left panel) still looks like one in an earlier plot. We\n", "now realize that it's also the only version of SVM that produces a straight line as a decision\n", "boundary (although `cv2.ml.SVM_C` produces almost identical results to\n", "`cv2.ml.SVM_LINEAR`).\n", "\n", "The histogram intersection kernel (top-right panel) allows for a more complex decision\n", "boundary. However, this did not improve our generalization performance (accuracy is still\n", "at 80 percent).\n", "\n", "Although the sigmoid kernel (bottom-left panel) allows for a nonlinear decision boundary,\n", "it made a really poor choice, leading to only 25% accuracy.\n", "\n", "On the other hand, the Gaussian kernel (bottom-right panel) was able to improve our\n", "performance to 90% accuracy. It did so by having the decision boundary wrap around the\n", "lowest red dot and reaching up to put the two leftmost blue dots into the blue zone. It still\n", "makes two mistakes, but it definitely draws the best decision boundary we have seen to\n", "date! Also, note how the RBF kernel is the only kernel that cares to narrow down the blue\n", "zone in the lower two corners." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "< [Detecting Pedestrians with Support Vector Machines](06.00-Detecting-Pedestrians-with-Support-Vector-Machines.ipynb) | [Contents](../README.md) | [Detecting Pedestrians in the Wild](06.02-Detecting-Pedestrians-in-the-Wild.ipynb) >" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.3" } }, "nbformat": 4, "nbformat_minor": 1 }