我想使用包含的交叉验证(RFECV)进行递归特征消除。我的问题是,尽管我对数据进行了大量的二次采样,但由于功能数量众多(278),该过程太慢了,可能无法在为实验分配的时间内得出结论。
我已经看到scikit-learn中的典型交叉验证通过定义可以并行运行的作业数量来支持并行化。 RFECV中的任务是否可以并行化?
最佳答案
changelog for the version 0.18 release显示RFECV现在支持n_jobs
。
遵循RFECV documentation中的示例(我将n_samples
从50更改为5000)
from sklearn.datasets import make_friedman1
from sklearn.feature_selection import RFECV
from sklearn.svm import SVR
X, y = make_friedman1(n_samples=5000, n_features=5, random_state=0)
estimator = SVR(kernel="linear")
一份工作:22.5s
%%time
selector = RFECV(estimator, step=1, cv=5, n_jobs=1)
selector = selector.fit(X, y)
CPU times: user 23.1 s, sys: 2.71 s, total: 25.8 s
Wall time: 22.5 s
4个工作:11.8s
%%time
selector = RFECV(estimator, step=1, cv=5, n_jobs=4)
selector = selector.fit(X, y)
CPU times: user 3.42 s, sys: 312 ms, total: 3.74 s
Wall time: 11.8 s
关于parallel-processing - 具有并行作业的RFECV,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38313512/