Как решить ValueError: неправильная форма ввода (11, 11)? - PullRequest
0 голосов
/ 16 марта 2019

Я новичок в Python и машинном обучении. Я нашел проект онлайн, который включает в себя и Arduino, и Python, и я решил попробовать. Ссылка на github проекта: здесь кстати. Часть Arduino уже функционирует, и я уже могу записывать данные в CSV-файлы. Я пытаюсь вставить данные из файла CSV в обучение в SVM. Тем не менее, я не могу пройти учебную часть. Код выглядит следующим образом.

import numpy as np
import csv
from sklearn import svm
from sklearn.metrics import accuracy_score
from sklearn.metrics import confusion_matrix
import pandas as pd
dataframe= pd.read_csv("csvdata.csv", delimiter=',')

from sklearn.model_selection import train_test_split
train, test = train_test_split(df, test_size = 0.2)

train_features = train[['LABEL','F1','F2','F3','F4','F5','X','Y','Z','C1','C2']]
train_label = train.values

test_features = test[['LABEL','F1','F2','F3','F4','F5','X','Y','Z','C1','C2']]
test_label = test.values

## SVM
model = svm.SVC(kernel='linear', gamma=1, C=1)
model.fit(train_features, train_label)

Всякий раз, когда я запускаю код, я сталкиваюсь с этой ошибкой в ​​последней строке:

Traceback (most recent call last):
  File "C:\Python27\projects\practice\modeling.py", line 32, in <module>
    model.fit(train_features, train_label)
  File "C:\Python27\lib\site-packages\sklearn\svm\base.py", line 149, in fit
    accept_large_sparse=False)
  File "C:\Python27\lib\site-packages\sklearn\utils\validation.py", line 761, in check_X_y
    y = column_or_1d(y, warn=True)
  File "C:\Python27\lib\site-packages\sklearn\utils\validation.py", line 797, in column_or_1d
    raise ValueError("bad input shape {0}".format(shape))
ValueError: bad input shape (11, 11)

Я действительно смущен, я не знаю, что делать дальше. Я понятия не имею, как работает ярлыки, функции и обучение через CSV. Я изучал обучение путем ручной вставки данных в скрипт Python, и они работают, но я не нашел решения в обучении из CSV.

вот содержимое файла csv

F1,F2,F3,F4,F5,X,Y,Z,C1,C2

525, 505, 544, 557, 545, 1268, -8264, 14888, 1, 1

523, 505, 544, 557, 545, 1480, -8320, 14684, 1, 1

517, 505, 544, 557, 544, 1460, -8352, 14712, 1, 1

524, 505, 544, 557, 545, 1436, -8312, 14496, 1, 1

568, 506, 544, 557, 544, 1308, -8348, 14744, 1, 1

578, 506, 544, 557, 544, 1128, -8484, 14376, 1, 1

583, 506, 544, 557, 545, 1376, -8180, 14768, 1, 1

583, 505, 544, 557, 545, 1380, -8220, 14636, 1, 1

550, 505, 544, 557, 544, 1332, -8376, 14700, 1, 1

510, 505, 544, 557, 545, 1412, -8320, 14620, 1, 1

510, 505, 544, 557, 545, 1412, -8320, 14620, 1, 1

510, 505, 544, 557, 545, 1412, -8320, 14620, 1, 1

Надеюсь, кто-нибудь мог помочь, прошли недели, и я хочу это выяснить. Спасибо.

1 Ответ

1 голос
/ 16 марта 2019

В вашем model.fit вы должны передать функции и метки; но как и (train_label = train.values), вы в конечном итоге видите, что ваши функции и ярлыки - это одно и то же. Ожидается, что ваши ярлыки будут одномерными (вы можете увидеть y = column_or_1d в сообщении об ошибке), и, конечно, не часть ваших функций.

Вы должны изменить определения функций и меток следующим образом:

train_features = train[['F1','F2','F3','F4','F5','X','Y','Z','C1','C2']]
train_label = train['LABEL']

test_features = test[['F1','F2','F3','F4','F5','X','Y','Z','C1','C2']]
test_label = test['LABEL']

А если ваш model.fit не работает как есть, попробуйте:

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