Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python并行计算_Python_Machine Learning_Parallel Processing_Linear Regression_Python Scoop - Fatal编程技术网

Python并行计算

Python并行计算,python,machine-learning,parallel-processing,linear-regression,python-scoop,Python,Machine Learning,Parallel Processing,Linear Regression,Python Scoop,我正在尝试熟悉库中的独家新闻(这里的文档:),以了解如何并行执行统计计算,尤其是使用futures.map函数 因此,首先,我想尝试运行一个简单的线性回归,并使用从正态分布随机生成的10000000个数据点(4个特征,1个目标变量),评估串行和并行计算之间的性能差异 这是我的代码: import pandas as pd import numpy as np import random from scoop import futures import statsmodels.api as sm

我正在尝试熟悉库中的独家新闻(这里的文档:),以了解如何并行执行统计计算,尤其是使用futures.map函数

因此,首先,我想尝试运行一个简单的线性回归,并使用从正态分布随机生成的10000000个数据点(4个特征,1个目标变量),评估串行和并行计算之间的性能差异

这是我的代码:

import pandas as pd
import numpy as np
import random
from scoop import futures
import statsmodels.api as sm
from time import time

def linreg(vals):
    global model
    model = sm.OLS(y_vals,X_vals).fit()
    return model
    print(model.summary())    

if __name__ == '__main__':

    random.seed(42)
    vals = pd.DataFrame(np.random.normal(loc = 3, scale = 100, size =(10000000,5)))
    vals.columns = ['dep', 'ind1', 'ind2', 'ind3', 'ind4']
    y_vals = vals['dep']
    X_vals = vals[['ind1', 'ind2', 'ind3', 'ind4']]

    bt = time()
    model_vals = list(map(linreg, [1,2,3]))
    mval = model_vals[0]
    print(mval.summary())
    serial_time = time() - bt

    bt1 = time()
    model_vals_1 = list(futures.map(linreg, [1,2,3]))
    mval_1 = model_vals_1[0]
    print(mval_1.summary())
    parallel_time = time() - bt1

    print(serial_time, parallel_time)
但是,在此之后,回归摘要确实是通过Python的标准映射函数以串行方式生成的,这是一个错误:

回溯(最近一次呼叫最后一次): 文件“C:\Users\niccolo.gentile\AppData\Local\Continuum\anaconda3\envs\tensorenviron\lib\runpy.py”,第193行,位于主运行模块中 “main”,模块规格) 文件“C:\Users\niccolo.gentile\AppData\Local\Continuum\anaconda3\envs\tensorenviron\lib\runpy.py”,第85行,运行代码 exec(代码、运行\全局) 文件“C:\Users\niccolo.gentile\AppData\Local\Continuum\anaconda3\envs\tensorenviron\lib\site packages\scoop\bootstrap\uuuuu main\uuuuuu.py”,第302行,在 b、 main() 文件“C:\Users\niccolo.gentile\AppData\Local\Continuum\anaconda3\envs\tensorenviron\lib\site packages\scoop\bootstrap\uuuuu main\uuuuuu.py”,第92行,主目录 self.run() 文件“C:\Users\niccolo.gentile\AppData\Local\Continuum\anaconda3\envs\tensorenviron\lib\site packages\scoop\bootstrap\uuuuu main\uuuuuu.py”,第290行,正在运行 期货与创业公司() 文件“C:\Users\niccolo.gentile\AppData\Local\Continuum\anaconda3\envs\tensorenviron\lib\site packages\scoop\bootstrap\uuuuu main\uuuuuu.py”,第271行,在futures\u启动中 运行_name=“main” 文件“C:\Users\niccolo.gentile\AppData\Local\Continuum\anaconda3\envs\tensorenviron\lib\site packages\scoop\futures.py”,第64行,在\u启动中 结果=_controller.switch(rootFuture,*args,**kargs) runController中的文件“C:\Users\niccolo.gentile\AppData\Local\Continuum\anaconda3\envs\tensorenviron\lib\site packages\scoop\u control.py”,第253行 提高未来价值 文件“C:\Users\niccolo.gentile\AppData\Local\Continuum\anaconda3\envs\tensorenviron\lib\site packages\scoop\u control.py”,第127行,在runFuture中 future.resultValue=future.callable(*future.args,**future.kargs) 文件“C:\Users\niccolo.gentile\AppData\Local\Continuum\anaconda3\envs\tensorenviron\lib\runpy.py”,第263行,在运行路径中 pkg_name=pkg_name,script_name=fname) 文件“C:\Users\niccolo.gentile\AppData\Local\Continuum\anaconda3\envs\tensorenviron\lib\runpy.py”,第96行,在运行模块代码中 模块名称、模块规格、组件名称、脚本名称) 文件“C:\Users\niccolo.gentile\AppData\Local\Continuum\anaconda3\envs\tensorenviron\lib\runpy.py”,第85行,运行代码 exec(代码、运行\全局) 文件“Scoop\u map\u linear\u regression1.py”,第33行,在 model_vals_1=list(futures.map(linreg[1,2,3])) 文件“C:\Users\niccolo.gentile\AppData\Local\Continuum\anaconda3\envs\tensorenviron\lib\site packages\scoop\futures.py”,第102行,在\ U mapGenerator中 对于未来的_waitAll(*期货): 文件“C:\Users\niccolo.gentile\AppData\Local\Continuum\anaconda3\envs\tensorenviron\lib\site packages\scoop\futures.py”,第358行,在 对于f in_waitAny(未来): 文件“C:\Users\niccolo.gentile\AppData\Local\Continuum\anaconda3\envs\tensorenviron\lib\site packages\scoop\futures.py”,第335行,在waitAny 提高childFuture.exceptionValue 名称错误:未定义名称“y_vals”

是后来生产的。这意味着代码在
model\u vals\u 1=list(futures.map(linreg[1,2,3])
处停止

我也试着用map运行了两次,但确实没有出现错误

我还指定脚本已通过以下方式正确启动:

python -m scoop Scoop_map_linear_regression1.py
从Anaconda提示符命令行

事实上,如果在没有-m scoop参数的情况下启动它,它将不会被并行化并实际运行,而只是使用内置Python的map函数的两倍,就像在警告中报告的那样。也就是说,在启动时不指定-m scoop参数,futures.map将被map替换

我的目标是使用futures.map并行运行它,并评估性能改进

指定它以避免任何其他类似的答案和随后的搁置


非常感谢并欢迎您的任何评论。

当我将size=1000时,您的代码在我的笔记本电脑上运行完成,没有错误。嗨,詹姆斯,谢谢您的回复。实际上,我已经尝试过使用size=1000,但仍然得到相同的错误。您是否使用相同的参数从命令终端启动它?如果是,请您告诉我并行时间是否小于串行时间,以及两个回归输出是否相等(例如R平方、调整R平方、F统计等)?谢谢。下面的输出是一个答案,因为评论不允许格式化。亲爱的菲利普斯,我昨天看到了你的回复,但现在才能回复。实际上,您没有使用-m scoop参数运行该命令,这意味着没有启动scoop。因此,您只需运行两次Python的内置映射函数(如您收到的警告中所指定的),在我的问题中,我说的确实没有出现bug。无论如何,非常感谢。顺便问一下,@JamesPhillips,既然我的问题确实仍然相关,那么如何才能取消这种暂停状态?