scikit-learn cross_validate参数n_jobs = -1导致错误

时间:2018-03-28 23:30:05

标签: python multithreading scikit-learn

我使用scikit-learn和cross_validate函数来实现简单的机器学习模型。我想设置函数参数" n_jobs"到" -1"允许使用多个核心。但是,如果总是出错。有人有解决方案吗?

以下是错误消息:

  File "C:\ProgramData\Anaconda3\lib\multiprocessing\process.py", line 105, in start
    self._popen = self._Popen(self)

  File "C:\ProgramData\Anaconda3\lib\multiprocessing\context.py", line 322, in _Popen
    return Popen(process_obj)

  File "C:\ProgramData\Anaconda3\lib\multiprocessing\popen_spawn_win32.py", line 33, in __init__
    prep_data = spawn.get_preparation_data(process_obj._name)

  File "C:\ProgramData\Anaconda3\lib\multiprocessing\spawn.py", line 172, in get_preparation_data
    main_mod_name = getattr(main_module.__spec__, "name", None)

AttributeError: module '__main__' has no attribute '__spec__'

我的代码如下所示:

#Go trough each alpha, save average RMSE from crossvalidation into array
for k, i in enumerate(alpha):
    Model.set_params(Ridge__alpha = i)
    scores = cross_validate(Model,X,y,scoring='neg_mean_squared_error',cv=10,n_jobs=-1)
    avgRMSE[k] = np.mean(np.sqrt(-1*scores['test_score']))

我使用以下版本: Python 3.6 蟒蛇5.1 scikit-learn 0.19.1 scipy 1.0.0 numpy 1.14.2

完全相同的脚本在我的朋友笔记本电脑上运行(Win10和我一样的操作系统)没有任何问题。我不知道这里的问题是什么,所以我真的希望在这里得到一些帮助:)

1 个答案:

答案 0 :(得分:1)

IFF我在外部系统终端执行我的脚本并写

  

如果名称 =='主要':

在脚本的开头:我的问题已经解决了。

仍然会想知道是否有更好的解决方案,特别是因为在我的朋友系统上它运行时没有修复(并且他使用相同的操作系统和硬件)

示例:

#Imports are here

if __name__ == '__main__':

    #All the other code start from here

    for k, i in enumerate(alpha):
        Model.set_params(Ridge__alpha = i)
        scores = cross_validate(Model,X,y,scoring='neg_mean_squared_error',cv=10,n_jobs=-1)
        avgRMSE[k] = np.mean(np.sqrt(-1*scores['test_score']))

    #More code