我一直在尝试群集一组文本文档。我有一个稀疏的TFIDF矩阵,有大约10k个文档(大数据集的子集),我尝试运行scikit-learn k-means算法,使用不同大小的簇(10,50,100)。休息所有参数都是默认值。
我得到一个非常奇怪的行为,无论我指定了多少个簇,或者即使我改变了迭代次数,批次中也会有1个集群,其中包含大部分文档,并且会有很多集群其中只有1个文件。这是非常不均匀的行为
有谁知道我遇到了什么样的问题?
答案 0 :(得分:1)
以下是可能出现“错误”的可能事情:
您的k-means群集初始化点在每次运行中被选为相同的点集。我建议使用'random'作为k-means http://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html的init参数。如果这不起作用,则提供给k-意味着您自己的一组随机初始聚类中心。请记住使用seed()方法初始化随机生成器作为当前日期和时间。 https://docs.python.org/2/library/random.html使用当前日期时间作为默认值。
您的距离函数,即欧几里德距离可能是罪魁祸首。这种可能性较小,但使用余弦相似性运行k-means总是好的,特别是当您将其用于文档相似性时。 scikits目前没有此功能,但你应该看一下:Is it possible to specify your own distance function using scikit-learn K-Means Clustering?
这两个组合应该会给你很好的集群。