Код: Выделить всё
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)
print('Shape of X_train:')
print(X_train.shape)
print('Shape of X_test:')
print(X_test.shape)
print('Shape of y_train:')
print(y_train.shape)
# 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)
Код: Выделить всё
y_pred = knn.predict(X_test)
Код: Выделить всё
ValueError: Expected 2D array, got 1D array instead:
array=[1.13707140e-01 9.81128156e-01 2.89475545e-02 ... 0.00000000e+00
5.02811105e-04 1.15502894e-01].
Reshape 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.
Код: Выделить всё
Shape of X_train:
(36, 4096)
Shape of X_test:
(9, 4096)
Shape of y_train:
(36,)
Код: Выделить всё
y_pred = knn.predict(X_test.reshape(-1, 1))
Код: Выделить всё
ValueError: X has 1 features, but KNeighborsClassifier is expecting 4096 features as input.
Я также попробовал изменить форму X_train, чтобы она снова соответствовала X_test:
Код: Выделить всё
knn.fit(X_train.reshape(-1, 1), y_train)
Код: Выделить всё
ValueError: Found input variables with inconsistent numbers of samples: [147456, 36]
Я не понимаю, почему 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]
Мобильная версия