跳转到主要内容

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

项目描述

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

Development Status PyPi Shield Tests Downloads Binder

MLPrimitives

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

概述

此存储库包含用于MLBlocks库的原始注释,以及使其中一些与MLBlocks API要求完全兼容的必要Python代码。

此外,此库还收集了直接贡献给此库的定制原始组件,这些组件要么结合第三方工具,要么从头实现新功能。

我们为什么要创建这个库?

  • 快速发展的领域中有太多库
  • 巨大的社会需求来构建机器学习应用程序
  • 领域专业知识存在于几个地方(数学知识)
  • 没有关于超参数、行为等方面的文档信息

安装

需求

MLPrimitives 已在 Python 3.8、3.9、3.10 和 3.11 上开发和测试

此外,尽管这不是严格要求的,但为了防止与在运行MLPrimitives的系统上安装的其他软件发生冲突,强烈建议使用 virtualenv

使用pip安装

安装MLPrimitives最简单、推荐的方法是使用 pip

pip install mlprimitives

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

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

快速入门

本节是一系列简短的教程,旨在帮助您开始使用MLPrimitives。

在以下步骤中,您将学习如何加载和运行一些数据上的原始组件。

稍后,您将学习如何通过调整超参数来评估和改进原始组件的性能。

运行原始组件

在本教程中,我们将执行一个用于数据转换的单个原始组件。

1. 加载原始组件

运行原始组件的第一步是加载它。

这将使用 mlprimitives.load_primitive 函数完成,该函数将加载指定的原始组件作为来自MLBlocks的 MLBlock对象

在这种情况下,我们将加载 mlprimitives.custom.feature_extraction.CategoricalEncoder 原始组件。

from mlprimitives import load_primitive

primitive = load_primitive('mlprimitives.custom.feature_extraction.CategoricalEncoder')

2. 加载一些数据

CategoricalEncoder 是一个转换原始组件,它将所有分类列应用于 one-hot 编码。

因此,为了能够运行我们的原始组件,我们首先需要加载包含分类列的数据。

这可以通过使用 mlprimitives.datasets.load_census 函数完成

from mlprimitives.datasets import load_census

dataset = load_census()

此数据集对象具有一个名为 data 的属性,其中包含具有多个分类列的表格。

我们可以通过执行 dataset.data.head() 来查看此表,它将返回一个类似以下的表格

                             0                    1                   2
age                         39                   50                  38
workclass            State-gov     Self-emp-not-inc             Private
fnlwgt                   77516                83311              215646
education            Bachelors            Bachelors             HS-grad
education-num               13                   13                   9
marital-status   Never-married   Married-civ-spouse            Divorced
occupation        Adm-clerical      Exec-managerial   Handlers-cleaners
relationship     Not-in-family              Husband       Not-in-family
race                     White                White               White
sex                       Male                 Male                Male
capital-gain              2174                    0                   0
capital-loss                 0                    0                   0
hours-per-week              40                   13                  40
native-country   United-States        United-States       United-States

3. 调整原始组件

为了运行我们的管道,我们首先需要调整它。

这是一个分析数据以检测哪些列是分类的过程

这是通过调用其 fit 方法并将 dataset.data 作为 X 分配来完成的。

primitive.fit(X=dataset.data)

4. 产生结果

一旦管道拟合成功,我们可以通过调用原始实例的 produce 方法来处理数据,并将 data 作为 X 传递。

transformed = primitive.produce(X=dataset.data)

完成此操作后,我们可以看到转换后的数据中包含了新生成的独热向量。

                                                0      1       2       3       4
age                                            39     50      38      53      28
fnlwgt                                      77516  83311  215646  234721  338409
education-num                                  13     13       9       7      13
capital-gain                                 2174      0       0       0       0
capital-loss                                    0      0       0       0       0
hours-per-week                                 40     13      40      40      40
workclass= Private                              0      0       1       1       1
workclass= Self-emp-not-inc                     0      1       0       0       0
workclass= Local-gov                            0      0       0       0       0
workclass= ?                                    0      0       0       0       0
workclass= State-gov                            1      0       0       0       0
workclass= Self-emp-inc                         0      0       0       0       0
...                                             ...    ...     ...     ...     ...

调整原始组件

在本简短教程中,我们将向您介绍如何评估原始组件的性能,并通过修改其超参数来提高其性能。

为此,我们将加载一个可以从我们刚才生成的转换数据中学习的原始组件,并随后根据新数据进行预测。

1. 加载另一个原始组件

首先,我们将加载后续将使用的 xgboost.XGBClassifier 原始组件。

