为什么测试比训练花费的时间更长?

Why does test takes longer than training?

我正在 MNIST 数字数据集上训练 sklearn KNNClassifier

这是代码:

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))

你能解释一下为什么要花这么多时间(比训练时间还多)吗?有办法解决这个问题吗?

想想 k-NN 算法的工作原理。这是惰性学习的典型示例,在预测时必须计算与原始训练数据的距离(以确定哪些是其最近的邻居)。
在训练时,它不需要做非常昂贵的距离计算。

所以区别主要在于从 .fit().predict() 当您真正尝试预测火车组时,这会花费更长的时间。

有关详细信息,请参见例如wikipedia

对于解决方案:考虑此算法是否真的适合您的情况,或者您是否可以使用更粗略的距离近似值。