为什么cross_val_predict比KNeighborsClassifier慢得多?

时间:2019-01-22 09:22:35

标签: python performance machine-learning scikit-learn cross-validation

在Jupyter笔记本上本地运行并使用MNIST数据集(28k条目,每幅图像28x28像素,以下过程需要 27秒

from sklearn.neighbors import KNeighborsClassifier

knn_clf = KNeighborsClassifier(n_jobs=1)
knn_clf.fit(pixels, labels)

但是,以下操作要花费 1722秒,换句话说,要长〜64倍

from sklearn.model_selection import cross_val_predict
y_train_pred = cross_val_predict(knn_clf, pixels, labels, cv = 3, n_jobs=1)

我天真的理解是cv = 3的cross_val_predict正在执行3倍交叉验证,因此我希望它可以拟合模型3次,因此至少需要3倍以上的时间,但我看不到为什么要花64倍!

要检查它是否特定于我的环境,我在Colab notebook中运行了该命令-差异不那么极端( 15倍),但仍远高于我的约3倍预期:

我想念什么?为什么cross_val_predict比仅拟合模型要慢得多?

以防万一,我正在运行scikit-learn 0.20.2。

2 个答案:

答案 0 :(得分:5)

A也称为惰性算法,因为在拟合过程中它除了保存输入数据外什么也不做,特别是根本没有学习。

在预测期间,将对每个测试数据点进行实际距离计算。因此,您可以理解,使用KNN时,cross_val_predict必须在验证数据点上进行预测,这会使计算时间更长!

答案 1 :(得分:2)

cross_val_predict进行拟合和预测,所以它可能比仅拟合要花费更长的时间,但我没想到会长64倍

相关问题