KNeighborsClassifier предсказывает выдачу «Ожидаемый 2D-массив, вместо этого получен 1D-массив» [дубликат]Python

Программы на Python
Ответить
Anonymous
 KNeighborsClassifier предсказывает выдачу «Ожидаемый 2D-массив, вместо этого получен 1D-массив» [дубликат]

Сообщение Anonymous »

Я пишу алгоритм сходства изображений. Я использую cv2.calcHist для извлечения функций изображения. После создания объектов я сохраняю их в файл json в виде списка numpy.float64:

Код: Выделить всё

list(numpy.float64(features))
, это встраивание многомерного вектора.
На втором этапе я загружаю данные из своего json и готовлю их для sklearn KNeighborsClassifier.

Код: Выделить всё

import numpy as np
import json
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics.pairwise import cosine_similarity

with open('data.json') as f:
jsonData = json.load(f)

X = []
y = []

for image in jsonData['images']:
embeddingData = image['histogram']
X.append(embeddingData)
y.append(image['classification'])

X = np.array(X)
y = np.array(y)

#split dataset into train and test data
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1, stratify=y)

# Create KNN classifier
knn = KNeighborsClassifier(n_neighbors = 1, metric=cosine_similarity)
# Fit the classifier to the data
knn.fit(X_train, y_train)

#show predictions on the test data
y_pred = knn.predict(X_test)
Когда я запускаю этот код, я получаю следующую ошибку:

Код: Выделить всё

ValueError: Expected 2D array, got 1D array instead:
array=[ 0.11370714  0.98112816  0.02894755 ...  0.45731446  0.69443637
-0.04033618].
Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if iReshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.
Я попробовал воспользоваться предложением по изменению формы, и меня это сработало

Код: Выделить всё

ValueError: X has 1 features, but KNeighborsClassifier is expecting 4608 features as input.
4608 — это размеры моих функций.
Сначала я попробовал немного другой подход, основанный на примере KNN, на котором они обучали свою модель набор данных радужной оболочки глаза, но там knn.fit не принял обучающие данные с той же ошибкой значения 2D/1D. Затем я нашел этот пример в pyimagesearch, и это примерно то, что я хочу сделать, за исключением того, что у меня есть один промежуточный шаг с файлом json. Однако в моем случае json необходим, потому что я хочу добавить другие вложения позже и не хочу все пересчитывать.
Я не понимаю, почему knn.fit принимает данные из X_train , но knn.predict не принимает данные из X_test, которые были получены таким же образом. Почему ошибка исправлена ​​для одного случая, а не для другого?
Изменить:
Я уже пробовал предложенные решения из этого, этого и этого пост, но решение с изменением формы в моем случае не работает, как уже говорилось выше. Когда я пытаюсь добавить дополнительные скобки вот так:

Код: Выделить всё

y_pred = knn.predict([X_test])
, я получаю следующую ошибку:

Код: Выделить всё

ValueError: Found array with dim 3. KNeighborsClassifier expected 

Подробнее здесь: [url]https://stackoverflow.com/questions/79269801/kneighborsclassifier-predict-throws-expected-2d-array-got-1d-array-instead[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»