为我的无监督机器学习问题选择模型

机器算法验证 异常值 高斯混合分布 无监督学习
2022-03-31 15:06:07

我需要为无监督机器学习问题选择一个模型。3D 空间中有 4 个簇。这些是我的要求:

  • 我将使用不同的训练数据多次运行相同的模型(用于实时应用)。
  • 训练数据的大小预计在 400 点左右。
  • 我可以假设每个集群的点都是从高斯分布中得出的。这不是必须存在于模型中的要求。
  • 我需要得到代表集群“中心”的 4 个点。
  • 在预测时间,对于每个新点,我需要每个集群的某种数字来表示属于集群的概率。
  • 我会有很多异常值,假设大约 30%。

我尝试过高斯混合模型,当我没有异常值时它效果很好。不幸的是,这个模型对异常值非常敏感。

有什么建议如何使用高斯混合模型处理异常值?还是我应该使用完全不同的模型?

4个回答

这里有一些建议,因为高斯混合模型在没有异常值的情况下非常适合您。

为了提高对异常值的鲁棒性,您可以对高斯混合模型使用修整估计器,而不是使用标准 EM 算法进行拟合。一些相关论文:

除了高斯混合模型,您还可以考虑学生 T 混合模型。这将提供您想要的相同属性(例如计算集群质心和成员概率的能力)。学生 T 分布的尾部比高斯分布更重,这增加了对异常值的鲁棒性。一些相关论文:

看,这可能不是最好的主意,但无论如何我都会建议。

你说你正在处理一个无监督的机器学习问题,但是说:

  • 您可以假设在这个 4 维空间中,您的数据是多元高斯;

  • 当异常值不多时,您的模型运行良好

如果您负担得起不将类分配给异常值观察,请使用前面提到的 DBSCAN 或HDBSCAN,您甚至可以在没有高斯假设的情况下工作。

现在,我的想法是:基于您的问题在没有异常值时运行良好这一事实,我建议您将这个问题变成有监督的问题,前提是:

  • 每次运行聚类算法时,您都有一致的聚类数

  • 这些点始终分配给相同的集群

当你有一个标记的数据集(聚类后)时,你可以使用最合适的分类算法来为这些聚类分配新的点,或者根据预测的概率工作(提示,KNN在低维空间中创造奇迹,比如你的) .

如果一切正常,离群值应该被分类为属于任何集群的概率很低,您可以编写您的在线应用程序来处理这些情况。

我假设所需的四个集群将具有相似的密度。如果是这种情况,那么您可以使用基于密度的聚类方法,DBSCAN 对我来说效果很好。您可以在训练期间找到所有可以找到的集群,并对集群大小设置一个阈值,以防止异常值成为您所需集群的一部分。

使用这一点,以及一些关于什么是异常值的知识,您可以查看集群并查看异常值(大约 30% 似乎有点偏高)本身是否形成了一个集群。

python 中的 Scikit-learn 有一个内置函数。 sklearn.cluster.DBSCAN

当有人说(重述)时​​,我的脑海中出现了红旗

我可以为我的算法假设属性 X,但是这个属性 X 不需要出现在数据中。

这立即指出了可能的性能问题和/或重新评估模型选择步骤的理由。

话虽如此,我还没有使用 GMM 进行超出基本 EM 算法的聚类以找到点的密度参数。但据我所知,使用 GMM 进行聚类是模糊的,即根据实现方法,您可以根据一些感兴趣的标准改变聚类分配。

使用上述方法,我建议在语义上将相似项目组合在一起的自组织地图。作为第二步,可以在其之上应用聚类。参考

此外,在使用混合模型时,探索核方法可能会非常富有成效,因为现在,您的决策边界可以在更高维空间中更具表现力。是一篇从理论上讨论如何使用内核使常见的聚类方法更加健壮的论文,它还涵盖了混合高斯密度的数据。