【问题标题】:Clustering in Python with documents在 Python 中使用文档进行聚类
【发布时间】:2014-11-23 06:33:23
【问题描述】:

我是集群的新手,需要一些关于如何解决这个问题的建议......

假设我有数千个句子,但样本中的一些可能是:

  • 网络经验
  • 强大的销售经验
  • 网络技能强者优先
  • 需要销售专业知识
  • 巧克力苹果
  • 工作对于网络专业的学生来说至关重要

为了以最佳方式对这些进行聚类,我可以采取什么方法?

我已经通过词向量研究了k-means,但是当我有数千个可能都包含不同词的句子时,构建一个该大小的向量然后遍历每个句子是否有效?那些话?

还有哪些我没有找到的其他方法?

到目前为止我做了什么:

  • 将句子从 CSV 导入 DICT,ID 为:Sentence
  • 我正在从每个句子中删除停用词
  • 然后我对所有单词进行逐个计数以构建主向量并记录单词出现的次数。

【问题讨论】:

  • 您的总体目标是什么?也许集群不是实现这一目标的手段。你想对文档进行什么聚类?其他简单技巧:Slide 15.

标签: python machine-learning cluster-analysis k-means


【解决方案1】:

这里有两个相关(但在技术方面不同)的问题;第一个是与此数据的聚类技术的选择有关。

第二个谓词问题与数据模型有关——即,对于原始数据中的每个句子,如何将其转换为适合输入到聚类算法的数据向量。

聚类技术

k-means 可能是最流行的聚类技术,但还有很多更好的;考虑 k-kmeans 的工作原理:用户从数据中选择少量数据点(k-means 算法中初始迭代的聚类中心,又名 centroids)。接下来,确定每个数据点与该组质心之间的距离,并将每个数据点分配给它接近的质心;然后根据分配给同一簇的数据点的平均值确定新的质心。重复这两个步骤,直到达到某个收敛标准(例如,在两次连续迭代之间,质心组合移动低于某个阈值)。

更好的聚类技术不仅仅是移动聚类中心——例如,光谱聚类技术旋转和拉伸/压缩数据以找到单个然后,最大方差轴确定与原始轴正交且彼此正交的附加轴 - 即转换后的特征空间。 PCA(主成分分析)、LDA(线性判别分析)和kPCA都是这个类的成员,其定义特征是为原始数据或协方差矩阵中的每个特征计算特征值/特征向量对。 Scikit-learn 有一个PCA computation 的模块。

数据模型

正如您所观察到的,从非结构化文本数据构建数据模型的常见困境是为整个语料库中的每个单词(减去停用词)包含一个特征,这通常会导致数据集(即每个句子仅包含所有句子中总单词的一小部分,因此每个数据向量都是稀疏的;另一方面,如果对语料库进行修剪,例如仅将前 10% 的单词用作特征,那么 some/许多句子具有完全未填充的数据向量。

以下是帮助解决此问题的一种常见技术序列,考虑到您的数据,这可能特别有效:使用 的常见处理序列将相关术语组合成一个术语规范化词干化同义化

这是直观的:例如,

Normalize:将所有单词转换为小写(Python字符串有lower方法,所以

REquired.lower()

显然,这会阻止 RequiredREquiredrequired 在您的数据向量中包含三个独立的特征,而是将它们折叠成一个单项。

Stem:在词干提取之后,required、requirerequiring,被折叠成一个单一的标记,requir.

两个最常见的词干分析器是 Porter 和 Lancaster 词干分析器(下面讨论的 NLTK 两者都有)。

Synonymize:像 fluentcapableskilled 这样的术语,根据上下文,都可以是通过在一个常见的同义词列表中进行标识,折叠为一个术语。

优秀的 Python NLP 库,NLTK (至少)有几个优秀的同义词汇编,或数字词库(词库?)来帮助你完成所有三个这些,以编程方式。

例如,nltk.corpus.reader.lin 是一个(只有一个,NLTLK 中至少还有几个同义词查找器),并且使用简单——只需导入此模块并调用 同义词 ,传入一个术语。

NLTK 的stem package 中有多个词干分析器。

【讨论】:

    【解决方案2】:

    实际上,我最近刚刚整理了一份 Python 文档聚类指南。我建议使用 k 均值和潜在狄利克雷分配的组合。看看,如果我能进一步解释什么,请告诉我:http://brandonrose.org/clustering

    【讨论】:

    • 您好,我最近看到了您关于聚类的页面:为什么您在聚类后进行降维(MDS/PCA)?在许多其他示例/文章中,他们总是对维度减少的数据执行聚类,因为这应该突出显示文档之间任何可能的“绑定”。
    • @Vektor88 我对高维数据进行了聚类,然后使用 MDS 将数据缩减为二维,纯粹是为了可视化目的(制作散点图)。我本可以在集群之前运行 MDS,但我发现集群不太合理(尽管它们在视觉上会非常紧凑)。如果我有更多的数据,并且由于其高维度而运行聚类算法的成本过高,我肯定会首先使用 MDS。
    猜你喜欢
    • 2015-05-13
    • 2019-01-06
    • 2015-03-09
    • 2013-06-08
    • 2018-02-21
    • 2013-02-01
    • 2012-09-11
    • 1970-01-01
    • 2020-08-29
    相关资源
    最近更新 更多