使用sklearn tf-idf查找矢量化文本文档中的簇数

时间:2018-03-16 12:43:09

标签: python optimization scikit-learn cluster-analysis tf-idf

我正在尝试使用sklearn tf-idfk-means群集对话框。我使用轮廓分数计算了最佳聚类数,但它几乎呈线性增长。那么,还有其他方法或者我做错了吗?

代码:

tfidfV = TfidfVectorizer(max_features = 40000, ngram_range = ( 1, 3 ), sublinear_tf = True)
...
X = tfidfV.fit_transform(docm2)
...
for numb in nn:
    km = KMeans(n_clusters=numb)
    clabels = km.fit_predict(X)
    silhouette_avg = silhouette_score(X, clabels)
    print("For n_clusters = ", numb, "The average silhouette_score is: ", silhouette_avg)

1 个答案:

答案 0 :(得分:0)

潜在的问题要严重得多,而且没有简单的解决方案:

K-means对异常值非常敏感。但在典型的文本数据中,有很多异常值。大多数文件都是不同寻常的。因此,"最佳"解决方案是将所有非重复点放在它们自己的簇中,即使用荒谬的大k。这不仅会大大增加运行时间,而且除非你处于像20newsgroups这样非常理想化的场景中,否则它也会使结果毫无用处。

因此,请使用在此方案中更好地工作的主题建模或类似算法。但我没有任何关于替代群集的建议。如果没有无限的参数选择,没有一个似乎能够很好地发挥作用。