k-Means单次通过种子选择算法

我最近阅读了k-Means单次通过种子选择算法的文章,但对其中的算法不太理解,具体如下:

  1. 计算距离矩阵Dist,其中Dist (i,j)表示从ij的距离
  2. 计算Sumv,其中Sumv (i)是第i个点到所有其他点的距离之和
  3. 找到Sumv的最小值对应的点i,并设置Index = i
  4. 将第一个点添加到C中作为第一个中心点
  5. 对于每个点xi,设置D (xi)xiC中最近点的距离
  6. 计算y,它是Index点的前n/k个最近点的距离之和
  7. 找到唯一的整数i,使得D(x1)^2+D(x2)^2+...+D(xi)^2 >= y > D(x1)^2+D(x2)^2+...+D(x(i-1))^2
  8. xi添加到C
  9. 重复步骤5-8直到获得k个中心点

特别是步骤6,我们是继续使用同一个Index(同一个点)还是使用C中新添加的点?关于步骤8,i是否必须大于1


回答:

说实话,我不会太担心理解那篇论文——它并不是很好。

  • 算法描述得不好。
  • 它实际上不是单次通过,需要进行n^2/2次成对计算再加上一次数据遍历。
  • 他们没有报告他们的种子选择方案的运行时间,可能是因为它的工作量是O(n^2),非常差。
  • 他们在非常简单的数据库上进行评估,这些数据库中k-Means不太容易陷入糟糕的解中。
  • 他们评估“更好”的一个指标是给定种子选择后k-means运行所需的迭代次数。虽然这是一个有趣的指标,但他们报告的微小差异是无意义的(k-means++种子选择可能需要更多迭代,但每次迭代的工作量更少),而且他们没有报告运行时间或他们使用的k-means算法类型。

你会从学习和理解他们所比较的k-means++算法中获得更多益处,并阅读一些相关的背景历史。

如果你真的想理解他们在做什么,我建议你提升一下你的Matlab技能,并阅读他们提供的Matlab代码。但这真的不值得。如果你查找分位数种子选择算法,他们基本上在做非常相似的事情。不是使用到第一个种子的距离来排序点,他们似乎在使用成对距离的总和(这意味着他们不需要初始种子,因此有唯一解)。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注