如何解释 k-means 聚类的结果?

How to explain the outcome of k-means clustering?

我目前正在使用 NTSB 航空事故数据库进行一些分析。此数据集中的大多数航空事故都有原因陈述,描述了导致此类事件的因素。

我的目标之一是尝试对原因进行分组,聚类似乎是解决此类问题的可行方法。在开始 k 均值聚类之前,我执行了以下操作:

  1. 去停用词,即去除文本中一些常用的功能词
  2. 文本词干提取,即删除单词的后缀,并在必要时将术语转换为最简单的形式
  3. 将文档向量化为 TF-IDF 向量,以放大不太常见但信息量较大的单词,并缩小高度常见但信息量较少的单词
  4. 应用 SVD 来降低向量的维度

在这些步骤之后,k 均值聚类应用于向量。通过使用从 1985 年 1 月到 1990 年 12 月发生的事件,我得到以下结果,其中簇数 k = 3:

(注意:我正在使用 Python 和 sklearn 进行我的分析)

... some output omitted ... 
Clustering sparse data with KMeans(copy_x=True, init='k-means++', max_iter=100, n_clusters=3, n_init=1,
    n_jobs=1, precompute_distances='auto', random_state=None, tol=0.0001,
    verbose=True)
Initialization complete
Iteration  0, inertia 8449.657
Iteration  1, inertia 4640.331
Iteration  2, inertia 4590.204
Iteration  3, inertia 4562.378
Iteration  4, inertia 4554.392
Iteration  5, inertia 4548.837
Iteration  6, inertia 4541.422
Iteration  7, inertia 4538.966
Iteration  8, inertia 4538.545
Iteration  9, inertia 4538.392
Iteration 10, inertia 4538.328
Iteration 11, inertia 4538.310
Iteration 12, inertia 4538.290
Iteration 13, inertia 4538.280
Iteration 14, inertia 4538.275
Iteration 15, inertia 4538.271
Converged at iteration 15

Silhouette Coefficient: 0.037
Top terms per cluster:
**Cluster 0: fuel engin power loss undetermin exhaust reason failur pilot land**
**Cluster 1: pilot failur factor land condit improp accid flight contribute inadequ**
**Cluster 2: control maintain pilot failur direct aircraft airspe stall land adequ**

我生成了数据图如下:

结果对我来说似乎没有意义。我想知道为什么所有的集群都包含一些常见的术语,如 "pilot" 和 "failure"。

我能想到的一种可能性(但我不确定在这种情况下是否有效)是具有这些常用术语的文档实际上位于绘图的正中心,因此它们不能有效地聚类成正确的聚类。我相信这个问题不能通过增加集群的数量来解决,因为我刚刚这样做了,这个问题仍然存在。

我只想知道是否有任何其他因素可能导致我面临的情况?或者更广泛地说,我是否使用了正确的聚类算法?

非常感谢。

我不想成为坏消息的传播者,但是...

  1. 聚类是一种非常糟糕的探索技术——主要是因为没有明确的、面向任务的目标,聚类技术实际上专注于优化一些数学标准,这与你想要实现的目标几乎没有任何关系。因此,k-means 特别会寻找从聚类中心到聚类内所有点的欧氏距离的最小化。这与您要完成的任务有任何关系吗?通常答案是 "no",或者最好的情况是 "I have no idea".
  2. 将文档表示为词袋会导致您的数据看起来非常笼统,因此这不是区分相似对象的好方法。这种方法可用于区分关于枪支的文本和关于曲棍球的文本,但不能区分来自同一领域的专业文本(这里似乎就是这种情况)
  3. 最后 - 你无法真正评估聚类,这是最大的问题。因此,没有完善的技术来拟合最佳聚类。

所以,回答你最后的问题

I just want to know if there is any other factors that could cause the scenario that I am facing?

这样的因素有成千上万。从人类的角度找到真实的、合理的数据集群是非常困难的。找到任何聚类都非常简单——因为每种聚类技术都会找到一些东西。但是为了在这里找到重要的东西,必须在这里进行整个数据探索。

Or more broadly, am I using the right clustering algorithm?

可能不会,因为 k-means 只是一种最小化欧几里德距离的内部簇和的方法,因此它在大多数现实世界场景中不起作用。

不幸的是 - 这不是那种你可以问 "which alogirhtm to use?" 并且有人会为你提供确切解决方案的问题。

你必须挖掘你的数据,找出:

  • 表示方式-tfidf真的好吗?你有预处理词汇表吗?删除无意义的词?也许考虑进行一些现代 word/document 表征学习是值得的?
  • 数据结构 - 为了找到最佳模型,您应该将数据可视化、调查、运行 统计分析,并尝试找出什么是基础指标。有没有什么合理的点数分配?这些是高斯吗?高斯混合?您的数据稀疏吗?
  • 你能提供一些专业知识吗?也许您可以自己划分部分数据集?半监督技术比任何无监督技术都有更好的定义,因此您可能很容易获得更好的结果。