在 Spark 中分发 scikit learn 分类器的推荐方法是什么?

2024-05-05

我已经使用 scikit learn 构建了一个分类器,现在我想使用 Spark 在大型数据集上运行 Predict_proba。我目前使用以下方法对分类器进行腌制:

import pickle
pickle.dump(clf, open('classifier.pickle', 'wb'))

然后在我的 Spark 代码中,我使用 sc.broadcast 广播这个 pickle,以便在我的 Spark 代码中使用,该代码必须在每个集群节点上加载它。

这可行,但是 pickle 很大(大约 0.5GB),而且看起来效率很低。

有一个更好的方法吗?


这可行,但是 pickle 很大(大约 0.5GB)

注意森林的大小将是O(M*N*Log(N)),其中 M 是树的数量,N 是样本的数量。(source) https://github.com/scikit-learn/scikit-learn/issues/6276#issuecomment-179681036

有一个更好的方法吗?

您可以尝试使用多种选项来减小 RandomForestClassifier 模型或序列化文件的大小:

  • 将模型的尺寸减小优化超参数 http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html#sklearn-ensemble-randomforestclassifier, 尤其max_depth, max_leaf_nodes, min_samples_split因为这些参数会影响集成中使用的树的大小

  • 压缩泡菜,例如如下。注意有几种选择 https://stackoverflow.com/a/18475192/890242其中一种可能更适合您,因此您需要尝试:

    with gzip.open('classifier.pickle', 'wb') as f:
        pickle.dump(clf, f)
    
  • 使用 joblib 代替 pickle,它压缩得更好,也是推荐方法 http://scikit-learn.org/stable/modules/model_persistence.html#persistence-example.

     from sklearn.externals import joblib
        joblib.dump(clf, 'filename.pkl') 
    

    这里需要注意的是,joblib 将在一个目录中创建多个文件,因此您必须将这些文件压缩以进行传输。

  • 最后但并非最不重要的一点是,在使用 RandomTreeClassifier 进行拟合/预测之前,您还可以尝试通过降维来减小输入的大小,如实用技巧 http://scikit-learn.org/stable/modules/tree.html#tips-on-practical-use在决策树上。

YMMV

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Spark 中分发 scikit learn 分类器的推荐方法是什么? 的相关文章

