百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

在工业大数据使用分布式和并行方式进行特征提取。

toyiye 2024-06-21 12:20 9 浏览 0 评论

特征提取控制通过消除系统中的冗余特征和噪声来选择重要且有用的特征,以产生最佳预测输出。

动机 - 为什么需要提取特征?

特征提取仍然是机器学习算法中用于识别强弱相关属性的最初步步骤之一。虽然在特征工程期间使用许多特征提取算法来进行标准分类和回归问题,但是对于时间序列分类和回归问题,每个标签或回归目标同时与多个时间序列和元信息相关联,问题变得越来越困难。

这样的场景在从工业重型制造设备,机械,物联网中获得的大型数据集中非常普遍,这些数据集经常进行维护或优化生产线优化,在不同的时间序列中展示不同的成功和失败指标。

本文的主要目标仍然是了解从多个时间序列中提取相关特征的过程以及使用真实数据集的模型。结构如下:

  • 评估时间序列特征提取对分类和回归问题的重要性。
  • 模拟工业应用中机器人执行失败率的实际用例。
  • 在分布式实时环境中突出显示模型的优点。

什么是时间序列数据的特征提取及其重要性?

特征提取控制通过消除系统中的冗余特征和噪声来选择重要且有用的特征,以产生最佳预测输出。在时间序列数据的背景下,它旨在:

  • 从时间序列中提取特征特征,例如最小值,最大值,平均值,百分位数或其他数学推导。
  • 从位于不同时间序列尺度的分布式异构信息源中整合特征提取和选择过程,以预测目标输出。
  • 允许基于其相关性从提取的特征中进行时间序列聚类(非监督学习)。
  • 提取的相关和非相关特征可以帮助我们在分类和回归建模中识别时间序列属性和维度的有新见解。

?工业大数据,机器人和其他信息资源来产生大量的有不同速度与变异性(不一致)和真实性(不精确)的信息。需要仔细地合并和集成这些数据,以通过分析和提取不同时间间隔中最有意义的特征来预测系统状态。

特征提取与选择过程

下图说明了特征提取和选择过程中涉及的步骤。使用特征提取来组合现有特征以生成更有用的特征,特征选择有助于选择在现有特征中进行训练的最有用特征。

图1

图2

图1给出了使用来自n个不同时间序列的数学运算创建特征集的详细理解,然后是特征聚合和特征重要性/相关性测试,以对它们进行排序并到达最终选择的特征列表。图2给出了完整过程的高级表示,涵盖了可在可伸缩分布式环境中使用的特征工程,排名和测试过程。

Tsfresh及其用法

我们使用Tsfresh来建模时间序列特征提取和相关性测试。Tsfresh是一种高效,可扩展的特征提取算法,用于时间序列分类或回归问题。该算法在ML管道的开头构建有特征重要性过滤器,根据其重要性分数提取相关特征。

Tsfresh的算法可以概括为:

  • 通过考虑其他功能和元信息来建立功能映射。
  • 通过量化其预测目标输出的重要性的p值独立评估每个单独的特征向量。
  • 应用于工业过程 - 可能包括预测机器的寿命,预测连铸过程中钢坯的质量,预测机器人和IIoT传感器的成功和失败率。

建模实际用例

在这里,我们模拟通过传感器读数获得的机器人执行失败率。从这5个不同的数据源收集并合并的执行状态:

  • 掌握位置的方法失败。
  • 部件转移失败。
  • 转移失败后部件的位置。
  • 接近ungrasp位置的失败。
  • 部分运动失败

?此外,该数据集是多变量的,由6个不同的时间序列数据组成。

每个特征都是数字,表示故障检测后测量的力或扭矩; 每个故障实例的特征在于在故障检测后立即开始以规则的时间间隔收集的15个力或扭矩样本,每个故障实例的总观察窗口为315毫秒。

安装:

Installation : pip install tsfresh
import tsfresh.examples.robot_execution_failures as robot
robot.download_robot_execution_failures()
df_ts, y = robot.load_robot_execution_failures()
print(df_ts.head())
print(y.tail())

每次观察6个不同的时间序列

每次观察的目标输出

为了隔离和单独查看不成功的操作的成功操作,使用两个不同的图和两个不同的ID。

