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

Mys*_*Guy 1 python knn scikit-learn

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

这是代码:

knn = KNeighborsClassifier()

start_time = time.time()
print (start_time)
knn.fit(X_train, y_train)
elapsed_time = time.time() - start_time

print (elapsed_time)
Run Code Online (Sandbox Code Playgroud)

需要40秒。然而,当我对测试数据进行测试时,需要花费几分钟以上(仍在运行),而测试数据比训练数据少6倍。

这是代码:

y_pred = knn.predict(X_test)
print(confusion_matrix(y_test,y_pred))
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*oop 5

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

因此,差异主要在于从 到.fit().predict() 您实际尝试预测训练集时,这会花费更长的时间。

欲了解更多信息,请参见例如维基百科

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