首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >运行sk-学习使用python多处理的model.predict

运行sk-学习使用python多处理的model.predict
EN

Stack Overflow用户
提问于 2017-11-20 11:04:19
回答 1查看 4K关注 0票数 1

我有一个科学知识创建的模型,一个巨大的测试数据集可以预测。现在为了加速预测,我想实现多处理,但真的无法破解,在这方面需要帮助。

代码语言:javascript
运行
复制
import pandas as pd
from sklearn.externals import joblib
dataset = pd.read_csv('testdata.csv')  # 8mln rows
feature_cols = ['col1', 'col2', 'col3']

#load model
model = joblib.load(model_saved_path)                # random-forest classifier

#predict Function
def predict_func(model, data, feature_cols):
    return model.predict(data[fetaure_cols])

#Normal Execution
predict_vals = predict_func(model, dataset, feature_cols) #130 secs

现在我想使用多处理来预测,(数据块-数据集-并在每个核心的每个块上分别运行预测函数,然后加入结果)。

但却无法做到。

我试过了

代码语言:javascript
运行
复制
import multiprocessing as mp
def mp_handler():
    p = multiprocessing.Pool(3) #I think it starts 3 processes
    p.map(predict_func, testData) #How to pass parameters
mp_handler()

我不知道这是否是在python中进行多处理的方法(请原谅我在这里的无知)。我看过很少的搜索结果,并想出了这个。

如果有人能在编码方面有所帮助,这将是一个很大的帮助,或者一个多处理的读取链接将是足够公平的。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-20 11:28:26

您使用了一个RandomForest (由于预测速度慢,我会猜到这一点)。

这里要传达的信息是:,它已经被并行化了(集成级!)!和你在外层做的所有尝试都会减慢速度!

我解释这些级别有点武断,但我的意思是:

  • 最低层:核心算法是并行。
    • 决策树是射频的核心,而不是平行的(在滑雪中)!
    • 影响单预测性能

  • 中等水平:集成算法是并行的算法。
    • RF =多个决策树:并行(在sklearn中)!
    • 影响单预测性能

  • 高级:批处理预测是并行的。
    • 这是你想要做的,只有当低层没有利用你的能力时才有意义!
    • 不影响单个预测性能(正如您已经知道的那样)吗?

一般规则是:

  • 如果使用正确的参数(例如,n_jobs=-1;不是默认的!):
    • 射频将使用min(number of cores, n_estimators)核!
      • 加速比只能达到,如果上面是低于你的核心数目!

因此,您应该在培训时使用正确的n_jobs参数来使用并行化。正如所解释的那样,sklearn将使用这个方法,并且可以看到这里

如果你已经用n_jobs=1 (不是平行的)训练你的分类器,事情会变得更加困难。也许可以这样做:

代码语言:javascript
运行
复制
# untested
model = joblib.load(model_saved_path)
#model.n_jobs = -1                     # unclear if -1 is substituted earlier
model.n_jobs = 4                       # more explicit usage

请记住,使用n_jobs > 1需要更多的内存!

取您最喜欢的操作系统监视器,确保正确设置分类器(并行-> n_jobs),并在原始预测期间观察CPU的使用情况。这不是为了评估并行化的效果,而是为了说明它正在使用并行化!

如果您仍然需要并行化,例如,当您有32个核并使用n_estimators=10时,那么使用强权b,即sklearn的多处理包装器--人们在sklearn中使用了很多。基本示例应该已经准备好使用了!

如果这样做会加快速度,那么很多事情(IO和co)都会影响到事情的发展。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47390514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档