Вопрос или проблема
Я продолжаю пытаться запустить новый набор данных через свой классификатор KNN, но получаю сообщение:
ValueError: размерность данных запроса должна совпадать с размерностью обучающих данных
Затем я использовал:
x_new = pd.read_csv('NewFeaturePractice.csv' , names = attributes)
x_new = x_new.values.reshape(52,84)
(что соответствует размерностям обучающих данных), но затем получал:
ValueError: невозможно изменить размер массива размером 672 в форму (52,84)
Второй набор данных не имеет такого же количества строк, как первый, что означает, что даже если я попытаюсь изменить размер массива, у меня будут несколько пустых мест. Как я могу запустить код так, чтобы независимо от размера моего нового набора данных, я все равно мог получить результаты?
Похоже, вы делаете две ошибки –
Размерность изменения формы не совпадает с размером, т.е. 10 != 3X3
Размерности в обучении и тестировании разные. Обучение на 5 признаках и тестирование на 4 признаках.
Что я могу предложить –
Вы должны знать количество ваших признаков – скажем, N
тогда измените размер с помощью reshape(-1,N). Это автоматически определит первую размерность.
x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
N=2
x.reshape(-1,N)
Ответ или решение
Для успешного выполнения классификации с использованием метода K-ближайших соседей (KNN) важно обеспечить согласованность между размерностями обучающего и тестового наборов данных. Ошибка, с которой вы сталкиваетесь, указывает на то, что количество признаков (фич) в вашем новом наборе данных не совпадает с количеством признаков, использованным для обучения модели. В данной ситуации я предлагаю следующий алгоритм действий:
1. Определение проблемы
Ошибка, которую вы видите (ValueError: query data dimension must match training data dimension
), возникает, когда размерность вашего тестового набора данных не совпадает с размерностью обучающего. Это происходит, когда вы пытаетесь запустить новый набор данных, не проверив его структуру и размерность.
2. Проверка размерностей
Прежде всего, вы должны убедиться, что количество признаков в новом наборе данных соответствует количеству признаков в обучающем наборе данных. Если ваш обучающий набор данных имел, например, 84 признака, тогда ваш тестовый набор данных также должен содержать 84 признака, независимо от количества строк.
3. Загрузка данных и их очистка
При загрузке нового набора данных с использованием pd.read_csv()
, проверьте, сколько признаков у вас есть:
import pandas as pd
# Загрузка нового набора данных
x_new = pd.read_csv('NewFeaturePractice.csv', names=attributes)
# Проверка размерности
print(x_new.shape) # Покажет (количество строк, количество признаков)
4. Использование reshape
Если размерность вашего нового набора данных имеет правильное количество признаков, вы можете использовать метод reshape
, чтобы удостовериться, что он правильно подготовлен для KNN. Однако, как показано в вашем примере, ошибка возникает, когда вы пытаетесь явно задать размеры.
Для автоматического определения первой размерности используйте:
import numpy as np
# Предположим, у вас есть N — общее количество признаков
N = len(attributes) # количество признаков в вашем обучающем наборе
# Преобразование в массив NumPy и использование автоматического определения первой размерности
x_new = x_new.values.reshape(-1, N)
5. Устранение проблем с размерностью
Если новый набор данных не имеет достаточного количества признаков (меньше, чем ожидалось), полезно выполнить предварительную обработку данных, чтобы добавить недостающие признаки или удалить лишние:
- Добавление недостающих значений: Если ваш новый набор данных меньше, чем требуется, вы можете добавить заполнители (например, нули).
- Удаление лишних признаков: Если признаков больше, чем нужно, просто отберите нужные, используя индексирование.
6. Проверка соответствия модели
Обязательно проверяйте соответствие структуры данных перед передачей их в модель KNN. Например:
from sklearn.neighbors import KNeighborsClassifier
# Обучение вашего KNN-классификатора на обучающем наборе
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)
# Применение модели к новому набору данных
predictions = knn.predict(x_new)
print(predictions)
Заключение
Таким образом, чтобы избежать ошибки размерности в KNN и обеспечить корректное использование модели, необходимо внимательно следить за размерами и структурами ваших данных. В случае, если предположения о размере данных не соблюдаются, предварительная обработка и динамическое преобразование данных с использованием reshape(-1, N) станут необходимыми шагами. Таким образом, вы сможете успешно классифицировать данные независимо от их первоначального размера.