使用 SciKit 在 python 中进行文档聚类
Posted
技术标签:
【中文标题】使用 SciKit 在 python 中进行文档聚类【英文标题】:Document Clustering in python using SciKit 【发布时间】:2015-05-13 17:29:39 【问题描述】:我最近开始在 python 中使用 SciKit 模块进行文档聚类。但是,我很难理解文档聚类的基础知识。
我知道什么?
文档聚类通常使用 TF/IDF 完成。本质上 将文档中的单词转换为向量空间模型,即 然后输入到算法中。 有许多算法,如 k-means、神经网络、分层 集群来实现这一点。我的数据:
我正在尝试使用linkedin 数据,每个文档都是 linkedin 简介,我想看看有没有类似的工作 文档聚集在一起。当前的挑战:
我的数据有大量的摘要描述,最终变成了 10000 个 我应用 TF/IDF 时的单词。有什么合适的方法来处理这个 高维数据。 K - 均值和其他算法需要我指定编号。集群 (质心),就我而言,我不知道集群的数量 前期。我相信这是一种完全无监督的学习。是 有可以确定编号的算法。集群本身? 如果您知道的话,我以前从未使用过文档集群 解决这个问题的教程、教科书或文章,请 欢迎提出建议。我浏览了 SciKit 网页上的代码,里面的技术词汇太多了,我看不懂,如果你们有任何解释清楚的代码或 cmets,请分享。提前致谢。
【问题讨论】:
【参考方案1】:我的数据有大量的摘要描述,当我应用 TF/IDF 时,这些描述最终变成了 10000 字。有没有合适的方法来处理这些高维数据。
我的第一个建议是,除非由于内存或执行时间问题,绝对必须这样做,否则不要这样做。
如果你必须处理它,你应该使用降维(例如PCA)或feature selection(在你的情况下可能更好,例如参见chi2)
K - 意味着和其他算法需要我指定编号。集群(质心),在我的情况下,我不知道预先的集群数量。我相信这是一种完全无监督的学习。是否有可以确定否的算法。集群本身?
如果您查看the clustering algorithms available in scikit-learn,您会发现并非所有这些都需要您指定集群的数量。
另一个没有层次聚类,implemented in scipy。另见this answer。
我还建议您使用 KMeans 并尝试手动调整集群的数量,直到您对结果感到满意为止。
我以前从未使用过文档聚类,如果您知道解决此问题的教程、教科书或文章,请随时提出建议。
Scikit 有很多处理文本数据的教程,只需使用他们网站上的“文本数据”搜索查询即可。一个用于 KMeans,其他用于监督学习,但我建议您也查看这些以更熟悉该库。在我看来,从编码、风格和语法 POV 来看,无监督学习和有监督学习在 scikit-learn 中非常相似。
文档聚类通常使用 TF/IDF 完成。这实质上是将文档中的单词转换为向量空间模型,然后输入到算法中。
这里的小修正:TF-IDF 与聚类无关。它只是一种将文本数据转换为数值数据的方法。它不关心你之后如何处理这些数据(聚类、分类、回归、搜索引擎等)。
我理解您试图传达的信息,但说“集群是使用 TF-IDF 完成的”是不正确的。使用聚类算法完成,TF-IDF在文档聚类中只起预处理作用。
【讨论】:
【参考方案2】:-
对于 TF/IDF 变换后的大矩阵,考虑使用稀疏矩阵。
您可以尝试不同的 k 值。我不是无监督聚类算法方面的专家,但我敢打赌,使用这样的算法和不同的参数,你最终可能会得到不同数量的聚类。
【讨论】:
【参考方案3】:此链接可能有用。它为k-means clustering
提供了大量的解释,并带有视觉输出http://brandonrose.org/clustering
【讨论】:
以上是关于使用 SciKit 在 python 中进行文档聚类的主要内容,如果未能解决你的问题,请参考以下文章