跳转到主要内容

Draco的预测工程方法。

项目描述

DAI-Lab 麻省理工学院数据到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_entitysetzephyr_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 接口训练一个模型,其中可以训练、推断和评估管道。首先,我们需要通过创建 Xy 变量以及单热编码特征来为训练准备我们的数据集。

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

  • 添加 gearbox_replace_presence 标签函数 - 问题 #21 由 @SaraPido
  • 更新 python 版本 - 问题 #20 由 @SaraPido

0.0.2 - 2023-05-09

SigPro 集成以处理信号

  • 集成 SigPro - 问题 #7 由 @frances-h @sarahmish
  • 为 xgb 管道添加选项 - 问题 #5 由 @sarahmish

0.0.1 - 2023-03-02

使用 Zephyr 类的新建模模块

  • 扩展 GH 操作测试 - 问题 #4 由 @sarahmish
  • 添加 XGB 管道 - 问题 #1 由 @sarahmish

0.0.0 - 2022-11-17

第一次完整发布

  • 预测工程框架由 @frances-h
  • EntitySet 创建由 @frances-h
  • DataLabeler 和初始标签函数由 @frances-h

项目详情


下载文件

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

源分布

zephyr-ml-0.0.3.tar.gz (73.2 kB 查看散列)

上传时间

构建分布

zephyr_ml-0.0.3-py2.py3-none-any.whl (25.9 kB 查看散列)

上传时间 Python 2 Python 3

由以下支持