Scikit-learn 多线程
Posted
技术标签:
【中文标题】Scikit-learn 多线程【英文标题】:Scikit-learn multithreading 【发布时间】:2018-12-21 10:28:00 【问题描述】:您知道来自 scikit-learn 的模型是使用自动多线程还是仅使用顺序指令?
谢谢
【问题讨论】:
【参考方案1】:没有。默认情况下,所有 scikit-learn 估计器仅在单个线程上工作。
但话又说回来,这完全取决于算法和问题。如果算法需要顺序数据,我们无能为力。如果数据集是多类或多标签的,并且算法在一对一的基础上工作,那么是的,它可以使用多线程。
在您要使用的实用程序或算法中查找参数n_jobs
,并将其设置为-1
以使用多线程。
例如。
LogisticRegression 如果处理二元问题只会训练单个模型,这将需要数据顺序,所以这里使用n_jobs
没有效果。但它像 OvR 一样处理多类问题,因此它必须使用相同的数据训练那些许多估计器。在这种情况下,您可以使用n_jobs=-1
。
DecisionTreeClassifier 本质上启用了多类,不需要训练多个模型。所以我们那里没有那个参数。
像RandomForestClassifier 这样的集成方法将训练多个估计器(无论问题类型如何),这些估计器单独处理数据的某些部分,因此我们可以再次使用n_jobs
。
像cross_val_score
或GridSearchCV 这样的交叉验证实用程序将再次处理部分数据或一些单独的参数,这与其他折叠无关,因此我们在这里也可以使用多线程功能。
【讨论】:
感谢您的澄清以上是关于Scikit-learn 多线程的主要内容,如果未能解决你的问题,请参考以下文章
为啥 scikit-learn 中的 GridSearchCV 会产生这么多线程
线程 QueueManagerThread 中的异常 - scikit-learn