normal = df_ts[df_ts.id == 3][['time', 'F_x', 'F_y', 'F_z', 'T_x', 'T_y', 'T_z']]
normal[['time', 'F_x', 'F_y', 'F_z', 'T_x', 'T_y', 'T_z']].plot(x="time", kind="line")
plt.title('Success example (id 3)')
plt.savefig('normal.png')

成功的机器人行动

failure = df_ts[df_ts.id == 20][['time', 'F_x', 'F_y', 'F_z', 'T_x', 'T_y', 'T_z']]
failure[['time', 'F_x', 'F_y', 'F_z', 'T_x', 'T_y', 'T_z']].plot(x="time", kind="line")
plt.title('Success example (id 20)')
plt.savefig('failure.png')

失败机器人动作

在下一步中,从6个不同的时间序列中提取相关的特征集并显示。一些功能包括范围计数,标准偏差,方差,自相关,线性趋势,分位数和分位数的变化。

from tsfresh import extract_relevant_features
X = extract_relevant_features(df_ts, y, column_id='id', column_sort='time')
print(X.info())
print(X.head())

提取的功能

特征意义和相关性

特征显着性由显着性测试确定,这些显着性测试帮助我们确定是否可以拒绝或接受给定特征的零假设。

在时间序列特征提取的上下文中,错误添加的特征是特征Xφ,即使Hφ0为真,零假设Hφ0也被相应的特征重要性测试拒绝。这种假阳性结果的风险是通过针对个体特征调整的假设检验来完成的。

然而,当同时比较多个假设和特征时,推理中的误差倾向于累积。在多次测试中,所有拒绝中的错误拒绝的预期比例称为错误发现率(FDR),其作为过滤特征提取中的最后一个组件。

p值(称为特征选择器)有助于确定在控制FDR时拒绝哪些假设。对于每个特征,进行单变量特征选择测试,其产生p值,然后由Benjamini Hochberg过程评估以确定要保留哪些特征以及删除哪些特征。

FDR_LEVEL = 0.05
X = extract_features(df_ts,
 column_id='id', column_sort='time',
X_selected = select_features(X, y)
print(X.shape)
 print(X_selected.shape)
 default_fc_parameters=ComprehensiveFCParameters(),
 impute_function=impute)
 X = X.loc[:, X.apply(pd.Series.nunique) != 1]
df_pvalues_mann = calculate_relevance_table(X, y, fdr_level=FDR_LEVEL, test_for_binary_target_real_feature='mann')
 
 print("Total \t", len(df_pvalues_mann))
 print("Relevant \t", (df_pvalues_mann["relevant"] == True).sum())
 print(Irrelevant \t", (df_pvalues_mann["relevant"] == False).sum(),
 "( # constant", (df_pvalues_mann["type"] == "const").sum(), ")")
(88, 1968)
(88, 631) # 631 features selected from 1968
Total 1968
 Relevant 631
 Irrelevant 1337

具有p-score(使用Mann-Whitney)列表的相关特征集由下式给出:

相关特征的p值

具有p-score(使用Mann-Whitney)列表的不相关特征集由下式给出:

非相关特征的p值

Mann-Whitney U检验是对独立样本t检验的非参数替代检验。它用于比较来自相同总体的两个样本均值,并用于测试两个样本均值是否相等。

在tsfresh中使用Mann-Whitney U检验来计算二元目标的实值特征的特征重要性作为p值。

?
m = len(df_pvalues_mann.loc[~(df_pvalues_mann.type == "const")])
K = list(range(1, m + 1))
C = [sum([1.0 / i for i in range(1, k + 1)]) for k in K]
rejection_line_mann = [defaults.FDR_LEVEL * k / m * 1.0 / c for k, c in zip(K, C)]
df_pvalues_mann.index = pd.Series(range(0, len(df_pvalues_mann.index)))
df_pvalues_mann.p_value.where(df_pvalues_mann.relevant)\
 .plot(style=".", label="relevant features")
df_pvalues_mann.p_value.where(~df_pvalues_mann.relevant & (df_pvalues_mann.type != "const"))\
 .plot(style=".", label="irrelevant features")
