我正在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))
您能解释一下为什么要花这么多时间(比培训多花时间)吗?有什么解决的办法吗?
答案 0 :(得分:3)
考虑k-NN算法的工作原理。这是懒惰学习的经典示例,其中在预测时必须计算到原始训练数据的距离(以确定哪个是其最接近的近邻)。
在训练时,不需要进行非常昂贵的距离计算。
因此区别主要在于从.fit()
到.predict()
当您实际尝试预测火车行驶时,这将花费更长的时间。
有关更多信息,请参见wikipedia
对于解决方案:请考虑该算法实际上是否适合您的情况,或者您是否可以对距离进行更粗略的估算。