Почему тестирование занимает больше времени, чем обучение? - PullRequest
0 голосов
/ 03 ноября 2018

Я тренируюсь sklearn 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 Ответ

0 голосов
/ 03 ноября 2018

Подумайте о работе алгоритма k-NN. Это классический пример ленивого обучения, когда во время прогнозирования должны быть рассчитаны расстояния до исходных обучающих данных (чтобы определить, какие из них являются ближайшими соседями).
Во время тренировок не нужно делать очень дорогой расчет расстояния.

Таким образом, разница в основном заключается в переходе от .fit() к .predict() Когда вы на самом деле пытаетесь предсказать набор поездов, это займет еще больше времени.

Для получения дополнительной информации см., Например, википедии

Для решений: подумайте, действительно ли этот алгоритм идеально подходит для вашего случая, или вы могли бы сделать это с более грубой аппроксимацией расстояния.

...