簡體   English   中英

使用 Python 在 3 空間中繪制最大邊距超平面

[英]Plot maximum-margin hyperplane in 3-space with Python

我在 SVM 上發現了這個非常酷的筆記本:

https://github.com/jakevdp/sklearn_tutorial/blob/master/notebooks/03.1-Classification-SVMs.ipynb

但是有點沮喪,因為它沒有顯示如何在 3 空間中繪制最大邊距。 我已經盡力了,但不知道該怎么做……例如,我想將其繪制在以下表示中(取自筆記本):

在此處輸入圖片說明

此外,如果支持向量可以被包圍,它將會是頂部的雪利酒。

這是一個很好的問題,但是提供的筆記本實際上是在“撒謊”。 這不是內核的工作方式,雖然這種可視化很酷,但它不是“在 SVM 內部”發生的事情。 讓我們把這放在一邊,專注於如何在這個投影空間(不是RBF 投影空間)中繪制 3D 分離超平面。

您所要做的就是:

  1. 線性SVM 擬合到用於該圖的 3D 數據。
  2. 提取權重 (clf.coefs_) 和偏差 (clf.intercept_)
  3. 用法線 (clf.coefs_) 和距原點的距離 (clf.intercept_) 繪制 3d 超平面
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()

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM