Predix平台上通过分类器实现时间序列的实时异常检测

来源:互联网 发布:突袭2 mac版本 编辑:程序博客网 时间:2024/06/13 03:07

Author: Alex Zhang,Data Scientist,GE Digital

内容简介
    本文提供了在Predix上进行数据分析的实例 。该实例 通过AnalyticFramework定时调用分类器对Timeseris 数据库中的数据进行实时读取、分析,并将结果写回Timeseries中存储。若读者已经注册Predix帐号,可根据本文中的操作步骤表进行实际操作。
主要步骤:

1.   数据准备:训练数据的准备;测试数据导入到Timeseries;
2.   建立分类器用于Anomaly Detection(以Python为例);
3.   将分类器和在线分类打包上传到Analytic catalog;
4.   在Analytic Framework上配置Analytic的输入输出;
5.   用Analytic Framework的jobscheduler实时调用分类算法并将结果写回Timeseries。 

1.  数据准备
    通过随机数发生器产生一段随机数,以10000个点为例,并在此基础上做基于移动平均的平滑,以窗口大小为100为例,可以产生一段数据。并在随机的时间点产生幅度较大的随机数,如下图中的红点所示。在我们的例子中,我们将分类黑线中的sample,并通过一个分类器来判断其是否为异常点(即红点)。

    在我们的例子中,我们将黑线数据分成长度相等的两部份,一部份用于分类器的训练,另一部份用于仿真实时数据的得到和分类。我们将每二部份数据导入到预先建好的时间序列数据库中,每五秒钟存一个数据点。过程请参考:http://blog.csdn.net/predixcn/article/details/70227396

2.  训练分类器
    在这一步,我们要训练一个分类器来判断黑线中的样本点是否为异常数据。在此,我们用sklearn.discriminant_analysis中的QuadraticDiscriminantAnalysis方法,即QuadraticDiscriminant Analysis方法。该方法假设每一类数据均符合高斯分布,每个类所属高斯函数有不同的协方差矩阵。我们将训练中的正常数据标为0,异常数据标为1,并对分类器进行训练:

qda =QuadraticDiscriminantAnalysis(store_covariances=False, priors=(0.9, 0.1))
qda.fit(X, label)

    其中X为黑线的sample数据,label为类标,即0或1。由于数据中大部份为正常数据,所以我们可以调整先验概率大部份为正常样本(0.9)。之 后,我们将模型序列化并存储:

output = open('qda.pkl', 'wb')
pickle.dump(qda, output)
output.close()

    实时处理时,我们导入刚刚得到的模型,对实时得到的数据进行分类并得到结果:

model_file = open('/home/vcap/app/analytics/qda.pkl', 'r')
qda = pickle.load(model_file)
model_file.close()
y_pred = qda.predict(X)

    此例子相关的Python代码会用于下一步Analytic中相关的操作。该例子中包含两个函数:tsAnomalyDetection和ts_training。其中ts_training为模型训练,即在本地进行操作并产生模型文件。tsAnomalyDetection为实时分类函数,是在Predix上分析的入口函数。

3.  建立Analytic并上传Python代码

    此步骤的目标为在Predix平台上建立Analytic并上传刚刚编写的Python代码以及相关的template文件。请参考predix-io官网上的documentation作进一步了解,此处为本任务所涉及的步骤:

a.   订阅analytics framework服务;
b.   建立一个分析(Create Analytic);
c.   建立一个分析所属物件(Create Artifact),定义为executable类型,将python分析代码打包导入此物件(实际例子请参考最后的下载);
d.   建立另一个分析所属物件(Create Artifact),定义为template类型,将定义输入输出的template文件导入此物件(实际例子请参考最后的下载);
e.   得到分析中的所有物件(Retrieve Artifacts for Analytic);
f.   验证分析(Validate Analytic),并得到验证ID;
g.   等待一段时间,并进行得到验证状态操作(Retrieve Validation Status),如果得到的结果和离线测试的结果一致,说明此分析已经可以用于调用。

    以上步骤的具体操作可用postman进行操作,具体的API请参考官方文档:https://docs.predix.io/en-US/content/service/analytics_services/analytics_framework。此步中所涉及的template文件描述了此Analytic所对应的输入输出,该文件为json格式,有关相关的内容如下:

"columns":[
{
"portName": "feature",
"portType": "FIELD",
"variable": false,
"dataType":"DOUBLE_ARRAY",
"required": true

}]

    此部份定义了输入的变量名为feature。

"columns":[
{
"portName": "detect_res0",
"portType": "FIELD",
"variable": false,
"dataType":"DOUBLE_ARRAY",
"required": true
}]

    此部份定义了输出的变量名为detect_res0。文件的整体内容和格式请下载template.json实例并阅读。
