专注于工业智能预警系统研发, 通过机理算法和数据驱动算法分析振动信号、音频、DCS、PLC信号、SCADA信号等设备运行状态数据对机器设备进行看病预诊,为机器设备健康运行保驾护航。 网站正在不断建设和完善过程中,欢迎大家给予建议和参与社区建设
52phm,专注于预测性维护知识学习和交流,欢迎广大从事预测性维护行业人员投稿,投稿请联系管理员(wx: www52phmcn),投稿内容可以是:
几乎所有异常值检测算法都会建立数据中正常模式的模型,然后根据这些模式的偏差计算给定数据点的异常值。
例如,该数据模型可以是生成模型,例如高斯混合模型,基于回归的模型或基于邻近的模型。
所有这些模型对数据的“正常”行为做出不同的假设。 然后通过评估数据点与模型之间的拟合质量来计算数据点的离群值分数。
在很多情况下,模型可能是算法定义的。 例如,基于最近邻的离群值检测算法根据其最近邻距离的分布对数据点的离群值趋势进行建模。
因此,在这种情况下,假设就是异常值位于距离大部分数据很远的地方。
显然,数据模型的选择至关重要。数据模型的选择不正确可能会导致结果较差。
例如,如果数据不适合模型的生成假设,或者没有足够数量的数据点来获取模型的参数,则完全生成模型(如高斯混合模型)可能无法正常工作。
同样,如果基础数据是任意聚集的,则基于线性回归的模型可能效果不佳。在这种情况下,数据点可能被错误地报告为异常值,因为对模型的错误假设是不适合的。
不幸的是,异常值检测在很大程度上是一个无监督的问题,在这个问题中,异常值的例子不能用于学习特定数据集的最佳模型(以自动方式)。
异常值检测的这一方面往往使其比许多其他监督的数据挖掘问题(如标记示例可用的分类)更具挑战性。
因此,在实践中,模型的选择常常由分析人员对与应用程序相关的偏差种类的理解所决定。
例如,在测量诸如位置特定温度之类的行为属性的空间应用中,假设空间位置中的温度属性的异常偏差是异常的指标是合理的。
另一方面,对于高维数据的情况,由于数据的稀疏性,即使数据局部性的定义也可能是不明确的。
因此,只有仔细评估该域的相关建模属性后才能构建特定数据域的有效模型。
为了理解模型的重要性,下面研究下Z值在异常值分析中的应用。考虑一组1维定量观测数据,用X1… XN表示,平均值为μ和标准差为σ。数据点Xi的Z值用Zi表示,定义如下:
Z值检验计算数据点远离平均值的标准偏差。这为异常值提供了一个很好的参考。
一个隐含的假设为数据是服从正态分布,因此,Z值是从标准正态分布中抽取的零均值和方差为1的随机变量。
在准确估计分布的均值和标准差的情况下,好的“经验法则”是使用Zi≥3作为异常的代表。然而,在样本数量很少的情况下,分布的均值和标准差不能被有效估计。
在这种情况下,Z值测试的结果需要用t分布而不是正态分布进行更仔细的解释。这个问题将在第二章讨论。
在建模过程中,实践者经常忘记Z值检验隐含的数据服从正态分布这一假设。 当这样的近似值较差时,结果是难以解释的。
举个例子,两组数据的频率直方图分别为下图1.3(a)与1.3(b),当数据为1.3(a)时,在第一种情况下,直方图采用(μ,σ)=(10,2)的正态分布进行采样,在第二种情况下,从分布为1 / i函数中采样。
很明显,大部分数据处于正态分布的范围[10-2 * 3,10 2 * 3]内,并且所有位于该范围之外的数据点都可以被认为是异常的。
因此,Z值测试在这种情况下工作得非常好。在第二种情况下,异常情况并不十分清楚,尽管具有非常高的值(例如20)的数据点可能被认为是异常的。
在这种情况下,数据的平均值和标准差分别是5.24和5.56。因此,Z值检验不会将任何数据点声明为异常(对于阈值为3),尽管它确实接近。
无论如何,至少从概率可解释的角度来看,第二种情况Z值的重要性并不是很有意义。这表明,如果在建模阶段出错,可能会导致对数据的错误理解。
这样的测试通常被用作一种启发式方法,即使对于远离正态分布的数据集也能提供异常值分数的粗略概念,仔细解释这些分数是非常重要的。
Z值检验即使作为启发式的方法,也并不是针对所有例子,若Z值检验应用于1.1节的图1.1(a)那个例子中,则A点判断为(非常)正常点,这一判断显然是错误的。
因此,模型的有效性取决于所用测试的选择以及如何应用。
模型的最佳选择通常基于特定的数据。这需要在选择模型之前对数据本身有一个很好的理解。
例如,一个基于回归的模型最适合在图1.4的数据分布中找出异常值,其中大部分数据沿线性相关平面分布。
另一方面,聚类模型更适合图1.1(上一节)所示的情况。 给定数据集的模型选择不当可能会导致较差的结果。
*因此,发现异常值的核心原则是基于对给定数据集中正常模式结构的假设。 显然,“正常”模型的选择很大程度上取决于分析人员对该特定领域的数据模式的理解。
* 这意味着分析师对数据表示的语义理解通常是有用的,尽管这在实际设置中通常是不可能的。
模型选择中有许多折衷。 一个具有太多参数的高度复杂的模型将很可能导致过度拟合。
一个简单的模型,它对数据有很好的直观理解(也可能是分析师对正在寻找的东西的理解),可能会带来更好的结果。
另一方面,一个过于简化的模型,可能会将正常数据判别为异常值。 选择数据模型的最初阶段也许是异常分析中最关键的一步。 本书将重复关于数据模型影响的主题,并举例说明。
原文链接:https://wanpingdou.blog.csdn.net/article/details/79096730
2021-12-19 14:55:27
互联网
1050
分类:论文速递
专栏:工业异常检测
2021-12-21 11:00:12
互联网
457
分类:算法开发
专栏:工业异常检测
2021-12-21 11:05:07
互联网
805
分类:算法开发
专栏:工业异常检测
关注公众号进群
让志同道合读者学习交流
pip安装报错:ImportError: No module named 'pip',分享个人踩坑记录,并介绍了解决方法
2021-12-04 11:21:53
博客笔记
951
分类:开发环境
专栏:未分组
pip安装报错:ImportError: No module named 'pip._internal',分享python安装模块的踩坑记录,希望能帮到各位解决bug
2021-12-04 11:22:03
博客笔记
1091
分类:开发环境
专栏:bug
pip出现错误,ImportError: module 'pip' has no attribute 'main'下面介绍一个很好的解决方法,一般涉及到安装pip错误的时候,使用这个方法很有效果,本人亲测可行。其实主要思路就是重新从源地址下载pip的Python源代码,然后再通过这个py文件去安装pip。
2021-12-04 11:22:27
博客笔记
1133
分类:开发环境
专栏:未分组
更新matplotlib报错:Consider using the `--user` option or check the permissions. 在一次更新matplotlib时,发生报错,报信信息以及解决方法总结如下1、报错信息因为matplotlib需要更新,在终端输入以下命令:
2021-12-04 11:22:38
博客笔记
681
分类:开发环境
专栏:未分组
import numpy 报错:ModuleNotFoundError: No module named 'numpy.testing.nosetester'### 1、报错信息在import numpy的时候编译器提示这个问题,就很奇葩,报错信息如下所示ModuleNotFoundError: No module named 'numpy.testing.nosetester'
2021-12-04 11:22:58
博客笔记
997
分类:开发环境
专栏:bug
下载超时:pip.ReadTimeoutError:HTTPSConnectionPool: Read timed out.报错信息在安装Python模块包的时候,常常会因为各种原因下载失败,其中类似使用国外镜像下载、或者网速环境差的话,很容易会下载超时而失败。
2021-12-04 11:23:24
博客笔记
880
分类:开发环境
专栏:未分组
不能卸载某个模块包:Cannot uninstall 'colorama'报错信息在卸载某个Python模块包时,发现并不能成功卸载,反而发生异常报错,报错信息如下:
2021-12-04 11:23:43
博客笔记
1152
分类:开发环境
专栏:bug
解决ipynb文件加载失败的问题:Unreadable Notebook: D:\xxx.ipynb NotJSONError报错信息 在jupyter notebook打开ipynb notebook文件时,发现加载一直不成功,另外还爆出异常提示信息,异常信息如下:
2021-12-04 11:23:53
博客笔记
979
分类:开发环境
专栏:未分组
import numpy as npimport pandas as pddef Buishand_U_change_point_detection(inputdata): inputdata = np.array(inputdata) inputdata_mean = np.mean(inputdata) n = inputdata.shape[0] k...
2021-12-21 11:07:15
互联网
668
分类:算法开发
专栏:工业异常检测
python输入input输出print函数python输入输出语句分别对应着input()和print()函数,下面分别对这两个函数进行介绍和实操。1、输入语句input()新建一个tmp.py文件当我们输入字符串时,返回数据类型是字符串# -*- coding: utf-8 -*-name = input("请输入您的名字:")print(name, type(name))运行tmp.py后,会提示手动输入信息,回车后就可以得到输出结果:请输入您的名字:小知小知 <c
2022-01-17 23:25:01
博客笔记
863
分类:算法开发
专栏:python基础
从事设备故障预测与健康管理行业多年的PHM算法工程师(机器医生)、国际振动分析师, 实践、研发和交付的项目涉及“化工、工业机器人、风电机组、钢铁、核电、机床、机器视觉”等领域。专注于工业智能预警系统研发, 通过机理算法和数据驱动算法分析振动信号、音频、DCS、PLC信号、SCADA信号等设备运行状态数据对机器设备进行看病预诊,为机器设备健康运行保驾护航。