我正在尝试使用MiniBatchKMeans流式传输NLP数据并对其进行群集,但无法确定我需要多少群集。我想做的是定期拍摄轮廓得分,如果它低于某个阈值,则增加质心数。但据我所知,初始化聚类器时会设置n_clusters
,如果不重新启动就无法更改。library(data.table)
ID = c("c067","c155","l413","l413","k456","z025","z026","z025","z026")
value = c(47, 47, 57, 58, "vwd", 85, 85, "ca", "ca")
x.raw = data.table(ID, value)
。我错了吗?有没有其他方法可以解决这个问题,避免这个问题?
答案 0 :(得分:2)
在优化过程中执行此操作并不是一个好主意,因为它会大大改变优化过程。它将基本上重置整个优化。有一些策略,例如将k-means二等分试图在聚类过程中学习k的值,但是它们比将k增加一点更棘手 - 它们决定要分割一个特定的簇,并尝试选择好的初始质心这个集群让事情保持稳定。
此外,增加k不一定会改善Silhouette。它将简单地改进SSQ,因此你不能使用SSQ作为选择k的启发式方法。
最后但并非最不重要的是,计算Silhouette是O(n ^ 2)。经常运行太昂贵了。如果你有足够大的数据来要求MiniBatchKMeans(真的仅用于大量数据),那么你根本无法负担计算Silhouette的费用。