Почему тестирование занимает больше времени, чем обучение?
Я тренируюсь склеарн KNNClassifier
на MNIST набор данных цифр.
Вот код:
knn = KNeighborsClassifier()
start_time = time.time()
print (start_time)
knn.fit(X_train, y_train)
elapsed_time = time.time() - start_time
print (elapsed_time)
это займет 40 с. Однако, когда я тестирую тестовые данные, это занимает больше нескольких минут (все еще выполняется), тогда как тестовых данных в 6 раз меньше, чем данных о поездах.
Вот код:
y_pred = knn.predict(X_test)
print(confusion_matrix(y_test,y_pred))
Не могли бы вы объяснить мне, почему это занимает так много времени (больше времени, чем обучение)? Что-то, чтобы решить это?
1 ответ
Подумайте о работе алгоритма k-NN. Это классический пример ленивого обучения, когда во время прогнозирования должны быть рассчитаны расстояния до исходных обучающих данных (чтобы определить, какие из них являются ближайшими соседями).
Во время тренировок не нужно делать очень дорогой расчет расстояния.
Таким образом, разница в основном заключается в переходе от .fit()
в .predict()
Когда вы на самом деле пытаетесь предсказать набор поездов, это займет еще больше времени.
Для получения дополнительной информации см., Например, википедию
Для решения: подумайте, действительно ли этот алгоритм идеально подходит для вашего случая, или вы могли бы сделать с более грубой аппроксимацией расстояния.