Подготовка данных для обучения модели по методу опорных векторов
Пытаюсь подготовить данные к обучению по методу опорных векторов, но почему-то появляется следующая ошибка:
Traceback (most recent call last):
File "D:/mashin_learn/3_week/main.py", line 8, in <module>
y = data[:1,:]
File "D:\mashin_learn\3_week\venv\lib\site-packages\pandas\core\frame.py", line 3024, in __getitem__
indexer = self.columns.get_loc(key)
File "D:\mashin_learn\3_week\venv\lib\site-packages\pandas\core\indexes\base.py", line 3080, in get_loc
return self._engine.get_loc(casted_key)
File "pandas\_libs\index.pyx", line 70, in pandas._libs.index.IndexEngine.get_loc
File "pandas\_libs\index.pyx", line 75, in pandas._libs.index.IndexEngine.get_loc
TypeError: '(slice(None, 1, None), slice(None, None, None))' is an invalid key
Вот данные с которыми я работаю:
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
А это код:
import pandas
import pandas as pd
from sklearn.svm import SVC
data = pandas.read_csv('svm-data.csv')
print(data)
x = data[:0]
y = data[:1,:]
Не могли бы вы подсказать, что я не так делаю и где можно посмотреть необходимую документацию?
Ответы (3 шт):
Ошибку TypeError: '(slice(None, 1, None), slice(None, None, None))' is an invalid key вызывает строка:
y = data[:1,:]
Если вы имеете ввиду срез без заголовка, попробуйте:
y = data[1:]
Судя по примеру данных из вопроса, в вашем CSV файле отсутствует строка с наименованиями столбцов.
pd.read_csv() по умолчанию использует первую строку CSV файла как строку с наименованиями столбцов. В вашем случае стоит воспользоваться параметром header=None:
data = pd.read_csv('svm-data.csv', header=None)
тогда DataFrame будеи выглядеть так (обратите внимание на названия столбцов):
0 1 2
0 0.0 0.70 0.29
1 1.0 0.23 0.55
2 0.0 0.72 0.42
3 0.0 0.98 0.68
4 0.0 0.48 0.39
5 1.0 0.34 0.73
6 0.0 0.44 0.06
7 1.0 0.40 0.74
8 0.0 0.18 0.18
9 1.0 0.53 0.53
после этого к столбцам можно обращаться по наименованиям - data[0], data[1], etc.
Вторая ошибка в том, что вы неправильно обращаетесь к столбцам по их порядковому номеру - правильно это делается так:
y = data.iloc[:, 0] # первый столбец
или так:
y = data.iloc[:, -1] # последний столбец
Во-первых у вас похоже первая строка данных попала в заголовок таблицы. Это лечится с помощью задания ключей при чтении csv, возможно вам нужно указать header=None.
Во-вторых, вы что-то странное пытаетесь получить в x и y. Скорее всего вам в x нужны все колонки кроме последней, а в y - последняя колонка. Тогда это можно сделать так:
x = data.iloc[:,:2]
y = data.iloc[:,2]
Обязательно нужно использовать .iloc, если вы делаете срезы по абсолютным номерам колонок/строк. И первая компонента среза отвечает за строки (я задал, что нужны все строки с помощью :), вторая компонента - за столбцы (соответственно, в x попадут все столбцы с 0 до 1, а в y - столбец 2).