Machine learning 如何使用KL散度进行聚类?

Machine learning 如何使用KL散度进行聚类?,machine-learning,k-means,Machine Learning,K Means,我想用KL散度作为度量标准对数据进行聚类 在K-means中: 选择集群的数量 随机初始化每个簇的平均值 将每个数据点分配给具有最小距离值的簇c 将每个簇的平均值更新为分配给它的数据点的平均值 在欧几里德的情况下,只需平均每个向量,就可以很容易地更新平均值 但是,如果我想使用KL散度作为我的度量,我如何更新我的平均值?使用KL散度进行聚类可能不是最好的主意,因为KLD缺少一个重要的特性:对称性。获得的星团可能很难解释。如果您想继续使用KLD,您可以使用KLD的平均距离,即 d(x,y)=KLD(

我想用KL散度作为度量标准对数据进行聚类

在K-means中:

  • 选择集群的数量

  • 随机初始化每个簇的平均值

  • 将每个数据点分配给具有最小距离值的簇
    c

  • 将每个簇的平均值更新为分配给它的数据点的平均值

  • 在欧几里德的情况下,只需平均每个向量,就可以很容易地更新平均值


    但是,如果我想使用KL散度作为我的度量,我如何更新我的平均值?

    使用KL散度进行聚类可能不是最好的主意,因为KLD缺少一个重要的特性:对称性。获得的星团可能很难解释。如果您想继续使用KLD,您可以使用KLD的平均距离,即


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

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


    正如米丘斯所说,吉隆坡的散度不是一个度量。您需要Jenson-Shannon散度来实现对称。

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

  • 它不是对称的KLD(x,y)~=KLD(y,x)
  • 在编程中使用KLD时需要小心:除法可能导致Inf值和NAN值

  • 添加一个小数字可能会影响准确性。

    好吧,在“k-means框架”中使用KL可能不是一个好主意。正如所说的,它不是对称的,K-均值是用来处理欧几里德空间的

    但是,您可以尝试使用NMF(非负矩阵分解)。事实上,在《数据聚类》(由Aggarwal和Reddy编辑)一书中,您可以找到证明NMF(在聚类任务中)与k-means一样工作的证据,只有在非负约束条件下。有趣的是,NMF可以使用一系列不同的距离和发散。如果编写python:scikit learn 0.19实现了beta散度,它有一个变量beta作为自由度。根据β的值,散度具有不同的行为。当β等于2时,它假设KL发散的行为

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

    您可以找到更多信息:

    • 非负矩阵的算法 带β-散度的因式分解”,神经计算,v。23,n。 2011年12月9日,第2421-2456页。ISSN:0899-7667。内政部:10.1162/NECO_a_00168。 Dis-poni级别em:

    • 罗,M.,聂,F.,张,X.,等,“概率非负。” 矩阵分解及其主题建模的健壮扩展。” 摘自:AAAI,第2308-23142017页

    • KUANG,D.,CHOO,J.,PARK,H.“非负矩阵分解 交互式主题建模和文档聚类”。在: 分区聚类算法,斯普林格,第215-243页,2015年


    谢谢。但我的问题是如何更新平均值?“我想你说的是如何将数据分配给集群。@Jing:我想这取决于你的问题。”。如果一个平均向量没有意义,那么在聚类
    C
    中选择“最佳”点
    m
    ,即
    d(m,x)
    C
    x
    的和最小。如果一个平均值是有意义的,那么你需要解出任何
    m
    (也在你的分数之外)来最小化上述总和。是的!我认为是这样。感谢我,因为我猜对于KLD,天真的平均向量不会最小化目标,因此K-means不会收敛。我一直在投票,可能是因为人们不想花时间阅读文献,但你可以用普通的KL分歧进行聚类:实际上,本文中有一个Python 2实现: