【问题标题】:maxmin clustering algorithm最大最小聚类算法
【发布时间】:2014-12-06 01:35:00
【问题描述】:
我阅读了一篇提到最大最小聚类算法的论文,但我不太了解该算法的作用。谷歌搜索“最大最小聚类算法”不会产生任何有用的结果。有人知道这个算法是什么意思吗?这是论文的摘录:
Max-min 聚类通过随机选择一个观测值作为第一个质心 c1,并将质心集合 C 设置为 {c1} 来进行。 在第 i 次迭代期间,选择 ci 以使其最大化 ci 和 C 中的观测值之间的最小欧几里得距离。 Max-min 聚类优于基于密度的聚类算法(例如 k-means),后者倾向于从密集的非占用数据点组中选择许多示例。
我不太明白粗体部分。
论文链接是here
【问题讨论】:
标签:
algorithm
cluster-analysis
【解决方案1】:
我们选择每个新质心尽可能远离现有质心。这是一些 Python 代码。
def maxminclustering(observations, k):
observations = set(observations)
if k < 1 or not observations: return set()
centroids = set([observations.pop()])
for i in range(min(k - 1, len(observations))):
newcentroid = max(observations,
key=lambda observation:
min(distance(observation, centroid)
for centroid in centroids))
observations.remove(newcentroid)
centroids.add(newcentroid)
return centroids
【解决方案2】:
这听起来很像 播种 k-means 的最远点启发式算法,但根本不执行任何 k-means 迭代。
这是一个非常简单但非常有效的策略。基本上它会找到一些分布良好的数据点,这可以使k-means快速收敛。通常,人们会丢弃第一个(随机)数据点。
虽然它只适用于 k 值较低的情况(它避免将质心放置在数据集的中心!),并且对多次运行不太有利 - 它倾向于再次选择相同的初始质心。
K-means++ 可以看作是一个更加随机化的版本。它不是总是选择较远的对象,而是选择可能性增加的远对象,但也可能随机选择近邻。这样,您在多次运行时会获得更多样化的结果。
你可以在 ELKI 中试用它,它被命名为FarthestPointsInitialMeans。如果你选择算法SingleAssignmentKMeans,那么它不会执行k-means迭代,而只会做初始赋值。这可能会给你这个“MaxMin 聚类”算法。