Как исправить «ошибку типа: в скалярный индекс можно преобразовать только целочисленные скалярные массивы» при тестировании разделенных данных и обучении классификации текста - PullRequest
2 голосов
/ 27 апреля 2019

Я хочу создать программу для классификации текстовых данных с использованием SVM. но перед этим я должен разделить данные на данные поезда и проверить данные с помощью StratifiedKFold ().

Но это закончилось этой ошибкой:

'Traceback (most recent call last):
  File "C:\Users\Administrator\PycharmProjects\untitled1\main.py", line 115, in <module>
     y_train, y_test = labels[train_index], labels[test_index]
TypeError: only integer scalar arrays can be converted to a scalar index'

Как решить эту ошибку в этом коде?

Это код, работающий на Python 3.7

labels = []
label_np = np.array(labels)

with open(path, encoding='utf-8') as in_file:
    data = csv.reader(in_file)
    for line in data:
        label_ = np.append(label_np, line)

model = SVC(kernel='linear')
total_svm = []
total_mat_svm = np.zeros((2,2))

kf = StratifiedKFold(n_splits=3)
kf.get_n_splits(result_preprocess, label_)

for train_index, test_index in kf.split(result_preprocess, label_):
    # print('Train : ', test_index, 'Test : ', test_index)
    x_train, x_test = result_preprocess[train_index], result_preprocess[test_index]
    y_train, y_test = label_[train_index], label_[test_index]

vectorizer = TfidfVectorizer(min_df=5,
                             max_df=0.8,
                             sublinear_tf=True,
                             use_idf=True)
train_vector = vectorizer.fit_transform(x_train)
test_vector = vectorizer.transform(x_test)

model.fit(x_train, y_train)
hasil_svm = model.predict(x_test)

total_mat_svm = total_mat_svm + confusion_matrix(y_test, hasil_svm)
total_svm = total_mat_svm + sum(y_test==hasil_svm)

print(total_mat_svm)

Я ожидаю, что результатом будет классификация и путаница в классификации.

1 Ответ

1 голос
/ 28 апреля 2019

Пожалуйста, посмотрите этот ответ: numpy array TypeError: только скалярные массивы могут быть преобразованы в скалярный индекс

Я подозреваю, что не только result_preprocess, но и labelsсписок в вашем конвейере данных.В таком случае решение состоит в том, чтобы просто преобразовать labels в массив NumPy перед запуском своего фрагмента кода:

import numpy as np
labels = np.array(labels)
...