df_pvalues_mann.p_value.fillna(1).where(df_pvalues_mann.type == "const")\
 .plot(style=".", label="irrelevant (constant) features")
plt.plot(rejection_line_mann, label="rejection line (FDR = " + str(FDR_LEVEL) + ")")
plt.xlabel("Feature #")
plt.ylabel("p-value")
plt.title("Mann-Whitney-U")
plt.legend()
plt.plot()

选择时,fdr_level是一个要调整的超参数。它是所有创建的特征中不相关特征的理论预期百分比。默认情况下,它设置为5%。但是,它可能需要增加到0.9,具体取决于所选分类器如何处理非信息功能。

功能重要性过滤器也可以应用于标准分类或回归算法。在这里,我使用RandomForestClassifier来评估要素重要性。

clf = RandomForestClassifier()
 clf.fit(X,y)
 importance = pd.Series(clf.feature_importances_)
 importance.sort_values(ascending = False)
 print(importance)

提取的特征系数表示其重要性

通过条形图绘制相对要素重要性,可得出以下特征重要性图。

imp_frame = importance.to_frame()
 imp_frame.plot(kind = “bar”)
 plt.xticks([])
 plt.xlabel('Features')
 plt.ylabel('Importances')
 plt.title('Feature Importance Plot')
 plt.savefig('importance.png')

显示特征与p值系数的相关性的特征重要性

分类

标准分类器Logistic回归,Boosting和Bagging可应用于提取的特征集(X)。在将选定的特征集(X)拆分为训练和测试子集之后,我们使用RandomForestClassifier来说明机器人执行失败和成功类。

from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report
testtrain_xy = train_test_split(X, y,test_size=.4,random_state=50)
X_train, X_test, y_train, y_test = testtrain_xy
print(X_train.shape, X_test.shape, y_train.shape, y_test.shape)

(52,631)(36,631)(52,)(36,)

在测试数据集上评估训练的分类器,以通过精确度,召回率和f1分数来评估其性能。

clf = RandomForestClassifier()
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
print(classification_report(y_test, y_pred))
print(np.sum(y_test == y_pred), y_test.shape)

from sklearn.model_selection import cross_val_predict
predicted = cross_val_predict(clf, X, y, cv=5)
print(classification_report(y, predicted))

进一步的特征提取和模型分类也可以使用scikit-learn的Pipeline进行,FeatureAugmentor在开始时跟随任何分类器如RandomForest。

from sklearn.pipeline import Pipeline
 from sklearn.ensemble import RandomForestClassifier
 from tsfresh.transformers import RelevantFeatureAugmenter

?在拟合阶段,计算由set_params函数设置的所有可能的时间序列特征(如果未通过传递feature_extraction_settings对象手动更改特征)。然后,使用统计方法计算它们对目标的重要性和相关性,并且通过应用合适的算法(如Benjamini Hochberg)程序仅选择相关的那些。

在变换步骤(fit_transform)中,使用关于哪些特征与拟合步骤相关的信息,并且从时间序列中提取这些特征。然后将这些提取的特征添加到输入到分类器的输入数据样本中。

 pipeline = Pipeline([('augmenter', RelevantFeatureAugmenter(column_id='id', column_sort='time')),
 ('classifier', RandomForestClassifier())])
X = pd.DataFrame(index=y.index)
pipeline.set_params(augmenter__timeseries_container=df_ts)
pipeline.fit(X_train, y_train)
y_pred = pipeline.predict(X_test)
print(classification_report(y_test, y_pred))

管道中具有时间序列特征提取的精度,召回,F分数(RelevantFeatureAugmentor和RandomForestClassifier)

结论

该模型可用于分布式工业大数据应用,用于以下目的:

  • 除了几个元信息之外,它还允许考虑每个标签的几种不同的时间序列类型。
  • 并行分布式功能有助于功能提取和过滤可扩展。数据在分布式架构中处理,用于在广泛的基础架构上分散数据,限制数据聚合和集中式基础架构上的处理。
  • 它允许从更专业的机器学习算法轻松组合特定于域的和可能的有状态特征映射。
  • 该算法有助于对具有有限领域知识和低计算复杂度的不同工业大数据用例进行建模。
  • 该模型与样本数和时间序列长度成线性比例。

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码