假设我有一组数据(具有二维特征空间),我想从中获取集群。但我不知道会形成多少个集群。
然而,我想要单独的集群(集群的数量超过 2)。
我认为在这种情况下不能使用 k medoid 的 k 均值。我也不能使用层次聚类。此外,由于没有训练集,因此不能将 KNN 分类器用于任何其他分类器(监督学习不能用作没有训练集)。我不能使用 OPTICS 算法,因为我不想指定半径(我不知道半径)
是否有任何机器学习技术可以为我提供多个能够很好地处理异常点的集群(基于距离的集群)?
这应该是输出:

假设我有一组数据(具有二维特征空间),我想从中获取集群。但我不知道会形成多少个集群。
然而,我想要单独的集群(集群的数量超过 2)。
我认为在这种情况下不能使用 k medoid 的 k 均值。我也不能使用层次聚类。此外,由于没有训练集,因此不能将 KNN 分类器用于任何其他分类器(监督学习不能用作没有训练集)。我不能使用 OPTICS 算法,因为我不想指定半径(我不知道半径)
是否有任何机器学习技术可以为我提供多个能够很好地处理异常点的集群(基于距离的集群)?
这应该是输出:

事实是您可以使用您提到的任何算法,通常是任何需要将集群数量设置为参数的算法(或任何其他间接设置最终集群数量的参数,例如层次结构中的阈值聚类算法。)
您的问题的解决方案是模型选择。模型选择方法评估不同的聚类解决方案,并选择优化给定标准的解决方案。
例如,在 K-means 的情况下,您可以找到一系列 k 值的解决方案,并保留最大化任何集群验证措施的解决方案(请参阅 Wikipedia entry for cluster analysis 以阅读有关集群验证措施的一些示例)。
有自动的和更复杂的方法(一个具体的例子是 Muhr, M. 和 Granitzer, M. 的“使用拆分和合并 K-Means 方法的自动聚类数选择”,但这只是一个例子)。这些方法使用集群验证措施来自动拆分或合并集群,但思路基本相同。
我不认为像 k-means 和高斯混合模型这样的 EM 聚类算法正是您想要的。肯定有其他算法不需要一个人选择多个集群。我个人最喜欢的(大部分时间)称为均值偏移聚类。你可以在这里找到一篇很棒的小博客文章,它在 python 的 scikit-learn 库中有一个很好的实现。
OPTICS 中的半径是一个最大值,可以设置为无穷大!所以你不需要知道它,你应该试试 OPTICS 和 DBSCAN。如果您知道自己的数据,可以使用启发式方法来选择它们的参数。
同样,尝试层次聚类。关于如何从中提取平面分区有很好的启发式方法。
您需要能够很好地处理噪音的东西——这需要 DBSCAN、OPTICS 和 HAC。
如果数据合适,您可以使用高斯混合建模,通过 EM 算法拟合来估计各种单独的高斯簇。在确定聚类数量时,您可以使用 BIC(或其他惩罚似然标准)之类的东西来根据您估计的参数数量进行惩罚。然后简单地搜索不同数量的集群并选择具有最低 BIC 的数字。这是一种基于模型的聚类形式。
您应该能够使用mclustR 中的包来执行此操作:mclust: Gaussian Mixture Modeling for Model-Based Clustering, Classification, and Density Estimation。