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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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