随机推荐

  • cytoscape.js。对于边缘线段,将坐标转换为线段距离和线段权重

    我想与社区分享一个有用的函数 该函数从坐标 PointX PointY 返回线段距离和线段权重 我从工具 例如draw io 创建图表 并且在使用多个路点制作边缘 线段样式 时 该免费软件通过其坐标提供路点 不幸的是 最新版本的 cytos
  • 如何检测文本文件中大于 n 的一系列“空洞”(孔、与模式不匹配的线)?

    Case scenario cat Status txt 1 connected 2 connected 3 connected 4 connected 5 connected 6 connected 7 disconnected 8 di
  • 类型错误: jasmine.getEnv().currentSpec 为 null

    当我尝试运行我的茉莉花规格时 我得到 TypeError jasmine getEnv currentSpec is null in http localhost 8888 JASMINE ROOT jasmine js line 498
  • 我在 wamp for PHP 路径中遇到错误

    我的 wamp 服务器图标当前为橙色 这意味着 3 个服务器中只有 2 个正在运行 我无法打开 phpmyadmin 页面 因为它给出 404 未找到错误 如果我右键单击底部的 wamp 图标 则会收到一条错误消息 Error C wamp
  • 学院/大学数据 API [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试构建一个应用程序 允许用户查找特定大学并查看有关该大学的数据 录取率 SAT 分数 规模等 但
  • Python 用 lambda 函数封闭作用域变量

    我写了这个简单的代码 def makelist L for i in range 5 L append lambda x i x return L 好的 现在我打电话 mylist makelist 因为稍后调用嵌套函数时会查找封闭范围变量
  • 如何找到我的 typescript/react 模块的声明?

    我对前端技术非常 非常 陌生 特别是 React 和 TypeScript 当尝试做一件简单的事情 即使用反应组件时 我的问题出现了https github com ckeditor ckeditor5 https github com c
  • Yacc/Bison:伪变量($$、$1、$2、..)以及如何使用 printf 打印它们

    我有一个用 flex 编写的词法分析器 它将标记传递给用 bison 编写的解析器 以下是我的词法分析器的一小部分 ID a z a z0 9 rule printf A rule s n yytext return RULE ID pri
  • 使用 neo4j 建模有序树

    我刚刚开始使用 neo4j 并且了解图形和关系的原理 但是我在想要建模的某些结构方面遇到了一些麻烦 我想在编程语言项目中使用它 并存储已解析源文件的 AST 从那里 我计划向节点添加大量额外的数据和关系 以帮助分析和工具 但基本的 AST
  • 将箱线图与 Wilcoxon 检验进行比较

    我正在使用 R 中的 ggplot2 包比较两组长度 不同的个体 和箱线图 我想比较这两个分布 但到目前为止我发现使用 wilcoxon 测试的唯一方法是 ggpubr 包中的 stat compare means 这是比较分布的正确方法吗
  • 汇编基础知识:输出寄存器值

    我刚刚开始学习汇编语言 我已经陷入了 在屏幕上显示存储在寄存器中的十进制值 的部分 我使用 emu8086 任何帮助将不胜感激 model small Specifies the memory model used for program
  • Python:从 apache authnz_ldap 获取用户

    我正在通过 Apache2 的 authnz ldap 模块成功验证 ldap 用户 我不清楚如何在他们登录后获取他们的用户名 以便我可以通过任何以下表单 网页与他们交互 我尝试过典型的方法 os getenv os environ get
  • Rvest 从 select 中提取选项值和文本

    Rvest 选择选项 我认为用可重现的示例来解释是最简单的 网站 http www verema com vinos portada http www verema com vinos portada我想获取葡萄酒的类型 Tipos de
  • Mac OS X 上的 Python 框架和非框架构建之间的差异

    Question Mac OS X 上的 Python 框架构建和非框架构建 即标准 UNIX 构建 之间有什么区别 另外 各自的优点和缺点是什么 初步研究 以下是我在发布此问题之前找到的信息 Pythonmac SIG Why is Fr
  • Typescript / Angular 2:类型中缺少属性

    我对 Typescript 还很陌生 并且很难理解界面 据我了解 接口是类型描述或类的契约 它允许我定义类可以具有哪些属性以及它们的类型 我尝试实现这一点 但总是收到此错误 error TS2420 Class ResultPage inc
  • XPath 节点到字符串

    如何选择以下节点的字符串内容 span class url word b class test b span span class url word b class test2 b more words span 我尝试过一些事情 span
  • 独立 Symfony2 包内的功能测试

    我需要直接在独立包中进行一些功能测试 我不想测试控制器 只是测试真实服务之间的一些交互 我想知道是否有标准 最佳方法可以做到这一点 我用一种方法做到了 但想知道是否有更好的方法 这是我自己的解决方案 我总结了在独立包中测试的所有过程 1 首
  • 一个文件夹中的多个 htaccess 文件,还是条件 AuthType Basic?

    我在本地服务器和实时服务器上使用相同的 htaccess 文件 并希望在测试服务器上使用相同的文件 以使代码管理更容易 目前 虽然我必须有一个不同的文件 因为我的测试服务器具有 htaccess 密码访问权限 AuthType Basic
  • Android 6.0.1 无法以编程方式启用 wifi 热点

    当我尝试通过以下代码启用 wifi 网络共享时 它会抛出异常 com java lang reflect Method invoke Native Method 处的 java lang reflect InitationTargetExc
  • 在 Spark 中分发 scikit learn 分类器的推荐方法是什么?

    我已经使用 scikit learn 构建了一个分类器 现在我想使用 Spark 在大型数据集上运行 Predict proba 我目前使用以下方法对分类器进行腌制 import pickle pickle dump clf open cl