Draco的预测工程方法。
项目描述
麻省理工学院数据到AI实验室的一个项目。
Zephyr
一个机器学习库,通过分析过去事件的发生来协助生成风力场运行数据的机器学习问题。
重要链接 | |
---|---|
:computer: 网站 | 查看Sintel网站获取更多关于项目的信息。 |
:book: 文档 | 快速入门、用户和开发指南以及API参考。 |
:star: 教程 | 查看我们的笔记本 |
:octocat: 仓库 | 本库的GitHub仓库链接。 |
:scroll: 许可 | 该仓库在MIT许可证下发布。 |
:keyboard: 开发状态 | 此软件处于预_alpha阶段。 |
加入我们的Slack工作区以获取公告和讨论。 |
概述
Zephyr库是一个框架,旨在通过分析过去事件的发生来辅助生成风力场运行数据的机器学习问题。
Zephyr的主要功能包括
- 实体集创建:用于表示风力场数据和不同表之间关系的工具。我们为具有PI数据的数据集和SCADA数据的数据集提供了创建EntitySet的函数。
- 标记函数:一组函数,以及创建自定义版本的工具,准备用于分析过去的运行数据,以寻找过去特定类型事件的发生。
- 预测工程:一个灵活的框架,旨在以多种方式将标记函数应用于风力涡轮机运行数据,以创建定制的机器学习问题的标签。
- 特征工程:使用Featuretools对风力场数据进行自动特征工程的指南。
安装
需求
Zephyr已开发并可在Python 3.6和3.7上运行。
此外,尽管不是强制要求,但强烈推荐使用virtualenv,以避免干扰您尝试运行Zephyr的系统上安装的其他软件。
下载和安装
可以使用以下命令使用pip在本地安装 Zephyr
pip install zephyr-ml
如果您想从源安装或为项目做出贡献,请阅读贡献指南。
快速入门
在本简要教程中,我们将引导您完成一系列步骤,以帮助您开始使用 Zephyr。
1. 加载数据
我们将首先使用预处理数据来创建一个实体集。根据数据类型,我们将使用zephyr_ml.create_pidata_entityset
或zephyr_ml.create_scada_entityset
函数。
注意:如果您已克隆了 Zephyr仓库,您将在notebooks/data
文件夹中找到一些示例数据,这些数据已预处理以符合create_entityset
数据要求。
import os
import pandas as pd
from zephyr_ml import create_scada_entityset
data_path = 'notebooks/data'
data = {
'turbines': pd.read_csv(os.path.join(data_path, 'turbines.csv')),
'alarms': pd.read_csv(os.path.join(data_path, 'alarms.csv')),
'work_orders': pd.read_csv(os.path.join(data_path, 'work_orders.csv')),
'stoppages': pd.read_csv(os.path.join(data_path, 'stoppages.csv')),
'notifications': pd.read_csv(os.path.join(data_path, 'notifications.csv')),
'scada': pd.read_csv(os.path.join(data_path, 'scada.csv'))
}
scada_es = create_scada_entityset(data)
这将加载涡轮机、警报、停机、工单、通知和SCADA数据,并将其作为实体集返回。
Entityset: SCADA data
DataFrames:
turbines [Rows: 1, Columns: 10]
alarms [Rows: 2, Columns: 9]
work_orders [Rows: 2, Columns: 20]
stoppages [Rows: 2, Columns: 16]
notifications [Rows: 2, Columns: 15]
scada [Rows: 2, Columns: 5]
Relationships:
alarms.COD_ELEMENT -> turbines.COD_ELEMENT
stoppages.COD_ELEMENT -> turbines.COD_ELEMENT
work_orders.COD_ELEMENT -> turbines.COD_ELEMENT
scada.COD_ELEMENT -> turbines.COD_ELEMENT
notifications.COD_ORDER -> work_orders.COD_ORDER
2. 选择标记函数
第二步将是选择合适的标记函数。
我们可以使用zephyr_ml.labeling.get_labeling_functions
函数查看可用标记函数的列表。
from zephyr_ml import labeling
labeling.get_labeling_functions()
这将返回一个字典,其中包含每个可用函数的名称和简短描述。
{'brake_pad_presence': 'Calculates the total power loss over the data slice.',
'converter_replacement_presence': 'Calculates the converter replacement presence.',
'total_power_loss': 'Calculates the total power loss over the data slice.'}
在这种情况下,我们将选择 total_power_loss
函数,该函数计算一段时间内的总功率损失。
3. 生成目标时间
一旦我们加载了数据和标签函数,我们就可以开始使用 zephyr_ml.generate_labels
函数来生成目标时间表。
from zephyr_ml import DataLabeler
data_labeler = DataLabeler(labeling.labeling_functions.total_power_loss)
target_times, metadata = data_labeler.generate_label_times(scada_es)
这将返回一个包含所需三列的 compose.LabelTimes
,以开始处理机器学习问题:涡轮机 ID(COD_ELEMENT)、截止时间(time)和标签。
COD_ELEMENT time label
0 0 2022-01-01 45801.0
4. 特征工程
使用 EntitySets 和 LabelTimes,我们可以轻松使用 Featuretools 进行自动特征生成。
import featuretools as ft
feature_matrix, features = ft.dfs(
entityset=scada_es,
target_dataframe_name='turbines',
cutoff_time_in_index=True,
cutoff_time=target_times,
max_features=20
)
然后我们得到特征列表和计算的 feature_matrix
。
TURBINE_PI_ID TURBINE_LOCAL_ID TURBINE_SAP_COD DES_CORE_ELEMENT SITE DES_CORE_PLANT ... MODE(alarms.COD_STATUS) MODE(alarms.DES_NAME) MODE(alarms.DES_TITLE) NUM_UNIQUE(alarms.COD_ALARM) NUM_UNIQUE(alarms.COD_ALARM_INT) label
COD_ELEMENT time ...
0 2022-01-01 TA00 A0 LOC000 T00 LOCATION LOC ... Alarm1 Alarm1 Description of alarm 1 1 1 45801.0
[1 rows x 21 columns]
5. 建模
一旦我们有了特征矩阵,我们就可以使用 Zephyr 接口训练一个模型,其中可以训练、推断和评估管道。首先,我们需要通过创建 X
和 y
变量以及单热编码特征来为训练准备我们的数据集。
y = list(feature_matrix.pop('label'))
X = pd.get_dummies(feature_matrix).values
在这个例子中,我们将使用 'xgb' 回归管道来预测总功率损失。
from zephyr_ml import Zephyr
pipeline_name = 'xgb_regressor'
zephyr = Zephyr(pipeline_name)
要训练管道,我们只需使用 fit
函数。
zephyr.fit(X, y)
训练完成后,我们可以使用 predict
进行预测
y_pred = zephyr.predict(X)
我们还可以使用 zephyr.evaluate
获取管道的性能。
接下来是什么?
如果您想继续学习有关 Zephyr 及其所有功能的更多信息,请查看 notebooks 文件夹 中的教程。
历史
0.0.3 - 2024-03-12
SigPro 支持 python 3.9、3.10 和 3.11
0.0.2 - 2023-05-09
SigPro 集成以处理信号
0.0.1 - 2023-03-02
使用 Zephyr 类的新建模模块
0.0.0 - 2022-11-17
第一次完整发布
- 预测工程框架由 @frances-h
- EntitySet 创建由 @frances-h
- DataLabeler 和初始标签函数由 @frances-h
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。