使用SciKit在python中记录文档聚类

时间:2015-03-11 18:44:32

标签: python machine-learning scikit-learn cluster-analysis unsupervised-learning

我最近开始使用python中的SciKit模块进行文档聚类。但是,我很难理解文档聚类的基础知识。

我知道什么?

  • 文档群集通常使用TF / IDF完成。基本上 将文档中的单词转换为向量空间模型 然后输入算法。
  • 有许多算法,如k-means,神经网络,分层 聚集来实现这一目标。

我的数据:

  • 我正在尝试使用linkedin数据,每个文档都是 linkedin个人资料摘要,我想看看是否有类似的工作 文档聚集在一起。

目前的挑战:

  • 我的数据有大量的摘要描述,最终变成了10000 我申请TF / IDF的话。有没有适当的方法来处理这个问题 高维数据。
  • K - 手段和其他算法要求我指定no。集群 (质心),在我的情况下,我不知道簇的数量 前期。我相信这是一个完全无监督的学习。是 有算法可以确定否。集群本身?
  • 如果你知道的话,我以前从未使用过文档聚类 请提供解决此问题的教程,教科书或文章 随时建议。

我浏览了SciKit网页上的代码,它包含了太多我不理解的技术词汇,如果你们有任何代码都有很好的解释或评论请分享。提前致谢。

3 个答案:

答案 0 :(得分:7)

  

我的数据有大量的摘要描述,当我应用TF / IDF时,最终会变成10000字。有没有适当的方法来处理这种高维数据。

我的第一个建议是,除非您因内存或执行时间问题而绝对必须这样做。

如果你必须处理它,你应该使用维数减少(例如PCA)或feature selection(在你的情况下可能更好,例如见chi2

  

K - 手段和其他算法要求我指定no。群集(质心),在我的情况下,我不知道前期群集的数量。我相信这是一个完全无监督的学习。是否有算法可以确定否。集群本身?

如果查看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仅在文档聚类中起预处理作用。

答案 1 :(得分:0)

  1. 对于TF / IDF变换后的大矩阵,请考虑使用稀疏矩阵。
  2. 您可以尝试不同的k值。我不是无监督聚类算法的专家,但我敢打赌这种算法和不同的参数,你也可能最终得到不同数量的聚类。

答案 2 :(得分:0)

此链接可能有用。它为k-means clustering提供了具有视觉输出http://brandonrose.org/clustering

的大量解释