我正在尝试制作一个简单的异常值检测程序,该程序能够正确或几乎正确地识别数据集中可能是潜在异常值的值,因为它们不属于相同的其余值的分布数据集。
我不能使用分类或回归等监督技术,因为我没有获得任何历史的、标记的数据来训练模型,所以我将使用无监督技术,比如聚类。
我打算使用 k-means 聚类,但我阅读了多篇文章说 k-means 对异常值的效果非常糟糕,其中一些人建议我尝试使用高斯混合模型。
我知道高斯混合模型通过创建代表不同分布的不同集群来工作。我正在使用 Spark 的(Apache)版本的高斯混合模型,这给了我与我的问题相关的两列:一个预测列,它为我提供了数据集中的数据点已分配到的集群,以及一个概率列,这是一列,它为我提供了每个值必须分配给每个集群的概率。使用这种方法,我如何确定异常值?
我认为将较低集群(点数最少的集群)上的那些值标记为异常值,但这不是一个好方法,因为在没有异常值的情况下,总会有一个集群比其他集群小因为 GMM 不会均匀地分布集群中的值。我可以使用任何替代方法吗?