Почему cross_val_predict намного медленнее, чем подходит для KNeighborsClassifier? - PullRequest
0 голосов
/ 22 января 2019

Локальный запуск на ноутбуке Jupyter и использование набора данных MNIST (28 000 записей, 28 x 28 пикселей на изображение, для следующего требуется 27 секунд .

from sklearn.neighbors import KNeighborsClassifier

knn_clf = KNeighborsClassifier(n_jobs=1)
knn_clf.fit(pixels, labels)

Однако следующее занимает 1722 секунд , другими словами ~ в 64 раза длиннее :

from sklearn.model_selection import cross_val_predict
y_train_pred = cross_val_predict(knn_clf, pixels, labels, cv = 3, n_jobs=1)

Мое наивное понимание состоит в том, что cross_val_predict с cv = 3 выполняет 3-кратную перекрестную проверку, поэтому я ожидаю, что она будет соответствовать модели 3 раза, и поэтому потребуется как минимум ~ 3 раза дольше, но я не вижу почему это заняло бы 64x!

Чтобы проверить, было ли это что-то специфическое для моей среды, я запустил то же самое в ноутбуке Colab - разница была менее экстремальной ( 15x ), но все же намного выше ~ 3х я ожидал:

Чего мне не хватает? Почему cross_val_predict намного медленнее, чем просто подгонка модели?

Если это имеет значение, я запускаю scikit-learn 0.20.2.

Ответы [ 2 ]

0 голосов
/ 22 января 2019

KNN также называется ленивым алгоритмом, потому что во время подгонки он ничего не делает, но сохраняет входные данные, в частности, обучение вообще отсутствует.

Во время прогнозирования вычисление фактического расстояния происходит для каждой контрольной точки данных. Следовательно, вы можете понять, что при использовании cross_val_predict, KNN должен прогнозировать точки данных проверки, что увеличивает время вычислений!

0 голосов
/ 22 января 2019

cross_val_predict выполняет подбор и прогноз, поэтому это может занять больше времени, чем просто примерка, но я не ожидал, что в 64 раза больше

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...