【问题标题】:Why does test takes longer than training?为什么测试比训练需要更长的时间?
【发布时间】: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


【解决方案1】:

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

所以区别主要在于从.fit().predict() 当您实际尝试预测训练集时,这将花费更长的时间。

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

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

【讨论】:

    猜你喜欢
    • 2021-07-26
    • 1970-01-01
    • 2022-01-24
    • 2021-12-28
    • 2020-08-08
    • 1970-01-01
    • 2018-01-18
    • 2019-08-29
    • 2021-02-22
    相关资源
    最近更新 更多