Pandio 的机器学习库。
项目描述
PandioML - Pandio.com 机器学习
该存储库包含 PandioML Python 库,用于为流数据开发和部署机器学习。
在高层次上,PandioML 提供了三件事:
-
管道
基于管道的传统
scikit-learn管道。 -
数据集
将任何数据源连接并流式传输到管道中。
-
管道和数据集的自动化
用于
pandiocli本地自动化或在由Apache Pulsar和Presto/ Trino 支持的 Pandio.com 平台上实现自动化。
快速链接
Pandio.com/PandioML - Pandio.com -入门-快速入门- PyPi PandioML - PyPi PandioCLI
关于 PandioML
增量学习
随着数据的流入,流式学习模型会逐渐创建并不断更新。它们在实时环境中非常强大,但也可以替代传统机器学习。
自适应学习
由于增量学习的自适应性,数据分布变化对流学习模型的概念漂移影响要小得多。
资源高效
由于增量学习,训练模型所需的处理时间和内存要少得多。
便于使用
PandioML 基于 scikit-learn,易于上手。
开源
基于强大的开源技术本身,PandioML 在SSPL License下发布。
人工智能编排
PandioCLI 不仅仅是一个 Python 库,它还可以轻松地将 PandioML 管道和模型打包和部署到 Pandio 平台。
用例
监督学习
处理标记数据时。根据目标类型可以是分类(离散值)或回归(连续值)
单输出和多输出
单输出方法预测用于分类的单个目标标签(二元或多类)或用于回归的单个目标值。多输出方法在给定输入的情况下同时预测多个变量。
概念漂移检测
数据分布的变化会损害学习。漂移检测方法旨在在存在漂移时发出警报,并与学习方法一起使用,以提高它们在不断变化的数据流中对这种现象的鲁棒性。
无监督学习
处理未标记数据时。例如,异常检测的目标是识别与大多数数据显着不同的罕见事件或样本。
建筑管道
类固醇上的 Scikit-learn 管道!熟悉的语法和更多的辅助方法,使构建和调试管道更容易。
部署模型
编写(或重用)您的管道和模型后,使用单个命令部署到 Pandio 的 AI 编排平台。您的模型现在可用于任何规模的生产用途!
我们的理念
PandioML 的存在是为了提供从访问数据、开发管道和尽快部署到生产的全功能体验。
我们的重点是易于使用、快速迭代和将单命令部署到生产环境。该库旨在自动化除实际数据科学之外的所有内容,以优化管道开发。对于实际的数据科学,重点是可访问性。40 多种算法、数十种指标和统计数据以及强大的管道框架可以节省大量时间。
PandioML 的最后一个核心思想是将其保持在尽可能低的水平。图书馆经常试图将事物抽象化以使事情变得简单,但根据我们的经验,它只会使事情复杂化。它可能会使一些事情变得更容易,或者不需要编写更多代码,但是当需要调试或审计时,深入了解正在发生的事情变得非常痛苦。
这个图书馆是为所有人准备的,从零经验到该领域的专家。
关于 Pandio.com
Pandio 是一个 AI 编排平台,可帮助公司加速其 AI 计划。以无与伦比的速度和规模连接数据、构建管道、训练模型和部署模型。
要求
蟒蛇 3.5 - 3.8
画中画 > 20.0.0
Docker(或 Docker 桌面)
这个怎么运作
PandioML 建立在 Pandio.com AI 编排平台之上。对于 PandioML 而言,这意味着有两件事支持 PandioML 项目的部署。
-
分布式消息
这是提供输入主题和输出主题的流、队列或发布订阅的概念。PandioML 项目位于输入主题和输出主题之间。
这意味着要接收预测,必须在输入主题上放置一条消息。然后将结果放在项目
config.py文件中定义的输出主题上。 -
无服务器函数
这是一个在 Kubernetes 环境中运行 PandioML 项目的计算框架。
当您使用 PandioML 构建机器学习时,您会在每次部署项目时自动获得一个完全可扩展的生产环境。
当您在本地工作时,会模拟这些组件以允许在使用单个命令将项目部署到生产之前进行快速迭代。
这是 PandioML 最强大的功能之一。您在培训、迭代、评估等方面的本地开发与您将作为微服务部署到 Pandio.com 的管道相同。您不必担心将其打包为微服务,使用 PandioML 和 PandioCLI 工具可以为您完成所有这些工作。
指南
- 入门
- 快速开始
- 管道
- 数据集
- 指标
- 统计数据
- 模式和模式注册表
- 完整形式的欺诈示例
- 完整电影分级示例
- 完整的信用卡欺诈管道示例
- 完整的信用卡欺诈数据集示例
- 如何加载模型
- 超参数调优
- 完整的潜在客户评分管道示例
- 完整的潜在客户评分数据集示例
PandioML
安装
pip install pandioml
要在本地运行管道,需要 Docker。
Docker 无需在您的计算机上安装复杂的数据科学环境。
在这里免费获取:https ://www.docker.com/products/docker-desktop
文档
模型
该pandioml.model.*模块处理所有可用的算法和模型。
| 模块 | 描述 |
|---|---|
| 高斯NB | 高斯朴素贝叶斯 |
| 多项式NB | 多项模型的朴素贝叶斯分类器。 |
| 补充NB | 多项模型的朴素贝叶斯分类器。 |
| 伯努利NB | 伯努利朴素贝叶斯。 |
| K-均值 | 增量 k 均值。 |
| ADWINBaggingClassifier | ADWIN Bagging 分类器。 |
| 装袋分类器 | 用于分类的在线引导聚合。 |
| BaggingRegressor | 用于回归的在线引导聚合。 |
| AdaBoost分类器 | 促进分类 |
| SRP分类器 | 流式随机补丁集成分类器。 |
| EpsilonGreedyRegressor | 用于回归的 Epsilon-greedy bandit 算法。 |
| UCB回归器 | 用于回归的上置信界老虎机。 |
| EWARegressor | 指数加权平均回归量。 |
| 连续减半分类器 | 用于分类的连续减半算法。 |
| 连续减半回归器 | 用于回归的连续减半算法。 |
| 堆叠分类器 | 用于二进制分类的堆叠。 |
| FFM分类器 | 用于二进制分类的场感知分解机。 |
| FFM回归器 | 用于回归的场感知分解机。 |
| FM分类器 | 用于二进制分类的因式分解机。 |
| FM回归器 | 用于回归的分解机。 |
| FwFM分类器 | 用于二元分类的场加权分解机。 |
| FwFM回归器 | 用于回归的场加权分解机。 |
| HOFM分类器 | 用于二进制分类的高阶分解机。 |
| HOFM回归器 | 用于回归的高阶分解机。 |
| 硬采样分类器 | 硬采样分类器。 |
| 硬采样回归器 | 硬抽样回归器。 |
| 随机过采样器 | 随机过采样。 |
| 随机采样器 | 通过混合欠采样和过采样进行随机采样。 |
| 随机欠采样器 | 随机欠采样。 |
| 霍夫丁树分类器 | 霍夫丁树或非常快速的决策树分类器。 |
| 霍夫丁自适应树分类器 | 霍夫丁自适应树分类器。 |
| 极快决策树分类器 | 极快的决策树分类器。 |
| 标签组合霍夫丁树分类器 | 用于多标签分类的标签组合霍夫丁树。 |
| 霍夫丁树回归器 | 霍夫丁树回归器。 |
| 霍夫丁自适应树回归器 | 霍夫丁自适应树回归器。 |
| iSOUPTreeRegressor | 用于多目标回归的增量结构化输出预测树 (iSOUP-Tree)。 |
| StackedSingleTargetHoeffdingTreeRegressor | 堆叠的单目标霍夫丁树回归器。 |
| KNN分类器 | k-最近邻分类器。 |
| KNNADWIN分类器 | 带有 ADWIN 变化检测器的 K-Nearest Neighbors 分类器。 |
| SAMKNN分类器 | 自调整记忆与 kNN 分类器相结合。 |
| KNN回归器 | k-最近邻回归量。 |
| AccuracyWeightedEnsembleClassifier | 精度加权集成分类器 |
| 自适应随机森林分类器 | 自适应随机森林分类器。 |
| 自适应随机森林回归器 | 自适应随机森林回归器。 |
| AdditiveExpertEnsembleClassifier | 加法专家集成分类器。 |
| 批增量分类器 | 批量增量集成分类器。 |
| 分类器链 | 用于多标签学习的分类器链。 |
| 概率分类器链 | 用于多标签学习的概率分类器链。 |
| 蒙特卡洛分类器链 | 用于多标签学习的蒙特卡洛采样分类器链。 |
| 动态加权多数分类器 | 动态加权多数集成分类器。 |
| 学习PPNSE分类器 | Learn++.NSE 集成分类器。 |
| 学习PP分类器 | Learn++ 集成分类器。 |
| 利用BaggingClassifier | 利用 Bagging 集成分类器。 |
| 多输出学习器 | 用于多目标分类或回归的多输出学习器。 |
| OnlineAdaC2分类器 | 在线 AdaC2 集成分类器。 |
| OnlineBoostingClassifier | 在线 Boosting 集成分类器。 |
| 在线CSB2分类器 | 在线 CSB2 集成分类器。 |
| OnlineRUSBoost分类器 | 在线 RUSBoost 集成分类器。 |
| 在线SMOTEBagging分类器 | 在线 SMOTEBagging 集成分类器。 |
| OnlineUnderOverBaggingClassifier | 在线 Under-Over-Bagging 集成分类器。 |
| OzaBagging分类器 | Oza Bagging 集成分类器。 |
| OzaBaggingADWIN分类器 | 带有 ADWIN 变化检测器的 Oza Bagging 集成分类器。 |
| 回归链 | 用于多输出学习的回归器链。 |
| StreamingRandomPatchesClassifier | 流式随机补丁集成分类器。 |
| 阿德温 | 用于概念漂移检测的自适应窗口方法。 |
| DDM | 漂移检测方法。 |
| EDDM | 早期漂移检测方法。 |
| HDDM_A | 基于 Hoeffding 边界和移动平均检验的漂移检测方法。 |
| HDDM_W | 基于 Hoeffding 边界的漂移检测方法和移动加权平均测试。 |
| KSWIN | 用于概念漂移检测的 Kolmogorov-Smirnov Windowing 方法。 |
| 佩奇欣克利 | 用于概念漂移检测的 Page-Hinkley 方法。 |
| 评估坚持 | 坚持评估方法或定期坚持评估方法。 |
| 评估优先级 | 前置评估方法或交错测试然后训练方法。 |
| 评估PrequentialDelayed | 前置评估延迟法。 |
| 非常快速的决策规则分类器 | 非常快速的决策规则分类器。 |
| 鲁棒软学习向量量化 | 流式和非流式数据的鲁棒软学习向量量化。 |
| 半空间树 | 流式半空间树(HS-Trees)的实现 |
数据
该pandioml.data.*模型包含所有可用的数据集和生成器。
| 模块 | 描述 | 架构 | 贴上标签 |
|---|---|---|---|
| 表单提交生成器 | 使用 Faker Python 包生成无限量的表单提交。 | 图式 | 不 |
| 虚拟主机数据集 | 包含在 3 个月的时间段内记录的 12,496,728 个服务器资源指标事件。 | 图式 | 不 |
| 个人资料数据集 | 使用 Faker Python 库生成无限的用户配置文件流。 | 图式 | 不 |
| 信用卡诈骗 | 包含 1,296,675 笔信用卡交易的数据集,其中百分比标记为欺诈。 | 图式 | 是的 |
| AgrawalGenerator 数据集 | 具有平衡和添加噪音能力的住房贷款申请数据生成器。 | 图式 | 是的 |
| 正弦发生器数据集 | 用于正弦值数据的生成器,具有平衡和添加噪声的能力。 | 图式 | 是的 |
| LED发电机数据集 | 一种生成器,用于生成与显示在七段 LED 显示屏上的数字相关的数据,具有添加噪声的能力。 | 图式 | 是的 |
| 网络钓鱼数据集 | 1250 个被归类为网络钓鱼或非网络钓鱼的网页条目。 | 图式 | 是的 |
| 电影分级数据集 | 来自不同类型个人的 100,000 个电影评分。 | 图式 | 是的 |
| 餐厅游客数据集 | 该数据集包含 16 周内 829 家日本餐馆的 252,108 条记录。 | 图式 | 是的 |
可以使用该pandiocli dataset generate工具创建其他自定义数据集以使用您自己的数据。
指标
pandioml.metrics.*包含用于计算与管道相关的指标的辅助方法。
| 模块 | 描述 |
|---|---|
| 准确性 | 准确度分数,即完全匹配的百分比。 |
| 平衡精度 | 平衡的准确性。 |
| 二进制度量 | 所有二元分类指标的母类。 |
| 分类度量 | 所有分类指标的母类。 |
| 分类报告 | 用于监控分类器的报告。 |
| 科恩卡帕 | 科恩的 Kappa 分数。 |
| 交叉熵 | 对数损失的多类泛化。 |
| 完全符合 | 精确匹配分数。 |
| 示例精度 | 多标签分类的基于示例的精度分数。 |
| 示例召回 | 多标签分类的基于示例的召回分数。 |
| 示例F1 | 多标签分类的基于示例的 F1 分数。 |
| 示例FBeta | 基于示例的 F-Beta 分数。 |
| F1 | 二进制 F1 分数。 |
| FBeta | 二进制 F-Beta 分数。 |
| 几何平均数 | 几何平均分。 |
| 汉明 | 汉明分数。 |
| 汉明损失 | 汉明损失分数。 |
| 雅卡尔 | 二进制多输出的 Jaccard 索引。 |
| 卡帕姆 | Kappa-M 分数。 |
| 卡帕特 | Kappa-T 分数。 |
| 对数损失 | 二进制对数损失。 |
| MAE | 平均绝对误差。 |
| 宏F1 | 宏观平均 F1 分数。 |
| 宏FBeta | 宏观平均 F-Beta 分数。 |
| 宏观精度 | 宏观平均精度得分。 |
| 宏调用 | 宏观平均召回分数。 |
| 中冶 | 马修斯相关系数。 |
| 公制 | 所有指标的母类。 |
| 指标 | 用于一次处理多个指标的容器类。 |
| 微F1 | 微平均 F1 分数。 |
| 微FBeta | 微平均 F-Beta 分数。 |
| 微精度 | 微平均精度分数。 |
| 微召回 | 微平均召回分数。 |
| 多类度量 | 所有多类分类指标的母类。 |
| MultiFBeta | 多类 F-Beta 分数,每类具有不同的 beta。 |
| 多输出分类度量 | 所有多输出分类指标的母类。 |
| 多输出回归度量 | 所有多输出回归指标的母类。 |
| MSE | 均方误差。 |
| 精确 | 二进制精度分数。 |
| 记起 | 二进制召回分数。 |
| 回归度量 | 所有回归指标的母类。 |
| 回归多输出 | 用于多输出回归的包装器。 |
| 均方根误差 | 均方根误差。 |
| RMSLE | 均方根对数误差。 |
| 罗考克 | 接收曲线下的操作特征区域。 |
| 滚动 | 用于在窗口上计算指标的包装器。 |
| R2 | 确定系数 ($R^2$) 得分 |
| SMAPE | 对称平均绝对百分比误差。 |
| 时间滚动 | 用于计算一段时间内指标的包装器。 |
| 加权F1 | 加权平均 F1 分数。 |
| 加权FBeta | 加权平均 F-Beta 分数。 |
| 加权精度 | 加权平均精度得分。 |
| 加权召回 | 加权平均召回分数。 |
| WrapperMetric | 度量包装器 |
| 球馆 | Ball-Hall 指数 |
| BIC | 贝叶斯信息准则 (BIC)。 |
| 卡林斯基哈拉巴斯 | 卡林斯基-哈拉巴斯指数 (CH)。 |
| 凝聚 | 从点到其分配的聚类质心的平均距离。越小越好。 |
| 戴维斯·布尔丹 | 戴维斯-布尔丁指数 (DB)。 |
| GD43 | 广义邓恩指数 43 (GD43)。 |
| GD53 | 广义邓恩指数 53 (GD53)。 |
| 哈蒂根 | Hartigan 指数 (H - 指数) |
| 指数 | I-索引 (I)。 |
| 内部度量 | 所有内部聚类指标的母类。 |
| 多发性硬化症 | 均方标准差。 |
| 附言 | 分区分离 (PS)。 |
| CR2 | R平方 |
| RMSSTD | 均方根标准差。 |
| 标清 | SD 有效性指数 (SD)。 |
| 分离 | 从一个点到分配给其他集群的点的平均距离。 |
| 轮廓 | 轮廓系数 [^1],粗略地说,是凝聚力与点到第二近质心的平均距离之间的比率。 |
| 单边带 | 聚类之间的平方和 (SSB)。 |
| SSW | 聚类内的平方和 (SSW)。 |
| 谢贝尼 | 谢贝尼指数(XB)。 |
| 世界银行 | 世界银行指数 |
| 许 | 许指数 |
统计数据
pandioml.stats.*包含用于计算与管道相关的指标的辅助方法。
| 模块 |
|---|
| 绝对最大值 |
| 自动校正 |
| 贝叶斯平均 |
| 双变量 |
| 数数 |
| 冠状病毒 |
| EW均值 |
| EWVar |
| 熵 |
| IQR |
| 峰度 |
| 关联 |
| 最大限度 |
| 意思是 |
| 敏 |
| 模式 |
| N独特的 |
| 峰顶 |
| 皮尔森科尔 |
| 分位数 |
| 滚动绝对最大值 |
| 滚动的Cov |
| 滚动IQR |
| 滚动最大 |
| 滚动平均 |
| 滚动敏 |
| 滚动模式 |
| 滚动峰顶 |
| 滚动皮尔逊公司 |
| 滚动分位数 |
| 滚动扫描电镜 |
| 滚动和 |
| 滚动变量 |
| 扫描电镜 |
| 转移 |
| 偏斜 |
| 和 |
| 单变量 |
| 变量 |
创建您自己的数据集或生成器
使用pandioml.data.Stream类,继承它,定义所需的方法,并在 PandioML 中使用您自己的数据!
为了使它在 Pandio 的平台上可用,pandiocli upload它使用 PandioCLI,然后pandiocli deploy它。
构建流管道
它pandioml.core.pipelines包含一个用于构建传统机器学习管道的管道框架。
用于构建管道的 PandioML 框架与scikit-learn's 类似,但不同之处在于管道旨在处理单个记录,而不是一批记录。
神器
可重现的管道是数据科学中至关重要的一部分。
PandioML 提供了一种工具来存储与管道关联的任何工件。
自动为您存储 3 个工件:
-
数据集
-
管道
-
模型
如果您想存储其他内容,例如指标、图表、超调参数或其他任何内容,可以通过导入 artifact 模块来完成,如下所示:
from pandioml.core.artifacts import artifact
然后,调用如下的add方法:artifact
dict = artifact.add('config_params', {'foo': 'bar'})
第一个参数是它的唯一名称,第二个参数是要存储的项目。如果可以腌制,可以作为神器保存。此外,有时最好推迟工件,因此可调用对象也可以作为要存储的项目。调用时,将传递一个参数,该参数storage_location包含工件的存储位置。这使得在存储工件时提供自定义逻辑变得容易。
奖励,该方法将返回工件,以便您可以轻松地添加项目并在一行中定义事物。
此外,save存在一种可以手动调用来存储工件的方法。用于存储这些工件的存储介质也可以扩展。目前,支持文件和 AWS S3 存储后端。默认存储后端是文件。
该方法在函数停止运行时自动调用。您可以自己调用它,但不要太频繁,因为它是一项昂贵的操作,具体取决于工件的大小。
ARTIFACT_STORAGEinsideconfig.py定义了工件的存储位置。这也可以通过调用来覆盖save。
模式注册表支持
类型安全对于任何数据科学计划都至关重要。如果您不能将浮动视为浮动,则可能会产生危险的后果。
PandioML 将类型安全视为一等公民。在将数据流式传输到您的管道之前,您可以要求它针对定义的架构进行验证。如果验证失败,您的管道将永远看不到它。
PandioML 中的类型安全可防止潜在的灾难性情况,并使管道开发更加高效和高效。
举个例子,下面的类定义了数据必须遵循的模式。此外,数据作为直接从模式构建的对象进来。
class Transaction(Record):
trans_date_trans_time = String()
cc_num = Integer()
merchant = String()
category = String()
amt = Float()
first = String()
last = String()
gender = String()
street = String()
city = String()
state = String()
zip = Integer()
lat = Float()
long = Float()
city_pop = Integer()
job = String()
dob = String()
trans_num = String()
unix_time = Integer()
merch_lat = Float()
merch_long = Float()
is_fraud = Integer()
weekday = Integer()
weekend = Integer()
month = Integer()
day = Integer()
hour = Integer()
以上述为例,当数据流式传输到您的管道中时,它作为一个 Transaction 对象进入。
这使您可以快速访问如下属性:event.cc_num
借助模式提供的类型安全性,数据科学变得如此简单!
Schema Registry 由 Pandio.com 平台提供。对于大多数用例,PandioML 的大多数实现都会自动处理入站数据。
出站数据或来自 PandioML 的预测必须打包在一个模式中,然后由需要预测的服务使用。这与发送到 PandioML 的数据一样重要。
要查看使用模式返回对象的示例,请参见以下示例:餐厅访问
此示例显示正在创建模式,然后将数据放入对象中,然后返回对象。然后将该对象发送到输出主题。
使用 PandioML 交互式会话进行调试
你有没有问过自己这些问题之一?
- 到底发生了什么?
- 这个错误是什么意思?
- 该值不正确...我的代码的哪一部分是这样做的?
- 我的管道不工作,是什么问题?
如果你有,你并不孤单。如果您还没有,请随时跳过本节!
为了帮助找到问题并快速解决问题,PandioML 能够从代码中的任何位置启动交互式会话。这将停止执行并打开一个交互式 Python 会话,让您可以将代码实时注入到代码执行中。无需添加一堆打印语句来弄清楚发生了什么!
要启动交互式会话,请从此处导入交互式方法:
from pandioml.core import interact
然后像这样调用它:interact(banner='Helpful Note Where This Was Triggered', local=locals())
当你运行你的代码时,它会在调用这个方法的地方停止,让你将任何你想要的 Python 代码注入到执行中。
使用local,您可以更改变量的范围,并根据需要进行访问local=globals()。
您还可以在整个代码中添加许多此类调用。当您准备好继续执行代码时,只需键入CTRL + D.
调试愉快!
例子
./examples/form_fraud
此示例结合了 NaiveBayes 模型、FormSubmissionGenerator 和一个管道,以演示如何预测电子邮件是来自 Yahoo.com 还是 Hotmail.com
./examples/restaurant_visits
此示例结合了 LinearRegression 模型、RestaurantVisitorsDataset 和管道,以演示如何预测餐厅将获得多少访问。
函数.py
这是 PandioML 的核心。每个项目的起点都是function.py文件。所有辅助方法、魔术酱、嵌入式包、cli 工具等都存在以帮助构建在 Pandio 平台上运行的功能。在这些功能中的每一个中,通常都有一个可以进行准确预测的模型。它使用什么数据、算法、特征提取、拟合、预测、流水线甚至标记,完全取决于您。该功能是您的沙盒,所有乐趣都从这里开始。PandioML 中的所有内容都旨在帮助通过机器学习更轻松地创造价值。
在为每个项目生成的函数文件中只需要定义两件事,一个是model您想使用的,一个是pipelines您想针对每个单独的流式事件执行的。
可以创建任意数量的类或方法来帮助构建功能。
这pandioml.function.FunctionBase是使用 PandioML 构建模型的核心组件。它提供了帮助方法和抽象方法,使构建和部署模型变得容易。
pandioml.function.Context提供本地辅助方法来模拟部署到生产环境时可用的内容,以实现更快的本地迭代测试。
pandioml.function.Storage提供对最终一致的分布式键值存储服务的访问。
pandioml.function.Logger提供本地辅助方法来模拟部署到生产环境时可用的内容,以实现更快的本地迭代测试。
贡献
欢迎所有贡献。
参与的最佳方式如下:
-
这是报告 PandioML 发现的任何问题的好地方。错误、不一致、缺少文档或任何阻碍使用 PandioML 的东西。
-
这是与 PandioML 相关的任何内容的好地方。提出功能、提出问题、突出显示用例或您能想象到的任何其他事情。
如果您想向此库提交拉取请求,请阅读贡献者指南。
执照
PandioML 在SSPL 许可下获得许可。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。