SVM 决策边界绘图中的错误

Posted

技术标签:

【中文标题】SVM 决策边界绘图中的错误【英文标题】:Error in SVM decision boundaries plotting 【发布时间】:2019-09-07 08:42:36 【问题描述】:

我正在尝试模仿我在 Kaggle 上找到的关于绘制 SVM 决策边界的代码。我正在使用我自己的数据集,其中包含 608 个数据和 10 个特征,有 2 个类。例如,这两个类别是您是否患有糖尿病。我复制了此链接上代码的 SVM 部分(当您在底部向下滚动时可以找到该代码),其中提到了决策边界可视化。 Here's the link to my reference.

但是,我收到此错误消息,说“X 必须是 Numpy 数组”。谁能给我解释一下这是什么意思?

下面的代码是我所做的。请注意,我的数据集已预先标准化。另外,我将数据分成 70:30 的比例。

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import matplotlib.pyplot as show
import matplotlib as cm
import matplotlib.colors as colors
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn import svm
from mlxtend.plotting import plot_decision_regions


autism = pd.read_csv('diabetec.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)

t = np.array(y_train)
t = t.astype(np.integer)
clf_svm = SVC(C=1.3, gamma=0.8, kernel='rbf')
clf_svm.fit(x_train, t)
plt.figure(figsize=[15,10])
plot_decision_regions(x_train, t, clf = clf_svm, hide_spines = False, colors = 'purple,limegreen', markers = ['x','o'])
plt.title('Support Vector Machine')

【问题讨论】:

您能否提供一些额外的信息:错误发生在哪个函数中,您的数据样本(几行以获得正确的格式)。 它说错误在我声明“x”变量的第 16 行。你可以在这里查看我的完整代码和文件github.com/falady/svm_classification.git 是的,您需要将 x 和 y 设置为 np 数组,一切都应该可以正常工作。 @DaveIdito 这是否意味着我需要设置,例如,y 为 y = np.autism['TARGET']? 我认为将这两行设置为 x = np.array(autism.drop(['TARGET'], axis=1)) 与 y = np.array(autism['TARGET' ]) 将解决问题。另外,你在哪一行得到错误? 【参考方案1】:

plot_decision_regions 需要一个 numpy 数组,但 x_train 是一个 pandas 数据框。试试x_train.values,即

plot_decision_regions(x_train.values, t, clf = clf_svm, ...

【讨论】:

它说'numpy.ndarray'对象没有属性'values' 对不起,只是 x_train.values,并保留t。我在您的代码中看到 t 已经是一个 numpy 数组。 我认为问题只出在 x 声明上,因为我已经使用 numpy.array 声明了“y”。不,我仍然得到与我评论过的相同的错误。 我注意到当我尝试将 .values 添加到 x_train 时,出现了 'filler_feature_values='。我应该首先声明任何价值观吗? fill_feature_values 有什么作用?

以上是关于SVM 决策边界绘图中的错误的主要内容,如果未能解决你的问题,请参考以下文章

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

无法理解 SVM 和 LR 中决策边界的绘制

如何在 libsvm 中绘制 4 维虹膜数据的决策边界?

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

使用 scikit-learn 线性 SVM 提取决策边界

绘图错误,使用 svm 时缺少公式