primitive = load_primitive('xgboost.XGBClassifier')

2. 划分数据集

在能够评估原始组件性能之前,我们需要将数据分为两部分:用于原始组件学习的训练集和用于制作预测的测试集。

为此,我们将从上面获得的转换数据中获取前 75% 的行,将其称为 X_train,然后设置接下来的 25% 行为 X_test

train_size = int(len(transformed) * 0.75)
X_train = transformed.iloc[:train_size]
X_test = transformed.iloc[train_size:]

同样,我们需要获取包含相应输出值的 y_trainy_test 变量。

y_train = dataset.target[:train_size]
y_test = dataset.target[train_size:]

3. 拟合新的原始组件

数据划分完成后,我们可以通过将 X_trainy_train 传递给其 fit 方法来拟合原始组件。

primitive.fit(X=X_train, y=y_train)

4. 进行预测

原始组件拟合后,我们可以使用 X_test 数据作为输入来生成预测。

predictions = primitive.produce(X=X_test)

5. 评估性能

现在,我们可以通过使用 dataset 对象的 score 方法来评估我们的原始组件的预测效果,该方法是针对期望输出和原始组件的实际输出进行的。

dataset.score(y_test, predictions)

这将输出一个介于 0 和 1 之间的浮点值,表示预测的好坏,0 是最差的分数,1 是最好的分数。

在这种情况下,我们将获得大约 0.866 的分数。

6. 设置新的超参数值

为了提高原始组件的性能,我们将尝试修改其几个超参数。

首先,我们将通过调用其 get_hyperparameters 方法来查看原始组件的哪些超参数值。

primitive.get_hyperparameters()

它将返回如下字典

{
    "n_jobs": -1,
    "n_estimators": 100,
    "max_depth": 3,
    "learning_rate": 0.1,
    "gamma": 0,
    "min_child_weight": 1
}

接下来,我们将通过调用其 get_tunable_hyperparameters 方法来查看每个超参数的有效值

primitive.get_tunable_hyperparameters()

例如,我们将看到 max_depth 超参数具有以下规范

{
    "type": "int",
    "default": 3,
    "range": [
        3,
        10
    ]
}

接下来,我们将选择一个有效值,例如 7,并使用 set_hyperparameters 方法将其设置到管道中

primitive.set_hyperparameters({'max_depth': 7})

7. 重新评估性能

一旦设置了新的超参数值,我们将重复拟合/训练/评分周期,以评估该新超参数值的性能。

primitive.fit(X=X_train, y=y_train)
predictions = primitive.produce(X=X_test)
dataset.score(y_test, predictions)

这一次,我们应该看到性能已提高至大约 0.724 的值。

接下来是什么?

您想了解更多关于项目的信息吗?关于如何 入门,关于 如何贡献 或浏览 API 参考?请查阅相应的 文档 部分!

历史

0.4.0 - 2024-03-22

一般改进

  • 升级 Python 版本 3.9、3.10 和 3.11 - 由 @sarahmish 通过 问题 #279
  • 适应 statsmodels.tsa.arima_model.ARIMA 废弃

0.3.5 - 2023-04-14

一般改进

  • 更新 mlblocks 限制 - 由 @sarahmish 通过 问题 #278

0.3.4 - 2023-01-24

一般改进

  • 更新 mlblocks 限制 - 由 @sarahmish 通过 问题 #277

0.3.3 - 2023-01-20

一般改进

适配器改进

  • 在keras适配器中构建模型 - 问题 #267 由 @sarahmish 提出

0.3.2 - 2021-11-09

适配器改进

  • 使用单维度推断keras适配器中的数据形状 - 问题 #265 由 @sarahmish 提出

0.3.1 - 2021-10-07

适配器改进

  • keras适配器中的动态target_shape - 问题 #263 由 @sarahmish 提出
  • 在Windows环境中保存keras原语 - 问题 #261 由 @sarahmish 提出

一般改进

  • 更新TensorFlow和NumPy依赖关系 - 问题 #259 由 @sarahmish 提出

0.3.0 - 2021-01-09

新原语

  • 添加原语 sklearn.naive_bayes.GaussianNB - 问题 #242 由 @sarahmish 提出
  • 添加原语 sklearn.linear_model.SGDClassifier - 问题 #241 由 @sarahmish 提出

原语改进

  • 向rolling_window_sequence原语添加偏移量 - 问题 #251 由 @skyeeiskowitz 提出
  • 将time_index列重命名为time - 问题 #252 由 @pvk-developer 提出
  • 更新featuretools依赖关系 - 问题 #250 由 @pvk-developer 提出

