我如何与KL-divergence聚类?

时间:2013-02-02 10:22:26

标签: machine-learning k-means

我希望将KL-divergence作为我的指标对我的数据进行聚类。

在K-means中:

  1. 选择群集数量。

  2. 随机初始化每个群集的均值。

  3. 将每个数据点分配给距离值最小的群集c

  4. 将每个群集的平均值更新为分配给它的数据点的平均值。

  5. 在欧几里德案例中,只需平均每个向量,就可以轻松更新均值。

    但是,如果我想使用KL-divergence作为我的指标,我该如何更新我的意思?

4 个答案:

答案 0 :(得分:6)

具有KL分歧的聚类可能不是最好的主意,因为KLD缺少metrics的重要属性:对称性。因此,获得的集群可能很难解释。如果您想继续使用KLD,您可以使用KLD平均值的距离,即

d(x,y) = KLD(x,y)/2 + KLD(y,x)/2

答案 1 :(得分:2)

使用KLD不是一个好主意,原因有两个: -

  1. 不对称KLD(x,y)〜= KLD(y,x)
  2. 在编程中使用KLD时需要小心:分割可能会导致Inf值和NAN。
  3. 添加较小的数字可能会影响准确性。

答案 2 :(得分:0)

K-means用于处理欧几里德距离:如果要在聚类中使用非欧几里德相似性,则应使用不同的方法。使用任意相似性度量进行聚类的最有原则的方法是spectral clustering,并且K-means可以作为其变体导出,其中相似性是欧几里德距离。

正如米奇勒所说,吉隆坡的分歧不是衡量标准。你希望简森香农分歧对称。

答案 3 :(得分:0)

嗯,在“k-means框架”中使用KL可能不是一个好主意。如上所述,它不是对称的,而且K-Means旨在用于欧几里德空间。

但是,您可以尝试使用NMF(非负矩阵分解)。实际上,在“数据聚类”(由Aggarwal和Reddy编辑)一书中,您可以找到证明NMF(在聚类任务中)像k-means一样工作,只有非负约束。有趣的是,NMF可能会使用一堆不同的距离和差异。如果你编程python:scikit-learn 0.19实现beta分歧,它具有变量beta作为自由度。根据β的价值,分歧具有不同的行为。在beta等于2时,它假定KL分歧的行为。

这实际上在主题模型上下文中非常常用,人们尝试在主题(或主题)上聚集文档/单词。通过使用KL,结果可以被解释为关于单词主题和主题分布如何相关的概率函数。

您可以找到更多信息:

  • FÉVOTTE,C.,IDIER,J。“非负矩阵的算法 用β分歧进行分解“,神经计算,第23卷,n。 9,pp.2421-2456,2011。ISSN:0899-7667。 doi:10.1162 / NECO_a_00168。 Disponívelem:。

  • LUO,M.,NIE,F.,CHANG,X。,et al。 “概率非负面 矩阵分解及其主题建模的鲁棒扩展。“ 在:AAAI,第2308-2314页,2017年。

  • KUANG,D.,CHOO,J.,PARK,H。“非负矩阵分解 交互式主题建模和文档聚类“。在: Partitional Clus- tering Algorithms,Springer,pp.215-243,2015。

http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.NMF.html