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。
KNN 之所以称为“惰性算法”,是因为在拟合过程中它除了保存输入数据外什么也不做,特别是根本没有学习。
在预测期间,将对每个测试数据点进行实际距离计算。因此,您可以理解,使用时cross_val_predict,KNN必须预测验证数据点,这会使计算时间更长!