答案 0 :(得分:0)
将每个新对象也分配到最近的群集中心。就是这样。
k-means找到您的数据的 Voronoi单元分区。使用此模型的唯一一致的群集分配(除非您希望例如基于新数据更新模型,这可能导致旧点的重新标记)是通过将每个点分配给它所在的Voronoi单元使用上述规则很容易完成。
请注意,群集不是分类。很少有聚类算法允许您将其模型应用于对新实例进行分类。他们不应该这样使用!群集的目的是更好地了解您的数据。工作流程是集群,然后研究结果,然后可能构建一些新的/与您学到的不同的东西。能够将新对象分类为“应该转到群集3”通常没有帮助,因为这假设A)群集有意义/有用(通常它们不是)和B)它们是干净的(通常是一些对象)不属于集群,他们将被人类分类。
之前已经多次询问过这个问题(使用搜索!):
答案 1 :(得分:-1)
你使用什么叫做概率k-means 算法。哪个在相同的输入数据点上多次运行k-means。在每次运行中,跟踪哪个点最终在哪个集群中。随着通过k-means的运行次数增加,您可以更好地预测属于某个集群的某个点。因此,对于某些数据点 Pi
,您可以通过以下操作找到某些群集 Ci
的概率: P(Pi in Ci) = (# of times in Ci)/(# of times not in Ci)
< / strong>即可。对每个群集执行哪种操作,概率最高的群集将是您对数据点 Pi
的预测。或者你可以简单地计算每个群集中点数的次数,并简单地选择最高计数。
注意:确保每次执行k-means时每个群集的标签都是一致的。这是通过使迭代 i
中使用的聚类的质心用作生成的下一个聚类的种子(具有稍微增加的接近最后一个中心的概率)来完成的在迭代 i+1
中,或者新迭代可以完全随机化。
使用概率k均值,因为标准k均值可能具有较差的聚类近似。虽然一个主要问题是,为了准确起见,这在计算上很重。因此,这仅适用于1D或2D数据,并且可能对现实世界数据过于沉重。处理这个问题的类似方法是k-means++。
更简单,更常见的方法是简单地执行k-means一次,对于新数据点 Pi
,只需获取该点与群集的所有中心点之间的距离,挑选最低的一个。该群集将用作该点的预测。这种方法要快得多,但可能会导致生成的群集出现不准确和近似不正确的情况,特别是如果该点是异常值并且两个最小群集之间的差异很接近。
如果您想要一个例子,我已经在1-D数据集上为灰度色数据 for an old class assignment实现了概率k-means。对你的数据集也可以做同样的事情(只是注意数据集的维度越高,运行的速度就越慢)据说它已经做了一段时间了(基本上代码有点凌乱) ),代码的重要部分从:for(var q=0;q<numOfComputes;q++)
开始。