测试无监督 KMeans
Posted
技术标签:
【中文标题】测试无监督 KMeans【英文标题】:Testing unsupervised KMeans 【发布时间】:2016-09-20 16:08:36 【问题描述】:我在文本聚类中使用sklearn tutorials 来查找有关啤酒评论的任何有趣分组。到目前为止,它对我来说效果很好,但是当涉及到测试或找到正确的参数时,我尝试循环遍历不同的簇号:
for clusters in range(3, 10):
km = KMeans(n_clusters = clusters, init="k-means++", max_iter=100, n_init=1)
km.fit(vectorizer_fit)
order_centroids = km.cluster_centers_.argsort()[:, ::-1]
for i in range(clusters):
print("Cluster %d:" %i, end="")
for ind in order_centroids[i, :10]:
print(" %s"%terms[ind],end=",")
print()
它有助于清除一些明显的选择(6+ 类)开始变得奇怪,或者包含啤酒的名称:
Cluster 1: julius, th, treehouse, ego, alter, papaya, dipa, melon, canned, dankness
Cluster 7: citra, farmstead, dipa, hf, apa, passion, abner, nelson, mosaic, papaya
然后尝试使用不同的 max/min_df:
for x in range(40):
tfidf_vector = TfidfVectorizer(max_df = (.8-(x * .01)), min_df = .2, \
stop_words = "english", use_idf = True)
tfidf_matrix = tfidf_vector.fit_transform(documents)
km = KMeans(5)
km.fit(tfidf_matrix)
order_centroids = km.cluster_centers_.argsort()[:, ::-1]
print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
print("With max_df @ %d% " % ()(.80 - (x*.01))*100))
for i in range(5):
print("cluster %d words: " % i, end = "")
for ind in order_centroids[i, :10]: #top N number of words
print("%s "% vocab.ix[ind].values, end = ",") #lookup centroid number as vocab index
print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
这有助于找到消除大部分停用词的优点:
With max_df @ 80%: ['the'] ,['here'] ,['a'] ,['true'] ,['roasted'] ,['imparted'] ,['some'] ,['through'] ,['beer'] ,['such']
With max_df @ 60%: ['do'] ,['coffee'] ,['is'] ,['alcohol'] ,['retention'] ,['dry'] ['with'] ,['regular'] ,['little'] ,['speedway']
假设我可以尝试同时循环遍历两者,但在某些时候阅读并做出最佳的人工判断似乎不是......计算机科学家的方式。是否有任何方法可以评估无监督方法,而无需考虑确切的业务问题?
【问题讨论】:
问题在于,在我看来,k-means 在文本上根本不能很好地工作。它对异常值不鲁棒,文本数据充满异常值。单词列表对人类来说总是很好,因为我们很擅长尝试从胡言乱语中“理解”......另见:“阅读茶叶:人类如何解释主题模型” 我刚刚有空闲时间阅读了那篇论文,现在我更好地理解了定性挖掘任务缺乏定量指标。然而这篇文章只是让我觉得 LDA 是万恶之源,而不是提出解决方案。我没有带走其他东西吗? 另一个要点可能是这很难,并且可能根本不起作用(但在查看最热门的单词时显示为“好的”) 感谢您的建议,我正在努力寻找一些有趣的项目来构建简历,因此我一定会将这些要点纳入我的结论文件中。去学习 LDA! 【参考方案1】:我没有代码,但您可以查看此存档文件:https://arxiv.org/abs/1905.05667 及其参考文献
以及 sklearn https://scikit-learn.org/stable/auto_examples/cluster/plot_dbscan.html上的 dbscan 算法的演示代码
我在寻找无监督聚类评估指标时遇到了这些
编辑:这篇文章也很有用 - https://stats.stackexchange.com/questions/79028/performance-metrics-to-evaluate-unsupervised-learning
【讨论】:
以上是关于测试无监督 KMeans的主要内容,如果未能解决你的问题,请参考以下文章