data-science-ipython-notebooks/scikit-learn/scikit-learn.ipynb

555 lines
1.3 MiB
Plaintext
Raw Normal View History

{
"metadata": {
"name": "",
"signature": "sha256:a3c1d96eeac3532c240dfe5436b3d9edb85b2e2b29bbcbdf71b1bd5547ed7128"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# scikit-learn"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* Machine Learning Models Cheat Sheet\n",
"* Estimators\n",
"* Introduction: Iris Dataset\n",
"* Overview: K-Nearest Neighbors Classifier\n",
"* Support Vector Machine Classifier\n",
"* Support Vector Machine with Kernels Classifier"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%matplotlib inline\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import seaborn; \n",
"from sklearn.linear_model import LinearRegression\n",
"from scipy import stats\n",
"import pylab as pl\n",
"\n",
"seaborn.set()"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 11
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Machine Learning Models Cheat Sheet"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from IPython.display import Image\n",
"Image(\"http://scikit-learn.org/dev/_static/ml_map.png\", width=800)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {
"png": {
"width": 800
}
},
"output_type": "pyout",
"png": "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\nex0bHRmpvaYRoAAAAAAAAAAA
"prompt_number": 12,
"text": [
"<IPython.core.display.Image at 0x10f6f6ed0>"
]
}
],
"prompt_number": 12
2015-04-12 02:07:07 +08:00
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Estimators"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Given a scikit-learn *estimator* object named `model`, the following methods are available:\n",
"\n",
"- Available in **all Estimators**\n",
" + `model.fit()` : fit training data. For supervised learning applications,\n",
" this accepts two arguments: the data `X` and the labels `y` (e.g. `model.fit(X, y)`).\n",
" For unsupervised learning applications, this accepts only a single argument,\n",
" the data `X` (e.g. `model.fit(X)`).\n",
"- Available in **supervised estimators**\n",
" + `model.predict()` : given a trained model, predict the label of a new set of data.\n",
" This method accepts one argument, the new data `X_new` (e.g. `model.predict(X_new)`),\n",
" and returns the learned label for each object in the array.\n",
" + `model.predict_proba()` : For classification problems, some estimators also provide\n",
" this method, which returns the probability that a new observation has each categorical label.\n",
" In this case, the label with the highest probability is returned by `model.predict()`.\n",
" + `model.score()` : for classification or regression problems, most (all?) estimators implement\n",
" a score method. Scores are between 0 and 1, with a larger score indicating a better fit.\n",
"- Available in **unsupervised estimators**\n",
" + `model.predict()` : predict labels in clustering algorithms.\n",
" + `model.transform()` : given an unsupervised model, transform new data into the new basis.\n",
" This also accepts one argument `X_new`, and returns the new representation of the data based\n",
" on the unsupervised model.\n",
" + `model.fit_transform()` : some estimators implement this method,\n",
" which more efficiently performs a fit and a transform on the same input data."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Introduction: Iris Dataset"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from sklearn.datasets import load_iris\n",
"iris = load_iris()\n",
"\n",
"n_samples, n_features = iris.data.shape\n",
"print(iris.keys())\n",
"print((n_samples, n_features))\n",
"print(iris.data.shape)\n",
"print(iris.target.shape)\n",
"print(iris.target_names)\n",
"print(iris.feature_names)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"['target_names', 'data', 'target', 'DESCR', 'feature_names']\n",
"(150, 4)\n",
"(150, 4)\n",
"(150,)\n",
"['setosa' 'versicolor' 'virginica']\n",
"['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']\n"
]
}
],
"prompt_number": 13
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"# 'sepal width (cm)'\n",
"x_index = 1\n",
"# 'petal length (cm)'\n",
"y_index = 2\n",
"\n",
"# this formatter will label the colorbar with the correct target names\n",
"formatter = plt.FuncFormatter(lambda i, *args: iris.target_names[int(i)])\n",
"\n",
"plt.scatter(iris.data[:, x_index], iris.data[:, y_index],\n",
" c=iris.target, cmap=plt.cm.get_cmap('RdYlBu', 3))\n",
"plt.colorbar(ticks=[0, 1, 2], format=formatter)\n",
"plt.clim(-0.5, 2.5)\n",
"plt.xlabel(iris.feature_names[x_index])\n",
"plt.ylabel(iris.feature_names[y_index]);"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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\n25VSRUqpxlrrYxWdkJBQ/Ttv
"text": [
"<matplotlib.figure.Figure at 0x10e8d1c10>"
]
}
],
"prompt_number": 14
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## K-Nearest Neighbors Classifier\n",
"\n",
"The K-Nearest Neighbors (KNN) algorithm is a method used for algorithm used for **classification** or for **regression**. In both cases, the input consists of the k closest training examples in the feature space. Given a new, unknown observation, look up which points have the closest features and assign the predominant class."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from sklearn import neighbors, datasets\n",
"\n",
"iris = datasets.load_iris()\n",
"X, y = iris.data, iris.target\n",
"\n",
"# create the model\n",
"knn = neighbors.KNeighborsClassifier(n_neighbors=5, weights='uniform')\n",
"\n",
"# fit the model\n",
"knn.fit(X, y)\n",
"\n",
"# What kind of iris has 3cm x 5cm sepal and 4cm x 2cm petal?\n",
"X_pred = [3, 5, 4, 2]\n",
"result = knn.predict([X_pred, ])\n",
"\n",
"print(iris.target_names[result])\n",
"print(iris.target_names)\n",
"print(knn.predict_proba([X_pred, ]))\n",
"\n",
"from fig_code import plot_iris_knn\n",
"plot_iris_knn()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"['versicolor']\n",
"['setosa' 'versicolor' 'virginica']\n",
"[[ 0. 0.8 0.2]]\n"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\nzIW4clKJTdR7Op0Onc71d/Zx
"text": [
"<matplotlib.figure.Figure at 0x10e844fd0>"
]
}
],
"prompt_number": 15
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Support Vector Machine Classifier"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Support Vector Machines (SVMs) are a powerful supervised learning algorithm used for **classification** or for **regression**. SVMs draw a boundary between clusters of data. SVMs attempt to maximize the margin between sets of points. Many lines can be drawn to separate the points above:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from sklearn.datasets.samples_generator import make_blobs\n",
"X, y = make_blobs(n_samples=50, centers=2,\n",
" random_state=0, cluster_std=0.60)\n",
"\n",
"xfit = np.linspace(-1, 3.5)\n",
"plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='spring')\n",
"\n",
"# Draw three lines that couple separate the data\n",
"for m, b, d in [(1, 0.65, 0.33), (0.5, 1.6, 0.55), (-0.2, 2.9, 0.2)]:\n",
" yfit = m * xfit + b\n",
" plt.plot(xfit, yfit, '-k')\n",
" plt.fill_between(xfit, yfit - d, yfit + d, edgecolor='none', color='#AAAAAA', alpha=0.4)\n",
"\n",
"plt.xlim(-1, 3.5);"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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\nUDmvCg1/p8OiHUt9vlf5cgxu
"text": [
"<matplotlib.figure.Figure at 0x10c6a7550>"
]
}
],
"prompt_number": 16
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Fit the model:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from sklearn.svm import SVC\n",
"clf = SVC(kernel='linear')\n",
"clf.fit(X, y)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 17,
"text": [
"SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3, gamma=0.0,\n",
" kernel='linear', max_iter=-1, probability=False, random_state=None,\n",
" shrinking=True, tol=0.001, verbose=False)"
]
}
],
"prompt_number": 17
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Plot the boundary:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def plot_svc_decision_function(clf, ax=None):\n",
" \"\"\"Plot the decision function for a 2D SVC\"\"\"\n",
" if ax is None:\n",
" ax = plt.gca()\n",
" x = np.linspace(plt.xlim()[0], plt.xlim()[1], 30)\n",
" y = np.linspace(plt.ylim()[0], plt.ylim()[1], 30)\n",
" Y, X = np.meshgrid(y, x)\n",
" P = np.zeros_like(X)\n",
" for i, xi in enumerate(x):\n",
" for j, yj in enumerate(y):\n",
" P[i, j] = clf.decision_function([xi, yj])\n",
" # plot the margins\n",
" ax.contour(X, Y, P, colors='k',\n",
" levels=[-1, 0, 1], alpha=0.5,\n",
" linestyles=['--', '-', '--'])"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 18
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In the following plot the dashed lines touch a couple of the points known as *support vectors*, which are stored in the ``support_vectors_`` attribute of the classifier:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='spring')\n",
"plot_svc_decision_function(clf)\n",
"plt.scatter(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1],\n",
" s=200, facecolors='none');"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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\nZ6lb+fCFdUz6xtQ6Xzd89kg+
"text": [
"<matplotlib.figure.Figure at 0x10e9d7450>"
]
}
],
"prompt_number": 19
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Use IPython's ``interact`` functionality to explore how the distribution of points affects the support vectors and the discriminative fit:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from IPython.html.widgets import interact\n",
"\n",
"def plot_svm(N=100):\n",
" X, y = make_blobs(n_samples=200, centers=2,\n",
" random_state=0, cluster_std=0.60)\n",
" X = X[:N]\n",
" y = y[:N]\n",
" clf = SVC(kernel='linear')\n",
" clf.fit(X, y)\n",
" plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='spring')\n",
" plt.xlim(-1, 4)\n",
" plt.ylim(-1, 6)\n",
" plot_svc_decision_function(clf, plt.gca())\n",
" plt.scatter(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1],\n",
" s=200, facecolors='none')\n",
" \n",
"interact(plot_svm, N=[10, 200], kernel='linear');"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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\nng0z13L52EWvbGvXP27jpQ0v
"text": [
"<matplotlib.figure.Figure at 0x10decb750>"
]
}
],
"prompt_number": 20
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Support Vector Machine with Kernels Classifier\n",
"\n",
"Kernels are useful when the decision boundary is not linear. A Kernel is some functional transformation of the input data. SVMs have clever tricks to ensure kernel calculations are efficient. In the example below, a linear boundary is not useful in separating the groups of points:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from sklearn.datasets.samples_generator import make_circles\n",
"X, y = make_circles(100, factor=.1, noise=.1)\n",
"\n",
"clf = SVC(kernel='linear').fit(X, y)\n",
"\n",
"plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='spring')\n",
"plot_svc_decision_function(clf);"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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\nIzt/CVHAf1AgtzXut9vf5S6G
"text": [
"<matplotlib.figure.Figure at 0x10f11de90>"
]
}
],
"prompt_number": 21
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"A simple model that could be useful is a **radial basis function**:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"r = np.exp(-(X[:, 0] ** 2 + X[:, 1] ** 2))\n",
"\n",
"from mpl_toolkits import mplot3d\n",
"\n",
"def plot_3D(elev=30, azim=30):\n",
" ax = plt.subplot(projection='3d')\n",
" ax.scatter3D(X[:, 0], X[:, 1], r, c=y, s=50, cmap='spring')\n",
" ax.view_init(elev=elev, azim=azim)\n",
" ax.set_xlabel('x')\n",
" ax.set_ylabel('y')\n",
" ax.set_zlabel('r')\n",
"\n",
"interact(plot_3D, elev=[-90, 90], azip=(-180, 180));"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAcwAAAFBCAYAAAD69Z+AAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvXmYHOV5r31XVS+zds8mjZbROtoRQgKEkFhsiR1jGQjx\nErI6jo+dxEkc+0rMSRz7c+LYcQ7HuWxOwkkcJ8TxMXi3sdkxYBAYBNpBQkL7vo1mRrP1UlXfH9XV\nXd1d3dNLVXd193tfl42ml6q3qqveXz3P+yySrusIBAKBQCDIj1ztAQgEAoFAUAsIwRQIBAKBoACE\nYAoEAoFAUABCMAUCgUAgKAAhmAKBQCAQFIAQTIFAIBAICsCX782zZy+KnBOBQCAQNBRTprRLdq8L\nC1MgEAgEggIQgikQCAQCQQEIwRQIBAKBoACEYAoEAoFAUABCMAUCgUAgKAAhmAKBQCAQFIAQTIFA\nIBAICkAIpkAgEAgEBSAEUyAQCASCAhCCKRAIBAJBAQjBFAgEAoGgAIRgCgQCgUBQAEIwBQKBQCAo\nACGYAoFAIBAUgBBMgUAgEAgKQAimQCAQCAQFIARTIBAIBIICEIIpEAgEAkEBCMEUNCyapqFpWrWH\nIRAIagQhmIKGwxDKOLoeQ1FAUUCWAVQgjq7rVR6hQCDwIr5qD0AgqBSapqHrMXQ9DkhIkoIkSUgS\nSBLE41E0TSUYbAXAqpu6nv63QCBoPIRgCuoew+2qoesquq4COiDl/Y4polZMwRRCKhA0JkIwBXVL\nulDqSJJEfqE037MXVFNAhZAKBI2JEExB3WEnlFKmyjmIEFKBoDEQgimoGyotlJNRqJAKERUIagMh\nmIKaxymhNL+i69ki5yT5hFTTdDQtBkjIsl8IqUDgIYRgCmoWr1mU5SJJRnpLLBZFlhUUxS/cugKB\nhxCCKag56k0o8yHWRwUC7yAEU1AzuC+U1ihZb1OMkIpiRgKBMwjBFHged4Vy8pzMWsJOSGU52/oU\n1qhAUDxCMAWexajME00UG5CRJNkBoawfcSwGUYhBICgfIZgCz1FKZR5B8Uzm1o3FJpAkGUUJCCEV\nCBCCKfAQuq4nRTK9Mo+YqSuJJBm/habFkSQZvz8ACItUIBCCKag6dkJZr1GvtYb1dxCFGASNjhBM\nQdUoTiiddsvmntFFe6/iyCekwhoV1BNCMAUVxysWpa5rqGoMXVeQZdEa1mlEoJGg3hCCKagYXhHK\nxGgAFVVVUdVY2juGiOrIslORuQITUYhBUMsIwRS4jleE0nC1qpZXJBTFjyQZkbmaFgdA01Q0Lf1z\npnimRFQIqZPkr68bR1XjyLIfSVKEiAqqhhBMgWt4TygzZ1oFWfahKIY7Nh6PEo9H8fkCSJKUyAPV\nEmKqYlikqW+bwmkVUxABS05iROwaDzOK4kNRjNfF+qigGgjBFDiOd4XSTFPRyCdsRu5hanI2t6Vp\nKrqeEtHUv7O/L8tKhkUqRNRJxPqooBoIwRQ4hiEicXTdUBBnhLL479tblIplW8UXV5UkCUVJv12M\nBwPdIpwpQVXVzH0It67biPVRgdsIwRSUjWlRGn0cVcCwrqoxDkMMrWJlCKUpTJkpI+l/F1d8PfVA\nkH6spoimW6GFuXWFgGZTbpqPKFQvcAohmIKSyXS9Wt5xY295xzGZUFYSQ0gVZFlJe70Yt66mqcRi\nkSqKqdWN7Q2cPn5RqF5QLEIwBUWTa42y0gn/bgmlW4dRqFvXjNDNTHcxzrPVIlVEVSQXyLc+qqoq\nmhZHln0iYrcBEYIpKBhvBfNkCqWM0dEk/3gMYc/1nkMDLIJMt66u60Qio4karsEst65RjF5E61aa\n1KnU0LQYsiyjKCnBFBZpYyAEUzAp9SCUtYYkSciynVs3e200l1vXjNSt/TVS76lPpjtXBBo1BkIw\nBTnxilAmRgPELX+XK5S1OXMZKS92QUZmoJF1jdSwRtO/b3XrKkkRzTyP5sTuLX31wmAKW9sVherr\nEyGYgixKF0pnJ7SURQmpicpNi7K4KFmvYHXrWtdI7aN1zR6j6SUBM9NdvCFOBvUkKKJQfW0jBFOQ\nxCsWpb3rFcBXoy7F6mAXrWucWz2tilHu3FEjyAWqGa2bwgs/vRnY5kbErnDreh8hmAIXhLK0O9qc\nzDPrvRqv1er6m7cwm3LnduuqiZxRM8BInyRaN7db1zkaUyEKceua9Y8lySeEtAIIwWxgvGVRZgql\nTKogQDzrOwJnSXfrGnmg0eg4sqzg8wUsFqm5Rjq5W9cQUyevJ/HABOlCGotF0XWNpqY2UYihAgjB\nbECMBPpoYtKTquZmyyeU2ZV5xONzNTCFr3S3rpQhorUcrQveK+iQaqwuCjG4jxDMBiLdooxj3GyV\nvwQKEcrKjkVQDIW6dQuJ1rWmvtRCEQavRQ/r+uRjEeujziEEswGwc72m1gYrOw77NUqnXXelkave\nrKAwMt26JpnRula3bnrfUXu3rrd+Dy9amMXXbRb5o6UhBLOOqfQaZa4qOimh1EifcLwhlAJ3cSJa\nF4x+paLTSwo3HiREofr8CMGsQ4oTytQaiIMjsIzFTA8RQilIkd+tq2VZpGDU1k0vCWgKcbqINtq1\nVYnjLXR91PjNoF5LMwrBrCO8EvVqjMXLQll5d7SgMEwRBCXp1o1ExtB1jUCgOZnukrJI4zkaeGen\nvTiBW3mYtUrm+mg8HkHTVAKB1rTP1Ys1KgSzDvCSUKYwTQFjTasa/TEF9YIhUqloXb/xaonRuvXj\n1vXaeqr1gSIlpPUiliAEs6bxklAaN0pmMI8QSoFTZF/Xxbl1C2vgXUudXrwWsWulFs5fKQjBrEGc\nEUonXVRGRZi0rUvOXFr52nGVS3bQRG3WknUDL0WmFjsUO7eusZ30AvX5Or1Ye46m5466seZfKt6z\nML11fpxHCGYN4Y5FWU4ZO6tQmj0d1ZzfKQ/vTOCVwCuC5RVLwYlh5IrWtbNIU25da5Wp1Nq3qsaq\n7tb1yjVixZiX6terJASzBvCm69V6syqYbiwj2Md7N7KglnHPasls4J3cYw63rkksFrFso7puXa88\n1HhRwJ1GCKaHSZWwi2OuB3pVKO0+75UbuViqed/X6jlzn8qel1xu3YmJEUDC5/OX4dZ1Ci+6ZOv7\nGhaC6UHSLcrs9cFKjyW71VZuoaw1jMnOtNqrPRqBl7GmlPh8gbTXsy1SNadb16loXe8F/XhTwJ1E\nCKaHyF3Czg3yb7fehdJARdPiRCLRtEnLKqICQSaZ10Wxbl3nonW9JVDeE3DnEYLpAQpbo3TLykzf\nbr0LZapMH5hrY+baa6r8l0YkMkq2NaB4JMe1cajldbF80bqperqFuHWVDIvUq9efvYDX8E+YhRDM\nKuK9YJ5MoaxOBxE3yHV8suwjEAgkJjGNWGwcUyjzWQNuVZIR2OON8+uMRSdJEoqSPvVmu3VTgppZ\nhMHs9GJtfecFj0gjVEESglkFvCSUxs2m4pxQulF2rvRt2gulSeoYJUlKuMFAlmUCgebk9+3y9vJX\nkkmJaD1PHo2Gm5bSZG7ddCvUbOBtYETsRqoerdsICMGsIF4TyhTm5F9vFqV9z027Qgu5yG0N5Fub\nilm+73akpKDSVPLns8sdBWPZIBabQNO0ZAu0XG5da89RN6/BXBamcMkKiiIllMYFXZxQOnthV871\n6nzuXCFup0KaU+t6ymIt5WbOvTaVLqC5EuBro3myVwJKvDTbeuWckCgOIAMafn8w6aLNrGY0WQNv\nZz0i3jk/biEE00XKE8qsrZU9llyuSWPyr32q3SFFkuSC21Xlbp6sWL5X/XUp7yDOQzbpApXewDs1\ntdu7dc2UtWyPiJNu3XqyLkEIpitYhdK8qKsbzJPLNRm3/U6tYV+mr3ShdDIy084ate+yYc3bA9CJ\nREazrNFGW5fy0oRbq0EtxTbwLtWtW6vnpxiEYDqInVBWcyyTuyarMDAHyVXPtvBalpkF4ytZyix3\nl41odDzxOTkxgeW2Rmsj3aB8
"text": [
"<matplotlib.figure.Figure at 0x10f96da90>"
]
}
],
"prompt_number": 22
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In three dimensions, there is a clear separation between the data. Run the SVM with the rbf kernel:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"clf = SVC(kernel='rbf')\n",
"clf.fit(X, y)\n",
"\n",
"plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='spring')\n",
"plot_svc_decision_function(clf)\n",
"plt.scatter(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1],\n",
" s=200, facecolors='none');"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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\n/QnC04jALAwJer2e06dPoNPp
"text": [
"<matplotlib.figure.Figure at 0x10f126090>"
]
}
],
"prompt_number": 23
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"SVM additional notes:\n",
"* When using an SVM you need to choose the right values for parameters such as c and gamma. Model validation can help to determine these optimal values by trial and error.\n",
"* SVMs run in O(n^3) performance. LinearSVC is scalable, SVC does not seem to be scalable. For large data sets try transforming the data to a smaller space and use LinearSVC with rbf."
]
}
],
"metadata": {}
}
]
}