k-means聚类可以进行分类吗?

时间:2014-03-10 13:00:21

标签: algorithm cluster-analysis data-mining k-means

我想知道k-means聚类算法是否可以进行分类?

如果我做了一个简单的k-means聚类。

假设我有很多数据,我使用k-means聚类,然后得到2个聚类A,B。质心计算方法是欧几里德距离。

左侧的群集A.

右侧的群集B.

所以,如果我有一个新数据。我该怎么办?

  1. 再次运行k-means聚类算法,可以得到新数据属于哪个聚类?

  2. 记录最后一个质心并使用欧几里德距离进行计算以确定新数据属于哪个?

  3. 其他方法?

7 个答案:

答案 0 :(得分:17)

最简单的方法当然是2.,将每个对象分配到最近的质心(从技术上讲,使用平方和,而不是欧几里德距离;这对于k均值来说更正确,并为你节省了一个sqrt计算)。

方法1.很脆弱,因为k-means可能会给你一个完全不同的解决方案;特别是如果它首先不适合你的数据(例如太高的尺寸,太大的群集,太多的群集,......)

但是,以下方法可能更合理:

第3。训练一个实际的分类器。

是的,你可以使用k-means来产生一个初始分区,然后假设k-means分区可能是合理的类(你真的应该在某些时候验证这个),然后如果数据已被用户标记,则继续。

即。运行k-means,在生成的集群上训练SVM。然后使用SVM进行分类。

k-NN分类,甚至将每个对象分配到最近的聚类中心(选项1)可以看作非常简单的分类器。后者是1NN分类器,仅在集群质心上“训练”。

答案 1 :(得分:4)

是的,我们可以进行分类。

我不会说算法本身(比如#1)特别适合对点进行分类,因为将要分类到训练数据中的数据合并起来往往不受欢迎(除非你有一个实时系统,但我认为详细说明这一点会有点远。)

要对新点进行分类,只需计算每个群集质心的欧几里德距离以确定最接近的点,然后在该群集下对其进行分类。

有一些数据结构可以让你更有效地确定最近的质心(比如kd-tree),但上面是基本的想法。

答案 2 :(得分:2)

如果您已经对数据进行了k-means聚类以获得两个聚类,那么您可以在新数据点上使用k Nearest Neighbors来找出它所属的类。

答案 3 :(得分:0)

如果您正在进行实时分析,您希望在使用过程中识别新条件(或适应不断变化的系统),那么您可以选择质心周围的某个半径来决定新点是否开始新的簇或应该包含在现有的中。 (这是监控工厂数据的常见需求,例如,在某些运行条件发生之前安装可能需要数年才能完成。)如果是实时监控,请检查RTEFC或RTMAC,这些都是高效,简单的实时K均值的变体。特别是RTEFC,它是非迭代的。见http://gregstanleyandassociates.com/whitepapers/BDAC/Clustering/clustering.htm

是的,您可以将其用于分类。如果您已经确定已经为所有可能的情况收集了足够的数据,则可以停止更新聚类,并根据最近的质心对新点进行分类。与任何实时方法一样,将对异常值敏感 - 例如,当使用传感器数据时由传感器错误或故障引起的异常值。如果您创建新群集,如果群集的一个目的是识别传感器中的故障,则异常值可被视为合法,尽管在您可以对群集进行一些标记时最有用。

答案 4 :(得分:0)

这是另一种方法:

我在“统计学习的要素”上看到了它。我会稍微改变一下表示法。令C为类数,K为簇数。现在,请按照以下步骤操作:

  1. 使用每班K个聚类,分别将K均值聚类应用于每个班级的训练数据。
  2. 为每个C * K群集分配一个类别标签。
  3. 将观察值x分类为最接近的聚类。

这似乎是一种不错的分类方法,它通过使用聚类来减少数据观察。

答案 5 :(得分:0)

您正在混淆集群和分类的概念。给数据加上标签后,您已经知道如何根据标签对数据进行聚类,并且对数据进行聚类没有任何意义,除非您想找出特征对这些类的区分程度。

如果您运行k-means算法来查找每个类的质心,然后使用距质心的距离对新数据点进行分类,则实际上您会采用线性判别分析算法的形式,假设所有类别的同一性协方差矩阵。

答案 6 :(得分:0)

k-均值聚类算法收敛后,可用于分类,几乎没有标记的样本/训练数据。 由于标签成本高,带有标签的训练实例(数据)的数量非常有限时,这是一种非常普遍的方法。