使用 python scikit-learn 执行无监督文本分类(聚类)的最佳算法是啥?

Posted

技术标签:

【中文标题】使用 python scikit-learn 执行无监督文本分类(聚类)的最佳算法是啥?【英文标题】:What is the best algorithm to perform unsupervised text classification(clustering) using python scikit-learn?使用 python scikit-learn 执行无监督文本分类(聚类)的最佳算法是什么? 【发布时间】:2017-10-10 12:22:45 【问题描述】:

我试过 CountVectorizer + KMeans 但我不知道集群的数量。当我使用gap statistic 方法时,计算 KMeans 中的簇数花费了很多时间。 NMF 也需要事先确定组件的数量。

【问题讨论】:

【参考方案1】:

没有一种算法最适合无监督文本分类。这取决于您拥有的数据、您想要实现的目标等。

如果您想避免聚类数量问题,可以尝试DBSCAN,这是一种基于密度的聚类算法:

Wikipedia: 上的 DBSCAN 基于密度的聚类算法:给定某个空间中的一组点,它将紧密堆积在一起的点(具有许多附近邻居的点)组合在一起,将单独位于低密度区域中的点标记为异常值(其最近的邻居是太远了)。

DBSCAN 通过递归地将点连接到附近的密集点组(例如一个集群)来自动查找集群的数量。

要使用 DBSCAN,要调整的最重要参数是 epsilon(控制被视为邻居的最大距离)和 min_samples(被视为核心点的邻域中的样本数)。尝试从 sklearn 提供的默认参数开始,并调整它们以获得更好的特定任务结果。

【讨论】:

几乎所有样本都被标记为 -1 ,即嘈杂。我试过 epsilon = 0.7 但没有帮助。 尝试从非常小的 min_samples 值和非常大的 epsilon 开始,然后在评估聚类结果时朝着大的 min_samples 和小的 epsilon 努力。

以上是关于使用 python scikit-learn 执行无监督文本分类(聚类)的最佳算法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

执行 python scikit-learn 网格搜索方法时出现无效参数错误

如何使用 Python (scikit-learn) 计算 FactorAnalysis 分数?

Python Scikit-learn MultiOutput Regression - 在预测数值时强制执行下限

使用 scikit-learn python 的逻辑回归输出不匹配

scikit-learn 中的不平衡

具有混合数据类型(文本、数字、分类)的 Python scikit-learn 分类