我在SVM上找到了这个非常酷的笔记本:
https://github.com/jakevdp/sklearn_tutorial/blob/master/notebooks/03.1-Classification-SVMs.ipynb
但有点沮丧'因为它没有显示如何绘制3空间的最大边距。我已经尽了最大努力,但对于如何做到这一点毫无头绪......例如,我想将它绘制在下面的代表中(取自笔记本):
此外,如果可以包围支持向量,那将是顶部的雪利酒。
答案 0 :(得分:2)
这是一个非常好的问题,但提供的笔记本实际上是“撒谎”#34;这不是内核的工作方式,虽然这种可视化很酷,但它并不是在SVM"内部发生的事情。让我们把它放在一边,重点关注如何在这个投影空间中绘制3D分离超平面(不是 RBF投影空间)。
您所要做的就是:
答案 1 :(得分:0)
import numpy as np
from sklearn.svm import SVC
from sklearn.datasets import make_circles
X_1_2, y = make_circles(100, factor = .1, noise=.1)
X_3 = np.exp(-(X_1_2[:,0] ** 2 + X_1_2[:,1] ** 2))
X = np.insert(X_1_2, 2, X_3, axis=1)
clf = SVC(kernel='linear').fit(X,y)
w = clf.coef_
w1 = w [:, 0]
w2 = w [:, 1]
w3 = w [:, 2]
b = clf.intercept_
sv = clf.support_vectors_
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
xx, yy = np.meshgrid(range(-1,2), range(-1,2))
zz = (-w1 * xx - w2 * yy - b) * 1. /w3
%matplotlib notebook
plt3d = plt.subplot(projection='3d')
plt3d.plot_wireframe(xx, yy, zz, rstride=1, cstride=1, color='purple')
plt3d.scatter3D(X[:, 0], X[:, 1], X[:, 2], c=y, s=50, cmap='winter')
plt3d.scatter3D(sv[:, 0], sv[:, 1], sv[:, 2], s=150)
plt.show()