非线性决策边界的SVM图

时间:2019-04-20 12:14:48

标签: python-3.x machine-learning scikit-learn 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

您可以在predictions.csv

中找到csv文件

1 个答案:

答案 0 :(得分:2)

您听起来有点困惑...

您的predictions.csv如下:

TARGET  Predictions
     1  0
     0  0
     0  0
     0  0

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

鉴于此,您在已发布的代码中所做的工作完全是毫无意义:您将这两列都用作X中的功能,以便预测{{ 1}},恰好是您的y中已经包含的同一列(Predictions)之一...

您的图看起来“奇怪”,仅是因为您绘制的内容是不是您的数据点,并且您在此处显示的XX数据不是 用于拟合分类器的数据。

我进一步感到困惑,因为在您的链接回购中,您的脚本中确实具有正确的过程:

y

即从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读取不是,因为您莫名其妙地尝试在此处进行操作...