簡體   English   中英

非線性決策邊界支持向量機

[英]Non Linear Decision boundary SVM

我需要你們幫助找到非線性決策邊界。 我有 2 個帶有數值數據的特征,我做了一個簡單的線性決策邊界(見下圖)我現在的決策邊界

現在問題是我希望我的紅線看起來像黑線:我想要什么

我用來繪制紅線的“方程式”是:

# x and y not related to the dataset, those variables are only for plotting the red line
# mdl is my model

x = np.linspace(0.6, -0.6) 
y = -(mdl.coef_[0][0] / mdl.coef_[0][1]) * x - mdl.intercept_ / mdl.coef_[0][1]

model 是 SVM,我執行了 GridSearchCV 並得到了最佳估計器。 我使用線性 kernel 來獲取模型系數和截距。

如果需要,我可以在等式中添加第三個維度。 我的 df 中有很多可用的列。 我只保留了 2 個最重要的(我是通過查看模型的特征重要性得到的)。

最好的事情是,如果我可以有一個方程來繪制決策邊界,並且可以包含在我的數據集中,並且可以用作“制裁”,就像方程制裁的結果高於 0 一樣,樣本的目標為 1,否則為 0。

像這樣(我用另一個 model 制作的東西,但用於 3D 情節):

# Equation sanction that goes into my dataset
df['sanction'] = df.widthS63R04 * model.coef_[0][0] + df.chordS67R04 * model.coef_[0][1] + df.chordS71R04 * model.coef_[0][2]

#Equation for 3D Hyperplane
tmp = np.linspace(-5,5,30)
x,y = np.meshgrid(tmp,tmp)
z = lambda x,y: (-mdl.intercept_[0]-mdl.coef_[0][0]*x -mdl.coef_[0][1]*y) / mdl.coef_[0][2]
# lambda usage for 3d surface hyperplane
ax.plot_surface(x, y, z(x, y))

支持向量機-SVM-/內核技巧 SVM.ipynb

zero_one_colourmap = ListedColormap(('blue', 'red'))
def plot_decision_boundary(X, y, clf):
    X_set, y_set = X, y
    X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, 
                             stop = X_set[:, 0].max() + 1, 
                             step = 0.01),
                   np.arange(start = X_set[:, 1].min() - 1, 
                             stop = X_set[:, 1].max() + 1, 
                             step = 0.01))

plt.contourf(X1, X2, clf.predict(np.array([X1.ravel(), 
                                         X2.ravel()]).T).reshape(X1.shape),
           alpha = 0.75, 
           cmap = zero_one_colourmap)
plt.xlim(X1.min(), X1.max())
plt.ylim(X2.min(), X2.max())
for i, j in enumerate(np.unique(y_set)):
    plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],
            c = (zero_one_colourmap)(i), label = j)
plt.title('SVM Decision Boundary')
plt.xlabel('X1')
plt.ylabel('X2')
plt.legend()
return plt.show()

暫無
暫無

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

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