跳转到主要内容

机器学习和数据科学管道和原语。

项目描述

DAI-Lab 来自麻省理工学院数据到AI实验室的开源项目

“MLBlocks”

机器学习和数据科学的流水线和原语。

Development Status PyPi Tests CodeCov Downloads Binder


MLBlocks

概述

MLBlocks是一个简单的框架,通过简单、通用和统一的接口,无缝地将任何Python库中的工具组合起来,以构建端到端的可调机器学习流水线。

功能包括

  • 构建结合Python中任何机器学习库的机器学习流水线。
  • 访问一个包含数百个原语和流水线的存储库,这些原语和流水线可用于Python代码编写,由机器学习和领域专家精心策划。
  • 提取关于哪些超参数可以调整以及调整范围的可读信息,允许与超参数优化工具(如BTB)的自动化集成。
  • 支持复杂的多分支流水线和DAG配置,每个原语可以有无限数量的输入和输出。
  • 使用JSON注释轻松保存和加载流水线。

安装

要求

MLBlocks已在Python 3.6, 3.7, 3.8, 3.9, 和 3.10上开发和测试

使用pip安装

安装MLBlocks最简单和推荐的方法是使用pip

pip install mlblocks

这将从PyPi拉取并安装最新稳定版本。

如果您想从源安装或为项目做出贡献,请阅读贡献指南

MLPrimitives

为了能够使用,MLBlocks需要一个兼容的原语库。

官方库,需要遵循以下MLBlocks教程,是MLPrimitives,您可以使用此命令安装

pip install mlprimitives

快速入门

以下是使用来自MLPrimitivesscikit-learnxgboost的原语结合的流水线解决成人人口普查数据集分类问题的简短示例。

import pandas as pd
from mlblocks import MLPipeline
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

dataset = pd.read_csv('http://mlblocks.s3.amazonaws.com/census.csv')
label = dataset.pop('label')

X_train, X_test, y_train, y_test = train_test_split(dataset, label, stratify=label)

primitives = [
    'mlprimitives.custom.preprocessing.ClassEncoder',
    'mlprimitives.custom.feature_extraction.CategoricalEncoder',
    'sklearn.impute.SimpleImputer',
    'xgboost.XGBClassifier',
    'mlprimitives.custom.preprocessing.ClassDecoder'
]
pipeline = MLPipeline(primitives)

pipeline.fit(X_train, y_train)
predictions = pipeline.predict(X_test)

accuracy_score(y_test, predictions)

接下来是什么?

如果您想了解更多关于如何调整流水线超参数、使用JSON注释保存和加载流水线或构建复杂的多分支流水线的信息,请查看我们的文档网站

还请务必查看笔记本教程

引用MLBlocks

如果您在研究中使用了MLBlocks,请考虑引用我们的相关论文。

关于MLBlocks的当前设计和其在麻省理工学院数据到AI实验室的更大项目“机器学习集市”中的使用,请参阅

Micah J. Smith,Carles Sala,James Max Kanter和Kalyan Veeramachaneni。 "机器学习集市:利用机器学习生态系统进行有效系统开发。" arXiv预印本1905.08942. 2019。

@article{smith2019mlbazaar,
  author = {Smith, Micah J. and Sala, Carles and Kanter, James Max and Veeramachaneni, Kalyan},
  title = {The Machine Learning Bazaar: Harnessing the ML Ecosystem for Effective System Development},
  journal = {arXiv e-prints},
  year = {2019},
  eid = {arXiv:1905.08942},
  pages = {arXiv:1905.08942},
  archivePrefix = {arXiv},
  eprint = {1905.08942},
}

有关2015年的第一个MLBlocks版本,该版本仅适用于多表、多实体的时序数据,请参阅Bryan Collazo的论文。

随着众多库和工具的近期可用性,我们决定将它们集成并扩展库以支持其他数据类型:图像、文本、图、时间序列,并与深度学习库集成。

变更日志

0.6.1 - 2023-09-26

  • 将 Python 3.11 添加到 MLBlocks - 问题 #143 由 @sarahmish 提出

0.6.0 - 2023-04-14

  • 支持 Python 3.9 和 3.10 - 问题 #141 由 @sarahmish 提出

0.5.0 - 2023-01-22

  • 更新 numpy 依赖项并隔离测试 - 问题 #139 由 @sarahmish 提出

0.4.1 - 2021-10-08

  • 更新 NumPy 依赖项 - 问题 #136 由 @sarahmish 提出
  • 支持动态输入和输出 - 问题 #134 由 @pvk-developer 提出

0.4.0 - 2021-01-09

  • 在最后一个模块后停止管道拟合 - 问题 #131 由 @sarahmish 提出
  • 添加内存调试和性能分析 - 问题 #130 由 @pvk-developer 提出
  • 更新 Python 支持 - 问题 #129 由 @csala 提出
  • 获取每个模块的执行时间 - 问题 #127 由 @sarahmish 提出
  • 允许直接从 JSON 路径加载原始模块或管道 - 问题 #114 由 @csala 提出
  • 管道图 - 问题 #113 由 @erica-chiu 提出
  • 获取管道输入 - 问题 #112 由 @erica-chiu 提出

