在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。
答案 0 :(得分:5)
A
也称为惰性算法,因为在拟合过程中它除了保存输入数据外什么也不做,特别是根本没有学习。
在预测期间,将对每个测试数据点进行实际距离计算。因此,您可以理解,使用KNN
时,cross_val_predict
必须在验证数据点上进行预测,这会使计算时间更长!
答案 1 :(得分:2)
cross_val_predict进行拟合和预测,所以它可能比仅拟合要花费更长的时间,但我没想到会长64倍