python - 使用高斯混合的异常值检测

标签 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)

最佳答案

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

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

关于python - 使用高斯混合的异常值检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48156847/

相关文章:

python - 将元组元素转换为字典

python - __repr__ 方法的目的?

python - 删除 pandas 中名称相似且 nan 超过 50% 的列

iphone - 如何识别一个可靠的 "hw.machine"标识符?

iOS:如何检测Ipad是否放入特殊框架中

c++ - C++ 中的多元正态密度函数

r - 将多个峰拟合到数据集并在 R 中提取单个峰信息

python - 使用 Matplotlib 绘制二元高斯分布

Python - 创建一个运行代码的 EXE,而不是编译时的代码

python - 使用 Pytesseract OCR 对具有表结构的图像进行错误字符识别