我需要对一组二维数据进行一些聚类分析(我可能会在此过程中添加额外的维度)。
分析本身将构成输入可视化数据的一部分,而不是输入到另一个过程(例如Radial Basis Function Networks)。
为此,我想找到一组主要“看起来正确”的集群,而不是阐明一些隐藏的模式。
我的直觉是k-means将是一个很好的起点,但找到合适数量的集群来运行算法会有问题。
我要解决的问题是:
如何确定 k 的“最佳”值,以便形成的群集稳定且可视化验证?
问题:
答案 0 :(得分:5)
对于群集数量未知的问题,凝聚层次聚类通常比k均值更好。
Agglomerative clustering生成树形结构,离树干越近,簇的数量越少,因此可以轻松扫描所有簇数。该算法首先将每个点分配给它自己的簇,然后重复分组两个最接近的质心。跟踪分组序列可以为任意数量的可能群集创建即时快照。因此,当你不知道你想要多少组时,通常最好使用这种技术而不是k-means。
还有其他层次聚类方法(参见Imran评论中提出的论文)。凝聚方法的主要优点是有许多实现,可供您使用。
答案 1 :(得分:2)
为了使用k-means,你应该知道有多少个集群。您无法尝试天真的元优化,因为您要添加的群集越多(每个数据点最多1个群集),它就会越多地使您过度拟合。您可以查找一些集群验证方法并使用它来优化k超参数,但根据我的经验,它很少能够正常工作。这也是非常昂贵的。
如果我是你,我会做一个PCA,最终在多项式空间(照顾你的可用时间),这取决于你对输入的了解,并沿着大多数代表组件聚集。
您的数据集上的更多信息对于更精确的答案非常有帮助。
答案 2 :(得分:2)
这是我的近似解决方案:
该算法背后的论点是 k 集群的数量对于 k 的“好”值而言是小的。
如果我们能找到这种稳定性的局部最优值,或稳定性的最佳增量,那么我们就可以找到一组好的聚类,这些聚类无法通过添加更多聚类来改进。
答案 3 :(得分:2)
在previous answer中,我解释了Self-Organizing Maps (SOM)如何在视觉聚类中使用。
否则,存在称为X-Means的K-Means算法的变体,其能够通过优化贝叶斯信息准则(BIC)来找到群集的数量,此外使用 KD-trees 解决可扩展性问题 Weka包括X-Means的实现以及许多其他聚类算法,所有这些都在一个易于使用的GUI工具中。
最后,您可以参考this page讨论弯头方法以及确定数据集中群集数量的其他技术。
答案 4 :(得分:1)
您可能会查看有关群集验证的论文。 Here's one在涉及微阵列分析的论文中被引用,其涉及聚类具有相关表达水平的基因。
一种这样的技术是 Silhouette measure ,用于评估标记点与其质心的接近程度。一般的想法是,如果一个点被分配给一个质心但仍然接近其他质心,那么它可能被分配给了错误的质心。通过在训练集中计算这些事件并查看各种 k - 平均聚类,可以查找 k ,使得标记点总体上属于“最佳”或最低限度模糊布置。
应该说聚类更像是一种数据可视化和探索技术。很难确定一个聚类正确解释数据,尤其是其他聚类。最好将您的群集与其他相关信息合并。是否有关于您的数据的功能或其他信息,以便您知道某些群集是不可能的?这可以大大减少您的解决方案空间。
答案 5 :(得分:1)
从您的维基百科链接:
关于计算复杂性, k均值聚类问题是:
- NP-hard一般欧几里德 空间d甚至2个集群
- NP-hard获得一般数量 甚至在飞机上聚集k
- 如果k和d是固定的,问题就出在了 完全解决了时间O(ndk + 1 log n), 其中n是要实体的数量
因此,通常使用各种heuristic algorithms。
也就是说,找到一个好的k值通常是一个启发式过程(即你尝试一些并选择最好的)。
我认为k-means是一个很好的起点,它简单易行(或复制)。如果您遇到严重的性能问题,请进一步了解。
如果要聚类的点集非常大,则第一顺序优化将是随机选择一个小子集,使用该集来查找k-means。
答案 6 :(得分:1)
选择最佳K可视为Model Selection问题。一种可能的方法是Minimum Description Length,在此上下文中意味着:您可以存储包含所有点的表(在这种情况下K = N)。在另一个极端,你有K = 1,并且所有点都存储为距单个质心的距离。来自Manning和Schutze的信息检索简介中的This Section建议将Akaike Information Criterion最小化为最优K的启发式。
答案 7 :(得分:1)
这个问题属于"内部评估" "聚类优化问题"哪个现有技术解决方案似乎使用** Silhouette * coeficient *如所述here
https://en.wikipedia.org/wiki/Cluster_analysis#Applications
和here:
https://en.wikipedia.org/wiki/Silhouette_(clustering):
"剪影图和平均值可用于确定数据集中的自然簇数"
scikit-learn提供了方法的示例用法实现here http://scikit-learn.org/stable/auto_examples/cluster/plot_kmeans_silhouette_analysis.html