总体改进

  • 更新依赖关系并添加python3.8 - 问题 #246 由 @csala 提出
  • 删除Python35 - 问题 #244 由 @csala 提出

0.2.5 - 2020-07-29

原语改进

  • 在cutoff_window_sequences中接受timedelta window_size - 问题 #239 由 @joanvaquer 提出

错误修复

  • ImportError: Keras需要TensorFlow 2.2或更高版本。通过pip install tensorflow安装TensorFlow - 问题 #237 由 @joanvaquer 提出

新原语

  • 添加pandas.DataFrame.set_index原语 - 问题 #222 由 @JDTheRipperPC 提出

0.2.4 - 2020-01-30

新原语

  • 添加RangeScaler和RangeUnscaler原语 - 问题 #232 由 @csala 提出

原语改进

  • 从keras.Sequential中的X中提取input_shape - 问题 #223 由 @csala 提出

错误修复

  • 如果文本为空,mlprimitives.custom.text.TextCleaner失败 - 问题 #228 由 @csala 提出
  • 加载评论数据集时出错 - 问题 #230 由 @csala 提出
  • 精炼依赖关系:指定一个明确的prompt-toolkit版本范围 - 问题 #224 由 @csala 提出

0.2.3 - 2019-11-14

新原语

  • 添加基于截止时间的window_sequences原语 - 问题 #217 由 @csala 提出
  • 创建基于keras LSTM的TimeSeriesClassifier原语 - 问题 #218 由 @csala 提出
  • 添加pandas DataFrame原语 - 问题 #214 由 @csala 提出
  • 添加featuretools.EntitySet.normalize_entity原语 - 问题 #209 由 @csala 提出

原语改进

  • 将featuretools.EntitySet.entity_from_dataframe的entityset参数设为可选 - 问题 #208 由 @csala 提出

  • 添加文本回归数据集 - 问题 #206 由 @csala 提出

错误修复

  • 当按整数列分组时,pandas.DataFrame.resample崩溃 - 问题 #211 由 @csala 提出

0.2.2 - 2019-10-08

新原语

  • 添加基于GAN的时间序列异常检测原语 - 问题 #200 由 @AlexanderGeiger 提出
  • 添加numpy.reshapenumpy.ravel原语 - 问题 #197 由 @AlexanderGeiger 提出
  • 添加基于Lasso的特征选择原语 - 问题 #194 由 @csala 提出

原语改进

  • 支持dtype category的feature_extraction.CategoricalEncoder - 问题 #196 由 @csala 提出

0.2.1 - 2019-09-09

新原语

  • 屏蔽原始数据的时序区间 - 问题 #186 由 @AlexanderGeiger 提出。
  • 添加新原始数据:ARIMA模型 - 问题 #168 由 @AlexanderGeiger 提出。

原语改进

  • 整理PCA原始数据的超参数 - 问题 #190 由 @AlexanderGeiger 提出。
  • 添加删除滚动窗口序列的选项 - 问题 #186 由 @AlexanderGeiger 提出。

错误修复

  • scikit-image==0.14.3在Mac上安装时崩溃 - 问题 #188 由 @csala 提出。

0.2.0

新功能

  • 将管道作为entry_point发布 - 问题 #175 由 @csala 提出。

原语改进

  • 改进pandas.DataFrame.resample原始数据 - 问题 #177 由 @csala 提出。
  • 改进feature_extractor原始数据 - 问题 #183 由 @csala 提出。
  • 改进find_anomalies原始数据 - 问题 #180 由 @AlexanderGeiger 提出。

错误修复

  • 原始数据keras.Sequential.LSTMTimeSeriesRegressor中的错别字 - 问题 #176 由 @DanielCalvoCerezo 提出。

0.1.10

新功能

  • 添加在没有管道的情况下运行原始数据的函数 - 问题 #43 由 @csala 提出。

新管道

  • 为所有MLBlocks示例添加管道 - 问题 #162 由 @csala 提出。

原语改进

  • 将Early Stopping添加到keras.Sequential.LSTMTimeSeriesRegressor原始数据 - 问题 #156 由 @csala 提出。
  • 使FeatureExtractor原始数据接受Numpy数组 - 问题 #165 由 @csala 提出。
  • 将窗口大小和剪枝添加到timeseries_anomalies.find_anomalies原始数据 - 问题 #160 由 @csala 提出。

0.1.9

新功能

  • 添加单个表的二进制分类数据集 - 问题 #141 由 @csala 提出。

