绘制线性支持向量机(基于liblinear)的支持向量¶
与SVC(基于Libsvm)不同,LinearSVC(基于liblinear)不提供支持向量。 本示例演示了如何在LinearSVC中获得支持向量。
输入:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.svm import LinearSVC
X, y = make_blobs(n_samples=40, centers=2, random_state=0)
plt.figure(figsize=(10, 5))
for i, C in enumerate([1, 100]):
# "hinge"是支持向量机惯例使用的损失函数
clf = LinearSVC(C=C, loss="hinge", random_state=42).fit(X, y)
# 通过决策函数获得支持向量
decision_function = clf.decision_function(X)
# 我们也可以手动计算决策函数
# decision_function = np.dot(X, clf.coef_[0]) + clf.intercept_[0]
support_vector_indices = np.where((2 * y - 1) * decision_function <= 1)[0]
support_vectors = X[support_vector_indices]
plt.subplot(1, 2, i + 1)
plt.scatter(X[:, 0], X[:, 1], c=y, s=30, cmap=plt.cm.Paired)
ax = plt.gca()
xlim = ax.get_xlim()
ylim = ax.get_ylim()
xx, yy = np.meshgrid(np.linspace(xlim[0], xlim[1], 50),
np.linspace(ylim[0], ylim[1], 50))
Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contour(xx, yy, Z, colors='k', levels=[-1, 0, 1], alpha=0.5,
linestyles=['--', '-', '--'])
plt.scatter(support_vectors[:, 0], support_vectors[:, 1], s=100,
linewidth=1, facecolors='none', edgecolors='k')
plt.title("C=" + str(C))
plt.tight_layout()
plt.show()
脚本的总运行时间:(0分钟0.176秒)