簡體   English   中英

如何 plot 支持向量機超平面只有一個功能

[英]How to plot svm hyperplane with only one feature

我有一個具有一個特征的數據集,我正在使用 scikit-learn 訓練一個支持向量分類器。 我想可視化結果,但我對如何 plot 分散有點困惑。 我通過執行以下操作來獲得我的超平面:

slope = clf.coef_[0][0]
intercept = clf.intercept_[0]

這給了我 y = -.01x + 2.5

我假設這是我的超平面。 我似乎無法弄清楚如何 plot 我的數據只有一個功能。 我的 y 軸將使用什么?

這是一個有趣的問題。 從表面上看,它非常簡單——一個特征意味着一維,因此超平面必須是 0 維,即一個點。 然而 scikit-learn 給你的是一條線。 所以問題實際上是如何把這條線變成一個點。

我花了大約一個小時在 scikit-learn 的文檔中尋找答案,但是一維 SVM 分類器根本沒有任何內容(可能是因為它們不實用)。 所以我決定用下面的示例代碼來看看我是否能找出答案:

from sklearn import svm

n_samples = 100
X = np.concatenate([np.random.normal(0,0.1,n_samples), np.random.normal(10,0.1,n_samples)]).reshape(-1,1)
y = np.array([0]*n_samples+[1]*n_samples)
clf = svm.LinearSVC(max_iter = 10000)
clf.fit(X,y)  
slope = clf.coef_
intercept = clf.intercept_
print(slope, intercept)
print(-intercept/slope)

X是樣本數組,前 100 個點從 N(0,0.1) 中采樣,接下來的 100 個點從 N(10,0.1) 中采樣。 y是標簽數組(100 個 class '0' 和 100 個 class '1')。 直觀上很明顯,超平面應該在 0 到 10 之間。

擬合分類器后,您會發現截距約為 -0.96,這與 0-d 超平面(即一個點)應該在的位置相去甚遠。 但是,如果您取y=0並反算x ,它將非常接近 5。現在嘗試更改構成 X 的分布的均值,您會發現答案始終是-intercept/slope 那是分類器的 0-d 超平面(點)。

因此,為了可視化,您只需要將數據 plot 放在數軸上(對類使用不同的顏色),然后 plot 通過將負截距除以斜率獲得的邊界。 我不確定如何將 plot 設置為數軸,但您始終可以使用散點圖 plot 並將所有y坐標設置為 0。

暫無
暫無

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

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