我想用 KL-divergence 作为我的指标对我的数据进行聚类。
在 K 均值中:
选择集群的数量。
随机初始化每个集群的平均值。
c
将每个数据点分配给距离值最小的集群。将每个集群的平均值更新为分配给它的数据点的平均值。
在欧几里得的情况下,更新均值很容易,只需对每个向量进行平均即可。
但是,如果我想使用 KL 散度作为我的指标,我该如何更新我的平均值?
我想用 KL-divergence 作为我的指标对我的数据进行聚类。
在 K 均值中:
选择集群的数量。
随机初始化每个集群的平均值。
c
将每个数据点分配给距离值最小的集群。
将每个集群的平均值更新为分配给它的数据点的平均值。
在欧几里得的情况下,更新均值很容易,只需对每个向量进行平均即可。
但是,如果我想使用 KL 散度作为我的指标,我该如何更新我的平均值?
使用 KL 散度进行聚类可能不是最好的主意,因为 KLD 缺少度量的一个重要属性:对称性。获得的集群可能很难解释。如果你想继续使用 KLD,你可以使用 KLD 的平均值作为距离,即
d(x,y) = KLD(x,y)/2 + KLD(y,x)/2
使用 KLD 不是一个好主意,原因有两个:-
添加少量可能会影响准确性。
好吧,在“k-means 框架”中使用 KL 可能不是一个好主意。如前所述,它不是对称的,K-Means 旨在处理欧几里得空间。
但是,您可以尝试使用 NMF(非负矩阵分解)。事实上,在 Data Clustering(由 Aggarwal 和 Reddy 编辑)一书中,您可以找到 NMF(在聚类任务中)与 k-means 一样工作的证明,只是在非负约束下。有趣的是,NMF 可能会使用一堆不同的距离和散度。如果你编程 python:scikit-learn 0.19 实现了 beta 散度,它有一个变量 beta 作为自由度。根据 beta 的值,分歧有不同的表现。在 beta 等于 2 时,它假设 KL 散度的行为。
这实际上在主题模型上下文中非常有用,人们试图将文档/单词聚集在主题(或主题)上。通过使用 KL,结果可以解释为关于词-主题和主题分布如何相关的概率函数。
您可以找到更多信息:
FÉVOTTE, C., IDIER, J. “具有 β-散度的非负矩阵分解算法”,神经计算,v. 23,n。9,第 2421-2456 页,2011 年。ISSN:0899-7667。doi: 10.1162/NECO_a_00168。Disponível em: .
LUO, M., NIE, F., CHANG, X., et al. “概率非负矩阵分解及其对主题建模的稳健扩展。” 在:AAAI,第 2308-2314 页,2017 年。
KUANG, D., CHOO, J., PARK, H. “交互式主题建模和文档聚类的非负矩阵分解”。在:分区聚类算法,Springer,第 215-243 页,2015 年。
http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.NMF.html
K-means 旨在处理欧几里德距离:如果您想在聚类中使用非欧几里德相似性,您应该使用不同的方法。使用任意相似性度量进行聚类的最原则性方法是谱聚类,并且 K-means 可以作为其变体推导出来,其中相似性是欧几里得距离。
正如 mitchus 所说,KL 散度不是衡量标准。您需要 Jenson Shannon 散度对称性。