Неправильная входная форма SVM

Я создал набор данных, а затем разделил свои данные на обучающие и тестовые наборы.

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size = 0.20)

Когда я попытался реализовать классификатор SVM с помощью кода ниже:

from sklearn.svm import SVC
svc_classifier = SVC(kernel='rbf')
svc_classifier.fit(X_train, y_train)

X_train.shape и y_train.shape оба (160,2). Когда я запускаю последнюю часть, я получаю ошибку ValueError: неверная форма ввода (160, 2). Я знаю, что мои тренировочные и тестовые образцы должны быть одинакового размера. Но мне интересно, есть ли способ справиться с этой проблемой. Благодарю вас!


person imageprocessingproblem    schedule 01.01.2021    source источник
comment
Вы пытаетесь использовать классификатор для прогнозирования непрерывной цели. Этого не может быть. Возможно, вас заинтересует буква Y формы (160,1) или (160,) с целыми числами, скажем, тремя значениями 0,1,2.   -  person Gaussian Prior    schedule 01.01.2021
comment
@GaussianPrior, что бы вы посоветовали в этой ситуации?   -  person imageprocessingproblem    schedule 01.01.2021
comment
Я вижу, что это продолжение проблемы, о которой вы писали некоторое время назад. Этот coe имеет имена X и Y, но они, очевидно, не представляют данные обучения и метки, потому что оба они являются вашими данными обучения. Вам нужно создать массив меток Y отдельно.   -  person Ananda    schedule 01.01.2021


Ответы (1)


Это код, который вы хотите -

import numpy as np
import matplotlib.pyplot as plt

from sklearn.model_selection import train_test_split
from sklearn.svm import SVC

std = [[0.5, 0], [0, 0.5]]
X1 = np.vstack((
    np.random.multivariate_normal([2, -2], std, size=200),
    np.random.multivariate_normal([-2, 2], std, size=200)
))
y1 = np.zeros(X1.shape[0])

X2 = np.vstack((
    np.random.multivariate_normal([2, 2], std, size=200),
    np.random.multivariate_normal([-2, -2], std, size=200)
))
y2 = np.ones(X2.shape[0])

X = np.vstack((X1, X2))
y = np.hstack((y1, y2))

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.20)
svc_classifier = SVC(kernel='rbf', gamma='auto')
svc_classifier.fit(X_train, y_train)

Исходный код, который вы используете для создания своих данных, имеет только имя Y. Он не должен представлять ярлыки. Метки нужно создавать отдельно.

person Ananda    schedule 01.01.2021
comment
Я просто пробовал решение, которое вы предложили в комментарии @Ananda, и оно сработало отлично, спасибо, что поделились кодом! - person imageprocessingproblem; 01.01.2021
comment
Как вы думаете, как я могу построить набор данных, чтобы визуализировать его в двух разных цветах? @Ананда - person imageprocessingproblem; 01.01.2021
comment
Вам нужно будет построить X1 и X2 отдельно. Или вам нужно разделить их на основе их метки Ys. - person Ananda; 01.01.2021