scikit-learn GridSearchCV n_jobs != 1 冻结
Posted
技术标签:
【中文标题】scikit-learn GridSearchCV n_jobs != 1 冻结【英文标题】:scikit-lean GridSearchCV n_jobs != 1 freezing 【发布时间】:2017-12-08 15:04:13 【问题描述】:我在随机森林上运行网格搜索并尝试使用不同的 n_jobs,但内核冻结,没有 CPU 使用率。使用 n_jobs=1 可以正常工作。我什至不能用 ctl-C 停止命令,必须重新启动内核。 我在 windows 7 上运行。我看到 OS X 也存在类似问题,但解决方案与 windows 7 无关。
from sklearn.ensemble import RandomForestClassifier
rf_tfdidf = Pipeline([('vect',tfidf),
('clf', RandomForestClassifier(n_estimators=50,
class_weight='balanced_subsample'))])
param_grid = ['vect__ngram_range':[(1,1)],
'vect__stop_words': [stop],
'vect__tokenizer':[tokenizer]
]
if __name__ == '__main__':
gs_rf_tfidf = GridSearchCV(rf_tfdidf, param_grid, scoring='accuracy', cv=5,
verbose=10,
n_jobs=2)
gs_rf_tfidf.fit(X_train_part, y_train_part)
谢谢。
【问题讨论】:
if name =='main' 之后的下一行需要有适当的缩进。 正如 sera 所说,这是缩进:github.com/scikit-learn/scikit-learn/issues/2889 - 顺便说一句,您的代码按原样运行而没有缩进错误 如果没有缩进问题,而这正是您在此处粘贴代码的方式,不妨看看 [this](此类问题还有其他问题:[github.com/scikit-learn/scikit-learn/issues/… etc ) ? 副本出错了。您在此处给出的问题与 Windows 无关。谢谢。 我发布的答案解决了我在 Windows 8 中遇到的类似问题。请尝试一下 【参考方案1】:if __name__ == '__main__':
后面的缩进不正确。如果不是这种情况并且是复制粘贴错误,那么您可以尝试以下操作:
if __name__ =='main':
# your code indented !
所以你的脚本的第一行是if __name__ == '__main__':
,然后其余的代码在后面跟着适当的缩进。
新代码
from sklearn.ensemble import RandomForestClassifier
from sklearn.pipeline import Pipeline
if __name__ == '__main__':
rf_tfdidf = Pipeline([('vect',tfidf),('clf', RandomForestClassifier(n_estimators=50,class_weight='balanced_subsample'))])
param_grid = ['vect__ngram_range':[(1,1)],'vect__stop_words': [stop],'vect__tokenizer':[tokenizer]]
gs_rf_tfidf = GridSearchCV(rf_tfdidf, param_grid, scoring='accuracy', cv=5,verbose=10, n_jobs=-1)
gs_rf_tfidf.fit(X_train_part, y_train_part)
这对我来说很好(Windows 8.1)
编辑
以下使用 PyCharm 可以正常工作。我没有使用过 spyder,但它也应该适用于 spyder:
代码
Class Test(object):
def __init__(self):
###code here
###code here
if __name__ == '__main__':
Test()
【讨论】:
效果很好!就是想。我设法从控制台运行脚本,但是如何在我的 IDE (spyder) 中运行它并在需要时进行调试。 你好。一般来说,你应该使用像 VIM link 或 Atom link 这样的文本编辑器。您可以在 .py 文件中编写脚本,然后在控制台中运行它们。对于实时调试,您可以使用 PyCharm link。最后,我很高兴能帮上忙。您可以将其标记为已接受,以便其他人可以尝试相同的解决方案 @ShacharStern Spyder 非常易于使用。在菜单栏中,您将找到“调试”选项。您可以将断点放置到您希望代码运行的位置。 Vivek,我不认为你理解我。我知道如何使用 spyder。我只能从命令行运行此代码,因为它位于“if name == 'main':”中,我正在寻找一种在 spyder 上运行它的方法。 @VivekKumar 使用可以在 spyder 中运行的类。看这里link以上是关于scikit-learn GridSearchCV n_jobs != 1 冻结的主要内容,如果未能解决你的问题,请参考以下文章
Scikit-learn 中的 GridSearchCV 输出问题
Scikit-Learn:GridSearchCV 的自定义损失函数
Scikit-learn 多输出分类器使用:GridSearchCV、Pipeline、OneVsRestClassifier、SGDClassifier
scikit-learn GridSearchCV 弃用警告