使用杰卡德距离矩阵进行 Kmeans 聚类

2024-04-13

我正在尝试创建 Jaccard 距离矩阵并对其执行 K 均值以给出簇 id 和簇中元素的 id。它的输入是 Twitter 推文。以下是代码,我无法理解如何使用 kmeans 文件中的初始种子。

install.packages("rjson" ,dependencies=TRUE)
library("rjson")
install.packages("jsonlite" ,dependencies=TRUE)
library("jsonlite")

install.packages("stringdist" ,dependencies=TRUE)
library("stringdist")
data <- fromJSON(sprintf("[%s]", paste(readLines(file("C:\\Users\\Yuzuru Onathoshi\\Desktop\\Assignment5_pxv142730_sxl162530\\Part2\\Input\\Tweets.json")),collapse=",")))

t.feature <- data
t.feature$geo<-NULL


Jmatrix<-stringdistmatrix(t.feature$text,t.feature$text,method = "jaccard")
colnames(Jmatrix) <- t.feature$from_user_id
rownames(Jmatrix) <- t.feature$from_user_id

fit <- kmeans(Jmatrix, 10)

k 均值确实不使用距离矩阵.

这很容易看出:它不适用于成对距离,但它只需要一个点与一个点的偏差center(这通常不是您的数据集的一个点)。

它需要连续的数值输入数据进行聚类,并且确实not支持任意距离函数。

k-means的核心思想是最小化方差(这与最小化欧几里得距离平方相同)。与一些教程甚至教科书相反,k-means 事实上not最小化距离(它最小化squared距离,如果你的距离是欧几里得距离;但这可能是与最小距离最小值不同的最小值)。如果您希望 k 均值最小化另一个距离,则必须找到适当的“均值”,即估计最小距离中心点的函数。已经提出了一些通用替代品,例如帕姆。

如果您将 Jaccard 距离矩阵放入 k 均值中,它通常会产生一些有用的结果,但这不是您所期望的。不是用杰卡德来比较积分,而是你通过距离向量的欧几里得平方对它们进行聚类。很容易看出,如果点与所有其他点(包括它们自己)具有相同的 Jaccard 距离,则该值恰好为 0,因此特别是它们的 Jaccard 距离必须为 0。但是如果您的数据集不平衡(有一些集群有很多物体),那么它们在这个对偶空间中也会有太大的重量。

如果您需要其他距离(并且能够计算距离矩阵),请使用层次聚类 (HAC) 而不是 k 均值!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用杰卡德距离矩阵进行 Kmeans 聚类 的相关文章

随机推荐