当前位置: 首页 > 面试题库 >

在Python中使用scikit-learn kmeans对文本文档进行聚类

越俊驰
2023-03-14
问题内容

我需要实现scikit-learn的kMeans来对文本文档进行聚类。该示例代码可以正常运行,但需要约20个新闻组数据作为输入。我想使用相同的代码对文档列表进行聚类,如下所示:

documents = ["Human machine interface for lab abc computer applications",
             "A survey of user opinion of computer system response time",
             "The EPS user interface management system",
             "System and human system engineering testing of EPS",
             "Relation of user perceived response time to error measurement",
             "The generation of random binary unordered trees",
             "The intersection graph of paths in trees",
             "Graph minors IV Widths of trees and well quasi ordering",
             "Graph minors A survey"]

要使用此列表作为输入,我需要在kMeans示例代码中进行哪些更改?(仅获取“数据集=文档”无效)


问题答案:

这是一个简单的示例:

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.cluster import KMeans
from sklearn.metrics import adjusted_rand_score

documents = ["Human machine interface for lab abc computer applications",
             "A survey of user opinion of computer system response time",
             "The EPS user interface management system",
             "System and human system engineering testing of EPS",
             "Relation of user perceived response time to error measurement",
             "The generation of random binary unordered trees",
             "The intersection graph of paths in trees",
             "Graph minors IV Widths of trees and well quasi ordering",
             "Graph minors A survey"]

向量化文本,即将字符串转换为数字特征

vectorizer = TfidfVectorizer(stop_words='english')
X = vectorizer.fit_transform(documents)

集群文件

true_k = 2
model = KMeans(n_clusters=true_k, init='k-means++', max_iter=100, n_init=1)
model.fit(X)

打印每个群集的主要术语

print("Top terms per cluster:")
order_centroids = model.cluster_centers_.argsort()[:, ::-1]
terms = vectorizer.get_feature_names()
for i in range(true_k):
    print "Cluster %d:" % i,
    for ind in order_centroids[i, :10]:
        print ' %s' % terms[ind],
    print


 类似资料:
  • 我有如下elasticsearch文档,其中我需要根据creationtime currentdate更正年龄值 年龄=创建时间-当前日期 : 我想根据每个文档ID进行批量更新,但问题是我需要更正6个月的数据 有没有一种方法可以做到这一点,而不是循环遍历,我遇到的所有使用Pandas数据帧进行更新的示例都是基于已知值的。但是在这里_id我将在代码运行时得到。 我写的逻辑是获取所有文档 谁能给我一些

  • scikit-learn 是基于 Python 语言的机器学习工具。 简单高效的数据挖掘和数据分析工具 可供大家在各种环境中重复使用 建立在 NumPy ,SciPy 和 matplotlib 上 开源,可商业使用 - BSD许可证

  • 我目前有一个定期修订的文档,我想通过保存文档的每个旧版本来跟踪文档。因此,如果文档A有一个摘要和更新日期,我想在每次更新后,保留以前的版本及其更新数据。 问题是,我不确定该如何有效地做到这一点: 问题是,如果我将键作为值,那么自动生成的模式将把所有日期作为可能的键。这不是你想要的。 所以我的问题是在ElasticSearch中按日期跟踪所有修订的最有效方法是什么?

  • 问题内容: 我有一个带有单词列表的文本文件,我需要使用Java按字母顺序对其进行排序。单词位于单独的行上。 我将如何处理,将它们读入数组列表,然后进行排序? 问题答案: 这是一个简单的四步过程,其中Stackoverflow问题解决了四个步骤中的三个: 阅读每一行并将其转换为Java String 将每个Java字符串存储在一个数组中(不要认为您需要引用它。) 排序数组 写出数组中的每个Java字

  • 问题内容: 是否有Elasticsearch插件可以让我对输入索引的文档进行分类? 对我而言,最好的解决方案是对所有最经常出现的术语(/概念)进行分类,以一种用户可以浏览的标签云显示。 有没有办法做到这一点?有什么建议? 谢谢 问题答案: 基本思想是使用聚合,每项将产生一个存储桶。 您将获得的响应将通过减少术语出现次数来排序: 如果您正在使用Kibana,则可以基于这些术语直接创建标签云可视化。

  • 问题内容: 我在基于所选嵌套文档中的值对文档进行排序时遇到问题。我正在使用这样的设置: 我要检索的是具有所选子代ID的文档,这些文档将按所选子代的大小进行排序。因此查询看起来像: 在此查询中,无论我输入“ order”字段(asc还是desc),返回的文档都是相同的顺序。可能是什么问题? 问题答案: 看起来您构建嵌套过滤器的方式不正确。您在这里列出的内容也不适合我。 但是当我替换这个: 有了这个: