在大型数据集中将一组排除在外的速度改进

Speed Improvements to Leave One Group Out in Large Datasets

我正在通过 LogisticRegression over a large dataset (1.5 million observations) using LeaveOneGroupOut 交叉验证进行分类。我正在使用 scikit-learn 来实现。我的代码大约需要 2 天才能完成 运行,非常感谢您提供有关如何使其更快的意见。我的代码片段如下所示:

grp = data['id_x'].values
logo = 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_jobsn_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 文档可能会有所帮助: