Jupyter Snippet CB2nd 05_svm

Jupyter Snippet CB2nd 05_svm

8.5. Using support vector machines for classification tasks

``````import numpy as np
import pandas as pd
import sklearn
import sklearn.datasets as ds
import sklearn.model_selection as ms
import sklearn.svm as svm
import matplotlib.pyplot as plt
%matplotlib inline
``````
``````X = np.random.randn(200, 2)
y = X[:, 0] + X[:, 1] > 1
``````
``````# We train the classifier.
est = svm.LinearSVC()
est.fit(X, y)
``````
``````# We generate a grid in the square [-3,3 ]^2.
xx, yy = np.meshgrid(np.linspace(-3, 3, 500),
np.linspace(-3, 3, 500))

# This function takes a SVM estimator as input.

def plot_decision_function(est, title):
# We evaluate the decision function on the grid.
Z = est.decision_function(np.c_[xx.ravel(),
yy.ravel()])
Z = Z.reshape(xx.shape)
cmap = plt.cm.Blues

# We display the decision function on the grid.
fig, ax = plt.subplots(1, 1, figsize=(5, 5))
ax.imshow(Z,
extent=(xx.min(), xx.max(),
yy.min(), yy.max()),
aspect='auto',
origin='lower',
cmap=cmap)

# We display the boundaries.
ax.contour(xx, yy, Z, levels=[0],
linewidths=2,
colors='k')

# We display the points with their true labels.
ax.scatter(X[:, 0], X[:, 1],
s=50, c=.5 + .5 * y,
edgecolors='k',
lw=1, cmap=cmap,
vmin=0, vmax=1)
ax.axhline(0, color='k', ls='--')
ax.axvline(0, color='k', ls='--')
ax.axis([-3, 3, -3, 3])
ax.set_axis_off()
ax.set_title(title)
``````
``````ax = plot_decision_function(
est, "Linearly separable, linear SVC")
``````

``````y = np.logical_xor(X[:, 0] > 0, X[:, 1] > 0)

# We train the classifier.
est = ms.GridSearchCV(svm.LinearSVC(),
{'C': np.logspace(-3., 3., 10)})
est.fit(X, y)
print("Score: {0:.1f}".format(
ms.cross_val_score(est, X, y).mean()))

# We plot the decision function.
ax = plot_decision_function(
est, "XOR, linear SVC")
``````
``````Score: 0.5
``````

``````y = np.logical_xor(X[:, 0] > 0, X[:, 1] > 0)

est = ms.GridSearchCV(
svm.SVC(), {'C': np.logspace(-3., 3., 10),
'gamma': np.logspace(-3., 3., 10)})
est.fit(X, y)
print("Score: {0:.3f}".format(
ms.cross_val_score(est, X, y).mean()))

plot_decision_function(
est.best_estimator_, "XOR, non-linear SVC")
``````
``````Score: 0.955
``````