使用 sklearn tf-idf 查找矢量化文本文档中的簇数
Posted
技术标签:
【中文标题】使用 sklearn tf-idf 查找矢量化文本文档中的簇数【英文标题】:finding the number of clusters in a vectorized text document with sklearn tf-idf 【发布时间】:2018-08-25 12:58:51 【问题描述】:我正在尝试使用 sklearn tf-idf
和 k-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】:潜在的问题要严重得多,而且没有简单的解决方案:
K-means 对异常值非常敏感。但在典型的文本数据中,存在大量异常值。大多数文件在某种程度上是不寻常的。正因为如此,“最好的”解决方案是将所有不重复的点放在它们自己的集群中,即使用一个大得离谱的 k。这不仅大大增加了运行时间,而且还使结果几乎毫无用处,除非您处于像 20newsgroups 这样非常理想化的场景中。
因此,请使用在这种情况下效果更好的主题建模或类似算法。但我对替代集群没有任何建议。如果没有无休止的参数选择,似乎没有一个能很好地发挥一般用途。
【讨论】:
以上是关于使用 sklearn tf-idf 查找矢量化文本文档中的簇数的主要内容,如果未能解决你的问题,请参考以下文章
使用gensim和sklearn搭建一个文本分类器:文档向量化