新原语

  • 为二进制分类添加多层感知器(MLP)原始数据 - 问题 #140 由 @Hector-hedb12 提出。
  • 添加使用LSTM进行序列分类的原始数据 - 问题 #150 由 @Hector-hedb12 提出。
  • 添加类似VGG的卷积网络原始数据 - 问题 #149 由 @Hector-hedb12 提出。
  • 为多类softmax分类添加多层感知器(MLP)原始数据 - 问题 #139 由 @Hector-hedb12 提出。
  • 添加计算特征矩阵列数的原始数据 - 问题 #146 由 @csala 提出。

原语改进

  • 为keras.Sequential添加额外的fit和predict参数 - 问题 #161 由 @csala 提出。
  • 为keras.Sequential Callbacks添加支持 - 问题 #159 由 @csala 提出。
  • 添加用于控制keras.Sequential冗余的固定超参数 - 问题 #143 由 @csala 提出。

0.1.8

新原语

新功能

  • 在timseries_preprocessing.rolling_window_sequences中添加target_index输出 - 问题 #136

0.1.7

总体改进

新原语

错误修复

0.1.6

总体改进

  • 添加贡献文档
  • 移除 pandas 版本的限制,因为新的 featuretools v0.6.1 版本已发布
  • 优化 LSTMTimeSeriesRegressor 的超参数

新原语

  • mlprimitives.candidates.dsp.SpectralMask
  • mlprimitives.custom.timeseries_anomalies.find_anomalies
  • mlprimitives.custom.timeseries_anomalies.regression_errors
  • mlprimitives.custom.timeseries_preprocessing.rolling_window_sequences
  • mlprimitives.custom.timeseries_preprocessing.time_segments_average
  • sklearn.linear_model.ElasticNet
  • sklearn.linear_model.Lars
  • sklearn.linear_model.Lasso
  • sklearn.linear_model.MultiTaskLasso
  • sklearn.linear_model.Ridge

0.1.5

新原语

  • sklearn.impute.SimpleImputer
  • sklearn.preprocessing.MinMaxScaler
  • sklearn.preprocessing.MaxAbsScaler
  • sklearn.preprocessing.RobustScaler
  • sklearn.linear_model.LinearRegression

总体改进

  • 将精选和候选原语分开
  • 在 setup.py 中设置 entry_points 以提高与 MLBlocks 的兼容性
  • 添加测试管道命令以测试所有现有管道
  • 清理 sklearn 示例管道
  • author 条目更改为 contributors 列表
  • 更改 mlblocks_primitives 文件夹的名称
  • 安装 requirements_dev.txt 失败的文档

错误修复

  • 修复 LSTMTimeSeriesRegressor 原语。问题 #90
  • 修复 timeseries 原语。问题 #91
  • timeseries_errors 中的负索引异常。问题 #89
  • 保持 pandas 版本低于 0.24.0。问题 #87

0.1.4

新原语

  • mlprimitives.timeseries 原语用于 timeseries 数据预处理
  • mlprimitives.timeseres_error 原语用于 timeseries 异常检测
  • keras.Sequential.LSTMTimeSeriesRegressor
  • sklearn.neighbors.KNeighbors 分类器和回归器
  • 几个 sklearn.decomposition 原语
  • 几个 sklearn.ensemble 原语

错误修复

  • 修复 mlprimitives.text.TextCleaner 原语中的拼写错误
  • 修复 featuretools.dfs 原语中索引处理中的错误
  • 修复 SingleLayerCNNImageClassifier 注释中的错误
  • 从 JSON 注释中删除旧的有效性标签

0.1.3

新功能

  • 修复并重新启用 featuretools.dfs 原语。

0.1.2

新功能

  • 添加管道规范语言和评估工具。
  • 添加针对图形、文本和表格问题的管道。
  • 新原语 ClassEncoder 和 ClassDecoder
  • 新原语 UniqueCounter 和 VocabularyCounter

错误修复

  • 修复 TrivialPredictor 在处理 numpy 数组时的错误
  • 更改 XGB 默认学习率和估计器数量

0.1.1

新功能

  • 添加更多 keras.applications 原语。
  • 添加文本清理原语。

错误修复

  • keras.preprocessing 原语添加关键字。
  • 修复 image_transform 方法。
  • keras.Sequential 原语添加 epoch 作为固定超参数。

0.1.0

  • 首次在 PyPI 上发布。

项目详情


下载文件

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

源代码分发

mlprimitives-0.4.0.tar.gz (111.8 kB 查看哈希值)

上传时间 源代码

构建分发

mlprimitives-0.4.0-py2.py3-none-any.whl (184.7 kB 查看哈希值)

上传时间 Python 2 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面