使用高斯混合物进行离群检测

时间:2018-01-08 19:25:22

标签: python detection gaussian mixture

我在numpy数组中的17个特征中的每个特征都有5000个数据点,从而产生5000 x 17阵列。我试图使用高斯混合物找到每个特征的异常值,我对以下内容感到困惑:1)我应该为GaussiasnMixture使用多少个组件? 2)我应该将GaussianMixture直接拟合在5000 x 17的数组上,还是单独插入每个特征列,得到17个GaussianMixture模型?

clf = mixture.GaussianMixture(n_components=1, covariance_type='full')
clf.fit(full_feature_array)

clf = mixture.GaussianMixture(n_components=17, covariance_type='full')
clf.fit(full_feature_array)

for feature in range(0, full_feature_matrix):
    clf[feature] = mixture.GaussianMixture(n_components=1, covariance_type='full')
    clf.fit(full_feature_array[:,feature)

1 个答案:

答案 0 :(得分:3)

选择使用高斯混合模型对分布建模的组件数量的任务是模型选择的实例。这不是那么简单,并且存在许多方法。可在此处找到一个很好的摘要https://en.m.wikipedia.org/wiki/Model_selection。最简单和最广泛使用的一种是执行交叉验证。

通常可以将异常值确定为属于具有最大方差的一个或多个组件的异常值。您可以将此策略称为无监督方法,但仍然难以确定截止方差应该是什么。更好的方法(如果适用)是一种监督方法,您可以使用无异常数据训练GMM(通过手动删除异常值)。然后,您可以使用它将异常值分类为具有特别低的似然分数的异常值。采用监督方法的第二种方法是训练两个GMM(一个用于异常值,一个用于使用模型选择的内点),然后对新数据执行两级分类。关于训练单变量和多变量GMM的问题 - 很难说但是出于异常值检测的目的,单变量GMM(或等效的多变量GMM与对角线协方差矩阵)可能就足够了,并且与一般多变量GMM相比,需要训练更少的参数,所以我会从那开始。