首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >K折交叉验证用于确定k均值中的k?

K折交叉验证用于确定k均值中的k?
EN

Stack Overflow用户
提问于 2011-07-09 03:00:11
回答 2查看 14.6K关注 0票数 5

在文档聚类过程中,作为数据预处理步骤,我首先应用奇异向量分解来获得USVt,然后通过选择适当数量的特征值来截断Vt,这现在可以从我读取的here中获得良好的文档-文档相关性。现在,我在矩阵均值的列上执行聚类,以便将相似的文档聚类在一起,为此,我选择了k- Vt,初始结果对我来说是可以接受的(k= 10个聚类),但我想深入挖掘一下选择k值本身。为了确定k-means中的聚类数量,我被suggested来查看交叉验证。

在实现它之前,我想弄清楚是否有使用numpy或scipy实现它的内置方法。目前,我执行kmeans的方法是简单地使用scipy中的函数。

代码语言:javascript
复制
import numpy, scipy

# Preprocess the data and compute svd
U, S, Vt = svd(A) # A is the TFIDF representation of the original term-document matrix

# Obtain the document-document correlations from Vt
# This 50 is the threshold obtained after examining a scree plot of S
docvectors = numpy.transpose(self.Vt[0:50, 0:]) 

# Prepare the data to run k-means
whitened = whiten(docvectors)
res, idx = kmeans2(whitened, 10, iter=20)

假设我的方法到目前为止是正确的(如果我错过了某个步骤,请纠正我),在这个阶段,使用输出执行交叉验证的标准方法是什么?任何关于如何将其应用于k-means的参考/实现/建议都将非常感谢。

EN

回答 2

Stack Overflow用户

发布于 2011-09-06 23:30:06

实际上,要使用F1-score或V-Measure作为评分函数进行传统的交叉验证,您需要一些标记数据作为基本事实。但在这种情况下,您可以只计算基本事实数据集中的类数,并将其用作K的最佳值,因此不需要交叉验证。

或者,您可以使用集群稳定性度量作为无监督的性能评估,并为此执行某种交叉验证过程。然而,这还没有在scikit-learn中实现,尽管它仍然在我的个人待办事项列表中。

您可以在以下answer on metaoptimize.com/qa中找到有关此方法的其他信息。特别是,您应该阅读Clustering Stability: An Overview by Ulrike von Luxburg

票数 1
EN

Stack Overflow用户

发布于 2020-10-12 11:00:43

在这里,他们使用find来找到最优的集群数量。“kmeans”是返回的kmeans对象的一个属性。这可以用来找出最小的“误差”

https://www.statmethods.net/advstats/cluster.html

代码语言:javascript
复制
wss <- (nrow(mydata)-1)*sum(apply(mydata,2,var))
for (i in 2:15) wss[i] <- sum(kmeans(mydata, 
   centers=i)$withinss)
plot(1:15, wss, type="b", xlab="Number of Clusters",
  ylab="Within groups sum of squares")

这个公式并不完全正确。但我自己也在做一个。模型仍然每次都会改变,但它至少是一堆迭代中最好的模型。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6629165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档