我正在使用LogisticRegression对一个大型数据集(150万个观察值)进行分类,使用的是LeaveOneGroupOut交叉验证。我使用scikit-learn
进行实现。我的代码运行大约需要2天的时间,我希望能得到一些关于如何使其运行得更快的建议。以下是我的代码片段:
grp = data['id_x'].valueslogo = LeaveOneGroupOut()LogReg = LogisticRegression()params_grid = {'C': [0.78287388, 1.19946909, 1.0565957 , 0.69874106, 0.88427995, 1.33028731, 0.51466415, 0.91421747, 1.25318725, 0.82665192, 1, 10],'penalty': ['l1', 'l2'] }random_search = RandomizedSearchCV(LogReg, param_distributions = params_grid, n_iter = 3, cv = logo, scoring = 'accuracy')random_search.fit(X, y, grp)print random_search.best_params_print random_search.best_score_
回答:
我将做出以下假设:1- 你使用的是scikit-learn。2- 你需要你的代码运行得更快。
为了更快地获得最终结果,你可以通过并行运行来同时训练多个模型。为此,你需要修改scikit-learn中的变量n_jobs
。n_jobs
的可能选项可以是#of_CPU_cores
或#of_CPU_cores-1
,如果你在训练模型时没有在计算机上运行其他任何程序的话。
示例:
RandomizedSearchCV并行运行:
random_search = RandomizedSearchCV(LogReg, n_jobs=3, param_distributions = params_grid, n_iter = 3, cv = logo, scoring = 'accuracy')
LogisticRegression并行运行:
LogisticRegression(n_jobs=3)
我建议只对RandomizedSearchCV进行并行化处理。
查看原始的scikit-learn文档可能也会有所帮助: