我试图绘制支持向量机决策边界,该边界将癌性和非癌性两个类别分开。但是,它显示的情节与我想要的相去甚远。我希望它看起来像这样:
或任何显示这些点的东西都是分散的。这是我的代码:
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()
但是我有一个奇怪的情节:
您可以在predictions.csv处找到csv文件
最佳答案
你听起来有点困惑...
您的predictions.csv
看起来像:
TARGET Predictions
1 0
0 0
0 0
0 0
而且,正如我猜想的那样,列名称暗示着它包含基本事实(
TARGET
)和某些(?)模型的Predictions
已经运行。鉴于此,您在已发布代码中所做的工作完全没有任何意义:您将这两个列都用作
X
中的功能,以便预测您的y
,这恰恰是其中之一列(Predictions
),已经包含在您的X
中...您的图看起来“奇怪”,仅仅是因为您绘制的不是您的数据点,并且此处显示的
X
和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
而不是从predictions.csv
读取功能和标签,因为您莫名其妙地尝试在此处进行操作...