我使用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和我一样的操作系统)没有任何问题。我不知道这里的问题是什么,所以我真的希望在这里得到一些帮助:)
答案 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