0.3.4 - 2019-11-01

  • 能够返回中间上下文 - 问题 #110 由 @csala 提出
  • 支持静态或类方法 - 问题 #107 由 @csala 提出

0.3.3 - 2019-09-09

  • 改进中间输出管理 - 问题 #105 由 @csala 提出

0.3.2 - 2019-08-12

  • 允许将 fit 和 produce 参数作为 init_params 传递 - 问题 #96 由 @csala 提出
  • 支持可选的 fit 和 produce 参数及其默认值 - 问题 #95 由 @csala 提出
  • 将原始模块与其超参数字典隔离 - 问题 #94 由 @csala 提出
  • 添加功能以探索可用的原始模块和管道 - 问题 #90 由 @csala 提出
  • 添加原始模块缓存 - 问题 #22 由 @csala 提出

0.3.1 - 管道发现

  • 支持扁平化超参数字典 - 问题 #92 由 @csala 提出
  • 按名称加载管道并将它们注册为 entry_points - 问题 #88 由 @csala 提出
  • 实现部分重新拟合 -问题 #61 由 @csala 提出
  • 将参数解析移至 MLBlock - 问题 #86 由 @csala 提出
  • 允许获取中间输出 - 问题 #58 由 @csala 提出

0.3.0 - 新的原始模块发现

  • 基于 entry_points 的新原始模块发现系统。
  • 在 MLBlock 初始化中进行条件超参数过滤。
  • 改进日志记录和异常报告。

0.2.4 - 新的数据集和单元测试

  • 添加一个新的多表数据集。
  • 添加单元测试,覆盖率高达 50%。
  • 改进文档。
  • 修复新闻组数据集中的小错误。

0.2.3 - 示例数据集

  • 添加数据集类的新的方法。
  • 为数据集模块添加文档。

0.2.2 - MLPipeline 加载/保存

  • 实现 MLPipelines 的保存和加载方法
  • 添加更多数据集

0.2.1 - 新文档

  • 添加带有演示数据下载功能的 mlblocks.datasets 模块。
  • 全面文档,包括多个管道示例。

0.2.0 - 新 MLBlocks API

新的 MLBlocks API 和原始格式。

以下是更改的摘要

  • 原始 JSONs 和 Python 代码已移动到名为 MLPrimitives 的不同存储库。
  • 可选使用多个 JSON 原始文件夹。
  • JSON 格式已更改,以允许更多灵活性和功能。
    • 可以为每个方法指定输入和输出参数,以及参数类型。
    • 支持作为原始数据类和函数。
    • 完全支持多类型和条件超参数。
    • 引入数据模态和原始分类器。
    • 添加了文档、描述和作者字段的元数据。
  • 移除了解析器,现在 MLBlock 类负责加载和读取 JSON 原始数据。
  • 在同一个管道中支持相同原始数据的多个块。
  • 允许管道和块有任意输入和输出。
  • 管道执行期间的共享变量,可由多个块使用。

0.1.9 - 错误修复发布

  • 禁用一些与某些类型图不兼容的 NetworkX 函数。

0.1.8 - 新原始数据和一些改进

  • 改进 NetworkX 原始数据。
  • 添加字符串向量和日期时间特征化原始数据。
  • 重构一些 Keras 原始数据以与单个维度的 y 数组兼容,并兼容 pickle
  • 添加 XGBClassifier 和 XGBRegressor 原始数据。
  • 添加一些 keras.applications 预训练网络作为预处理原始数据。
  • 添加辅助类以允许函数原始数据。

0.1.7 - 嵌套超参数字典

  • 支持以嵌套字典的形式传递超参数。

0.1.6 - 文本和图管道

  • 添加 LSTM 分类器和回归器原始数据。
  • 添加 OneHotEncoder 和 MultiLabelEncoder 原始数据。
  • 添加几个 NetworkX 图特征化原始数据。
  • 添加 community.best_partition 原始数据。

0.1.5 - 协同过滤管道

  • 添加 LightFM 原始数据。

0.1.4 - 图像管道改进

  • 在创建 MLPipeline 时允许传递 init_params
  • 修复 MLHyperparam 类型与 Keras 的错误。
  • produce_params 重命名为 predict_params
  • 添加 SingleCNN 分类器和回归器原始数据。
  • 简化并改进了平凡的预测器。

0.1.3 - 多表格管道改进

  • 改进 RandomForest 原始数据范围。
  • 改进 DFS 原始数据。
  • 添加基于树的特征选择原始数据。
  • 修复 TrivialPredictor 中的错误。
  • 改进文档。

0.1.2 - 错误修复发布

  • 修复 TrivialMedianPredictor 中的错误。
  • 修复 OneHotLabelEncoder 中的错误。

0.1.1 - 单表格管道改进

  • 新的项目结构和原始数据,以便集成到 MIT-TA2。
  • MIT-TA2 默认管道和单表格管道完全正常工作。

0.1.0

  • 在 PyPI 上的第一个版本。

项目详情


下载文件

下载适用于您平台的应用文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源代码分发

mlblocks-0.6.1.tar.gz (79.4 kB 查看散列值)

上传时间 源代码

构建分发

mlblocks-0.6.1-py2.py3-none-any.whl (25.7 kB 查看散列值)

上传时间 Python 2 Python 3

由以下支持