【问题标题】:Document Clustering in python using SciKit使用 SciKit 在 python 中进行文档聚类
【发布时间】:2015-05-13 17:29:39
【问题描述】:
我最近开始在 python 中使用 SciKit 模块进行文档聚类。但是,我很难理解文档聚类的基础知识。
我知道什么?
- 文档聚类通常使用 TF/IDF 完成。本质上
将文档中的单词转换为向量空间模型,即
然后输入到算法中。
- 有许多算法,如 k-means、神经网络、分层
集群来实现这一点。
我的数据:
- 我正在尝试使用linkedin 数据,每个文档都是
linkedin 简介,我想看看有没有类似的工作
文档聚集在一起。
当前的挑战:
- 我的数据有大量的摘要描述,最终变成了 10000 个
我应用 TF/IDF 时的单词。有什么合适的方法来处理这个
高维数据。
- K - 均值和其他算法需要我指定编号。集群
(质心),就我而言,我不知道集群的数量
前期。我相信这是一种完全无监督的学习。是
有可以确定编号的算法。集群本身?
- 如果您知道的话,我以前从未使用过文档集群
解决这个问题的教程、教科书或文章,请
欢迎提出建议。
我浏览了 SciKit 网页上的代码,里面的技术词汇太多了,我看不懂,如果你们有任何解释清楚的代码或 cmets,请分享。提前致谢。
【问题讨论】:
标签:
python
machine-learning
scikit-learn
cluster-analysis
unsupervised-learning
【解决方案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 值。我不是无监督聚类算法方面的专家,但我敢打赌,使用这样的算法和不同的参数,你最终可能会得到不同数量的聚类。