Код: Выделить всё
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.
Сначала я попробовал немного другой подход, основанный на примере 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]
Мобильная версия