用于非线性决策边界的SVM图

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用于非线性决策边界的SVM图相关的知识,希望对你有一定的参考价值。

我试图绘制SVM决策边界,它分隔两个类,癌症和非癌症。然而,它显示的图表远非我想要的。我希望它看起来像这样:

enter image description here或任何显示积分的东西都是分散的。这是我的代码:

import numpy as np
import pandas as pd
from sklearn import svm
from mlxtend.plotting import plot_decision_regions
import matplotlib.pyplot as plt

autism = pd.read_csv('predictions.csv')


# Fit Support Vector Machine Classifier
X = autism[['TARGET','Predictions']]
y = autism['Predictions']

clf = svm.SVC(C=1.0, kernel='rbf', gamma=0.8)
clf.fit(X.values, y.values) 

# Plot Decision Region using mlxtend's awesome plotting function
plot_decision_regions(X=X.values, 
                      y=y.values,
                      clf=clf, 
                      legend=2)

# Update plot object with X/Y axis labels and Figure Title
plt.xlabel(X.columns[0], size=14)
plt.ylabel(X.columns[1], size=14)
plt.title('SVM Decision Region Boundary', size=16)
plt.show()

但我有一个奇怪的情节:

enter image description here

你可以在这里找到csv文件predictions.csv

答案

你听起来有点困惑......

你的predictions.csv看起来像:

TARGET  Predictions
     1  0
     0  0
     0  0
     0  0

而且,正如我猜列名称所暗示的那样,它包含了基本事实(TARGET)和某些(?)模型的Predictions已经运行。

鉴于此,你在发布的代码中所做的事情完全没有任何意义:你在X中使用这两个列作为特征来预测你的y,这正是......这些列中的一个(Predictions) ,已经包含在你的X ......

您的绘图看起来很“奇怪”,因为您绘制的内容不是您的数据点,此处显示的Xy数据不是应该用于拟合分类器的数据。

我进一步感到困惑,因为在您的链接仓库中,您的脚本中确实存在正确的过程:

autism = pd.read_csv('10-features-uns.csv')

x = autism.drop(['TARGET'], axis = 1)  
y = autism['TARGET']
x_train, X_test, y_train, y_test = train_test_split(x, y, test_size = 0.30, random_state=1)

即从10-features-uns.csv读取你的特征和标签,当然不是来自predictions.csv,因为你莫名其妙地想在这里做...

以上是关于用于非线性决策边界的SVM图的主要内容,如果未能解决你的问题,请参考以下文章

从线性 SVM 绘制 3D 决策边界

用于测试非线性 SVM 的数据集

渣本的机器学习---SVM

菜菜的sklearn课堂笔记支持向量机-线性SVM决策过程的可视化

SVM 与 LR的异同

绘制scikit-learn(sklearn)SVM决策边界/表面