我有一个问题,到目前为止,我还没有找到任何答案。
背景
我正在研究一个使用自动编码器的机器异常检测问题.我正在为每台机器构建一个模型文件,因为这些机器的时间行为变化很大。
我有五个特点:
我试着用标准化(MinMaxScaler和StandardScaler)来扩展数值特性,这一点都没有产生很好的效果。
作为对输入进行缩放的替代方案,我决定使用来自scikit的MinMaxScaler来扩展输出。这是为了我可以有一个通用的阈值,我可以应用在不同的模型,以识别异常。
虽然这已经产生了迄今为止最好的结果-在实践中,输出变得过于两极分化到0或1,因此我失去了我不应该是的离群值。
问题
什么缩放技术(S),我可以使用从我的自动编码器的输出,以便我可以应用一个通用阈值在所有的模型,以确定异常?
发布于 2019-06-05 16:30:56
我总是建议使用StandardScaler()而不是MinMaxScaler()。原因是后者对离群点太敏感。想象一下在0,1间隔中收缩给定的向量:
[1, 2, 3, 4, 999]大多数数据将被压缩到0,1间隔的一个极小的子空间中,从而导致荒谬的压缩。如果使用StandardScaler(),问题就不存在了。考虑到你正在试图检测异常观测,这看起来特别重要。(只有当确定给定变量在给定的值范围内有界时,我才会使用max缩放。)
但最重要的是:你的产出有哪些问题?据我们所知,它们可能不是由缩放造成的。
更新:
最近,我发现一种非常有效的缩放技术是健壮的max缩放。它的工作原理就像一个min- max,但是它不是在min和最大值之间完成,而是在min和某个百分位数之间完成(通常在95-99中)。这是非常有效的,当您的数据集遭受很少(但影响)异常值。这种方法可以确保95%-99%的数据集在[0,1]中得到适当的缩放,而很少有离群值会超出范围。
发布于 2019-06-06 22:11:35
什么缩放技术(S),我可以使用从我的自动编码器的输出,以便我可以应用一个通用阈值在所有的模型,以确定异常?
因为:
我正在为每台机器构建一个模型文件,因为这些机器的时间行为变化很大。
自动编码器将尝试学习机器输出的一般表示(或它的执行状态--或从机器行为中得到的任何数字),并将其理解为机器的一般图像。这是暂时的,所以如果有两台机器:
这是一个简单的问题,但:
没有标度会使这两个异常在一个尺度上结合在一起(一个可以执行一个思维实验,绘制两种日常CPU使用情况,然后尝试对这两个函数执行函数转换,以使它们看起来相同)。
事实上,在不同的时间,一个值与另一个值非常不同,这一事实使这种关系变得非线性。此外,这种关系也不能以平凡的非线性方式等同,例如:要将这两种CPU使用函数的导数等同起来,就需要非常高的导数,以至于这两个导数都为零--这意味着在这一点上将失去关于数据的所有信息。
https://datascience.stackexchange.com/questions/53246
复制相似问题