4.  配置­­Orchestration
    此步骤目标为在Predix平台上配置可作实时调用的Orchestration Configuration,并将刚刚建立的Analytic包含在其中,以作最后的实时调用。Orchestration Configuration主要用于组合并实施单个或多个Analytic。本文仅涉及单个Analytic,若读者想进一步了解,请参考predix-io上的官方文档。本任务所涉及的步骤如下:

a.   建立一个Orchestration配置(CreateOrchestration Configuration);
b.   建立一个Orchestration物件(CreateOrchestration Artifact),并指定为bpmn文件,其中定义了所需要调用的分析;
c.   建立另一个Orchestration物件(CreateOrchestration Artiface),并指定为portToFieldMap,该文件定义了各Analytic间连接的输入输出;
d.   得到Orchestration中的所有物件(Get Artifact Metadata for an OrchestrationConfiguration),如果两个物件都已经存在,可进行下一步操作;
e.   运行并验证Orchestration(Run Orchestration (sync) (v2)),如果得到的结果和离线测试的结果一致,说明此Orchestration已经可用于调用。

    操作时需注意b步中所涉及的portToFieldMap文件描述了此Analytic所对应的输入输出,c步中的bpmn文件描述了需要调用的Analytic。第e步运行Orchestration(RunOrchestration (Async) (v2))时需要提供以下信息作业Body信息:

{

  "orchestrationConfigurationId": "d1b8678a-0bec-42b2-8626-18c51cc09562",
  "assetDataFieldsMap": {
      "inputOfDetection0": "ts_detection0001",
      "outputOfDetection0": "ts_detection_result0001"
    }
}

    其中inputOfDetection0为portToFieldMap中所定义的输入名称,outputOfDetection0为portToFieldMap中所定义的输出名称,ts_detection0001和ts_detection_result0001为Timeseries中对应的tag name。请在本文最后下载实际例子。以上步骤的具体操作可用postman进行操作,具体的API请参考官方文档:https://docs.predix.io/en-US/content/service/analytics_services/analytics_framework
5.  实时调用算法
    此步骤的目标为用Analytic Framework中的SchedulerService来定时调用前几步所建立的Orchestration。所涉及的步骤如下:

a.   建立任务(Create Job)并记录JobID;
b.   通过Job ID得到任务的历史记录(GetJob History By Job ID)。

    在进行a步时,Body的inputData中填入配置Orchestration时第e步所提供的信息,并编辑Analytic Framework的Predix-Zone-ID和所需的调用频率。本文提供的例子为每五秒调用一次,以达到实时处理的目的(实时数据导入亦为5秒一个数据样本)。在Job建立以后,读者可以通过b步聚来观察结果,或通过Timeseries的Query服务得到分析的结果。
6.  下载链接 
https://github.com/alexwillzhj/Predix-Anomaly-Detection-Classifier-Template

----------

在使用中您有任何问题,请访问我们的论坛http://bbs.csdn.net/forums/GEPredix 
GE数字集团的技术专家们会在线回答您的问题。
也请访问我们在CSDN的Predix专区http://predix.csdn.net 了解更多Predix的内容和相关活动。


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 买新车牌下不了怎么办 临沂上小学没报上名怎么办 早教中心倒闭了怎么办 企业税没交联系不上法人怎么办 企业被拉黑法人联系不到怎么办 支票根写错了怎么办 月结客户不付款怎么办 退市整理期过了怎么办 老板跑了财务负责人怎么办 在南京加入嘀嘀代驾怎么办 苹果盗刷支付宝怎么办 街电支付宝掉了怎么办 转转上号器没有苹果版的怎么办 安卓6不支持的应用怎么办 银行卡被存款机吞了怎么办 去银行卡存款机器故障怎么办 银行卡存款没有存进去怎么办 被黑网站黑钱了怎么办 饿了吗账户异常怎么办 单位里有人整你怎么办 乌鲁木齐信息采集结束后怎么办 头发很长时间不长怎么办啊 打嘟噜时间不长怎么办 阴茎勃起的时间不长怎么办 睡觉的时间不长怎么办 每次锻炼时间不长怎么办 微信好友不知道是谁怎么办 就一个软件闪退怎么办 葫芦侠修改闪退怎么办 戴尔游匣磁盘占用100怎么办 步步高家教机扫描笔不亮怎么办 社保卡手机号换了怎么办 香港公司进出口没有申报怎么办 智能电视右上角网络未连接怎么办 电子秤按键板不好用怎么办失灵 桑塔纳车钥匙锁车里了怎么办 舌头上有锯齿印怎么办 夏天有脚气脚臭怎么办 xp分辨率太高黑屏怎么办 农村淘宝标识类目没了怎么办 被投诉到食品监督局怎么办