我想使用包含的交叉验证(RFECV)执行递归特征消除。我的问题是,尽管我已经对数据进行了大量子采样,但使用我的特征数量(278),该过程太慢了,并且可能无法在我为实验分配的时间内完成。
我已经看到scikit-learn中的典型交叉验证通过定义可以并行运行的作业数量来支持并行化。RFECV的任务是否有可能并行化?
版本 0.18 版本的更新日志显示 RFECV 现在支持 n_jobs
。
按照 RFECV 文档中的示例进行操作(我将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")
1 工作 : 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