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的内容和相关活动。