76 lines
1.7 KiB
Python
76 lines
1.7 KiB
Python
"""
|
|
================================
|
|
SVM Exercise
|
|
================================
|
|
|
|
A tutorial exercise for using different SVM kernels.
|
|
|
|
This exercise is used in the :ref:`using_kernels_tut` part of the
|
|
:ref:`supervised_learning_tut` section of the :ref:`stat_learn_tut_index`.
|
|
|
|
"""
|
|
|
|
import matplotlib.pyplot as plt
|
|
import numpy as np
|
|
|
|
from sklearn import datasets, svm
|
|
|
|
iris = datasets.load_iris()
|
|
X = iris.data
|
|
y = iris.target
|
|
|
|
X = X[y != 0, :2]
|
|
y = y[y != 0]
|
|
|
|
n_sample = len(X)
|
|
|
|
np.random.seed(0)
|
|
order = np.random.permutation(n_sample)
|
|
X = X[order]
|
|
y = y[order].astype(float)
|
|
|
|
X_train = X[: int(0.9 * n_sample)]
|
|
y_train = y[: int(0.9 * n_sample)]
|
|
X_test = X[int(0.9 * n_sample) :]
|
|
y_test = y[int(0.9 * n_sample) :]
|
|
|
|
# fit the model
|
|
for kernel in ("linear", "rbf", "poly"):
|
|
clf = svm.SVC(kernel=kernel, gamma=10)
|
|
clf.fit(X_train, y_train)
|
|
|
|
plt.figure()
|
|
plt.clf()
|
|
plt.scatter(
|
|
X[:, 0], X[:, 1], c=y, zorder=10, cmap=plt.cm.Paired, edgecolor="k", s=20
|
|
)
|
|
|
|
# Circle out the test data
|
|
plt.scatter(
|
|
X_test[:, 0], X_test[:, 1], s=80, facecolors="none", zorder=10, edgecolor="k"
|
|
)
|
|
|
|
plt.axis("tight")
|
|
x_min = X[:, 0].min()
|
|
x_max = X[:, 0].max()
|
|
y_min = X[:, 1].min()
|
|
y_max = X[:, 1].max()
|
|
|
|
XX, YY = np.mgrid[x_min:x_max:200j, y_min:y_max:200j]
|
|
Z = clf.decision_function(np.c_[XX.ravel(), YY.ravel()])
|
|
|
|
# Put the result into a color plot
|
|
Z = Z.reshape(XX.shape)
|
|
plt.pcolormesh(XX, YY, Z > 0, cmap=plt.cm.Paired)
|
|
plt.contour(
|
|
XX,
|
|
YY,
|
|
Z,
|
|
colors=["k", "k", "k"],
|
|
linestyles=["--", "-", "--"],
|
|
levels=[-0.5, 0, 0.5],
|
|
)
|
|
|
|
plt.title(kernel)
|
|
plt.show()
|