使用 SKlearn 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)

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

K 均值对异常值非常敏感。但在典型的文本数据中,有很多异常值。大多数文件都以一种或另一种方式不寻常。正因为如此,"最佳"解决方案是将所有非重复点放在它们自己的集群中,即使用一个大得离谱的 k。这不仅大大增加了运行时间,而且还使结果几乎无用,除非您处于像 20newsgroups 这样非常理想化的场景中。

因此,请使用在这种情况下效果更好的主题建模或类似算法。但我对替代集群没有任何建议。没有一个似乎工作得足够好,在没有无休止的参数选择的情况下具有普遍的用处。

最新更新