scikitlearn GridSearchCV不能随着样本的增加而工作

2024-04-26 14:45:04 发布

您现在位置:Python中文网/ 问答频道 /正文

下面的脚本使用n_samples=1000在我的机器上运行得很好,但是在使用n_samples=10000时会死掉(没有错误,只是停止工作)。这只会在使用Anaconda python发行版(numpy 1.8.1)时发生,但使用enthough(numpy1.9.2)就可以了。你知道是什么引起的吗?在

from sklearn.linear_model import LogisticRegression
from sklearn.grid_search import GridSearchCV
from sklearn.metrics.scorer import log_loss_scorer
from sklearn.cross_validation import KFold
from sklearn import datasets
import numpy as np

X, y = datasets.make_classification(n_samples=10000, n_features=50,
                                       n_informative=35, n_redundant=10,
                                       random_state=1984)

lr = LogisticRegression(random_state=1984)
param_grid = {'C': np.logspace(-1, 2, 4, base=2)}
kf = KFold(n=y.size, n_folds=5, shuffle=True, random_state=1984)
gs = GridSearchCV(estimator=lr, param_grid=param_grid, scoring=log_loss_scorer, cv=kf, verbose=100,
                  n_jobs=-1)

gs.fit(X, y)

注意:我在这两个发行版中都使用了sklearn0.16.1,并且使用了osx

我注意到,升级到numpy版本1.9.2和热情的分发(通过手动更新)打破了网格搜索。不过,我并没有把Anaconda numpy版本降级到1.8.1版本。在


Tags: fromimport版本numpylogparamrandomanaconda
2条回答

你在窗户上吗?如果是这样,您需要用

if __name__ == "__main__":
    do_stuff()

否则多处理将不起作用。在

根据Andreas的评论,问题似乎与线性代数库中的多线程有关。我在终端用以下命令解决了这个问题:

export VECLIB_MAXIMUM_THREADS=1

我的(薄弱的)理解是,这限制了线性代数库对多线程的使用,并允许多处理按需要处理多线程。在

相关问题 更多 >