为什么测试需要比培训更长的时间?

时间:2018-11-03 16:49:05

标签: python scikit-learn knn

我正在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))

您能解释一下为什么要花这么多时间(比培训多花时间)吗?有什么解决的办法吗?

1 个答案:

答案 0 :(得分:3)

考虑k-NN算法的工作原理。这是懒惰学习的经典示例,其中在预测时必须计算到原始训练数据的距离(以确定哪个是其最接近的近邻)。
在训练时,不需要进行非常昂贵的距离计算。

因此区别主要在于从.fit().predict() 当您实际尝试预测火车行驶时,这将花费更长的时间。

有关更多信息,请参见wikipedia

对于解决方案:请考虑该算法实际上是否适合您的情况,或者您是否可以对距离进行更粗略的估算。