【发布时间】:2018-11-03 16:49:05
【问题描述】:
我正在 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))
你能解释一下为什么需要这么多时间(比培训时间还多)吗?有什么办法解决这个问题?
【问题讨论】:
-
您能否详细说明为什么您希望他们花费相同的时间?这些是不同的功能,因此无论数据如何,它们的运行时间都会有所不同。训练模型是一回事,使用它进行分类是另一回事。
-
@IslamEl-Rougy 训练数据用于构建分类器,因此需要计算时间(而在已经构建模型时使用测试数据)。此外,训练数据是测试数据的六倍,所以我看不出它应该持续这么长时间的任何理由
-
我不太确定函数的具体实现,但在 KNN 的情况下,由于模型需要测量欧几里得,因此预测比构建模型花费更多时间是有道理的(或其他类型的距离)为测试数据中的每个样本与其 k 最近邻,而它不需要在训练中这样做。
-
为减少测试时间,请考虑调整“K”参数或完全选择其他模型。
标签: python scikit-learn knn