Ошибка при нахождении опорных векторов

Пытаюсь найти опорные вектора. Но почему то у меня появляется ошибка:

Traceback (most recent call last):
  File "F:\machine lerning\week_3\main.py", line 13, in <module>
clf.support_
AttributeError: 'SVC' object has no attribute 'support_'

Я вижу, что он выдает о том, что нет такого атрибута, но в документации по данной библиотеке он описан. https://scikit-learn.org/stable/modules/svm.html Вот мой код:

import pandas
from sklearn import svm
from sklearn.svm import SVC

data = pandas.read_csv('svm-data.csv', header=None)

x = data.iloc[0]
y = data.iloc[:,1]

clf = SVC(C=100000, kernel='linear', random_state=241)
clf.fit = (y, x)

print(clf.support_)

А это данные, по которым происходит обучение:

   0.0   0.7  0.29
0  1.0  0.23  0.55
1  0.0  0.72  0.42
2  0.0  0.98  0.68
3  0.0  0.48  0.39
4  1.0  0.34  0.73
5  0.0  0.44  0.06
6  1.0  0.40  0.74
7  0.0  0.18  0.18
8  1.0  0.53  0.53

Ответы (1 шт):

Автор решения: CrazyElf

Как говорилось в старом "политическом" анекдоте про сантехника: "Да тут всю систему менять надо!"

from sklearn.svm import SVC

SVC - это классификатор, а у вас данные непрерывные, а не дискретные, так что нужно воспользоваться регрессором:

from sklearn.svm import SVR

Далее. Что это такое?

x = data.iloc[0]
y = data.iloc[:,1]

Вам уже объясняли в другом вопросе, как должны выглядеть срезы для x и y. И для полной аутентичности добавлю, что X должен быть с большой буквы, потому что X - это матрица значений, а y - это вектор. Матрицы принято называть большими буквами:

X = data.iloc[:,:2] # столбцы 0 и 1
y = data.iloc[:,2] # столбец 2

Смотрим далее:

clf = SVC(C=100000, kernel='linear', random_state=241)

Как я уже сказал - будем использовать регрессор. И параметра random_state там нет:

clf = SVR(C=100000, kernel='linear')

Далее. Что это?!

clf.fit = (y, x)

Вы присваиваете полю fit модели clf кортеж (y, x). Это явно не то, что вам требовалось. Кормить модель данными нужно так:

clf.fit(X, y)

И вот уже после этого можете печатать support_, теперь он в модели есть:

print(clf.support_)

Дополнение "по вновь открывшимся обстоятельствам".

Целевая колонка у автора вопроса самая первая, и как можно видеть, она на самом деле целочисленная, хоть и представлена в виде с плавающей точкой. В таком случае можно использовать SVCrandom_state), но нужно опять же правильно подготовить данные. Например, так:

X = data.iloc[:,1:] # колонки 1, 2
y = data.iloc[:,0].astype(int) # колонка 0, приведённая к int

Остальной код тогда можно использовать ваш, ну, за исключением, конечно, тренировки модели:

clf.fit(X, y)
→ Ссылка