机器学习和数据科学管道和原语。
项目描述
MLPrimitives
机器学习和数据科学管道和原语。
- 文档: https://MLBazaar.github.io/MLPrimitives
- Github: https://github.com/MLBazaar/MLPrimitives
- 许可: MIT
- 开发状态: 预Alpha
概述
此存储库包含用于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_train
和 y_test
变量。
y_train = dataset.target[:train_size]
y_test = dataset.target[train_size:]
3. 拟合新的原始组件
数据划分完成后,我们可以通过将 X_train
和 y_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 废弃
- 由 @sarahmish 通过 问题 #253
0.3.5 - 2023-04-14
一般改进
- 更新
mlblocks
限制 - 由 @sarahmish 通过 问题 #278
0.3.4 - 2023-01-24
一般改进
- 更新
mlblocks
限制 - 由 @sarahmish 通过 问题 #277
0.3.3 - 2023-01-20
一般改进
- 更新依赖项 - 由 @sarahmish 通过 问题 #276
适配器改进
- 在keras适配器中构建模型 - 问题 #267 由 @sarahmish 提出
0.3.2 - 2021-11-09
适配器改进
- 使用单维度推断keras适配器中的数据形状 - 问题 #265 由 @sarahmish 提出
0.3.1 - 2021-10-07
适配器改进
一般改进
- 更新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 提出
总体改进
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.reshape
和numpy.ravel
原语 - 问题 #197 由 @AlexanderGeiger 提出 - 添加基于Lasso的特征选择原语 - 问题 #194 由 @csala 提出
原语改进
- 支持dtype category的
feature_extraction.CategoricalEncoder
- 问题 #196 由 @csala 提出
0.2.1 - 2019-09-09
新原语
原语改进
错误修复
- 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
新原语
- 在
make lint
中验证JSON格式 - 问题 #133
新功能
- 在timseries_preprocessing.rolling_window_sequences中添加target_index输出 - 问题 #136
0.1.7
总体改进
新原语
- pandas.DataFrame.resample - 问题 #123
- pandas.DataFrame.unstack - 问题 #124
- featuretools.EntitySet.add_relationship - 问题 #126
- featuretools.EntitySet.entity_from_dataframe - 问题 #126
错误修复
- timeseries_anomalies.py中的错误 - 问题 #119
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的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ab21127d107b89a59405af7685e9811702469fb8b2d823ba7b4495c5dd3a656f |
|
MD5 | 96b3b3caaaadb3bcee6ba04d357685da |
|
BLAKE2b-256 | a83537efd89007fc99e0adf0cd4df1dc1cf0e75655475a93114a24e30bf5a1fa |
mlprimitives-0.4.0-py2.py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 22d035c9ac500bb8a62296384fafd2e45397e38fbf4632e00b6ec1b3071f85a1 |
|
MD5 | 21687f935b28e358b7de1b82c36a7a23 |
|
BLAKE2b-256 | 0dc981988ffa2a135f198a9fe2c3aab4186d2d204926c3c09eeed46f20c8c6d7 |