为什么cross_val_predict比KNeighborsClassifier慢得多?

Dav*_*ill 2 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)
Run Code Online (Sandbox Code Playgroud)

但是,以下过程需要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)
Run Code Online (Sandbox Code Playgroud)

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

要检查它是否特定于我的环境,我在Colab笔记本上运行了相同的东西 -差异不那么极端(15x),但仍远高于我预期的〜3x

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

万一重要,我正在运行scikit-learn 0.20.2。

Ven*_*lam 6

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

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

  • 真的很有帮助,很有意义,谢谢!我对照初始模型学习对输入数据集进行了简单的预测,并且预测步骤花费了整个交叉验证运行的时间,这可以很好地证实您的观点。 (2认同)