SVM-график для нелинейной границы решения - PullRequest
2 голосов
/ 20 апреля 2019

Я пытаюсь построить границу решения 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 можно найти здесь вестии.csv

1 Ответ

2 голосов
/ 20 апреля 2019

Вы звучите немного смущенно ...

Ваш 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, как вы необъяснимо пытаетесь сделать здесь ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...