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

7
我目前正在使用NTSB航空事故数据库进行一些分析。在这个数据集中,大多数航空事件都有原因说明,描述了导致此类事件的因素。
我在此的一个目标是尝试对这些原因进行分组,聚类似乎是解决这种问题的可行方法。在开始k-means聚类之前,我执行了以下操作:
  1. 停词移除,即删除文本中一些常见的功能性单词
  2. 文本还原,即删除单词的后缀,并在必要时将术语转换为其最简单的形式
  3. 将文档向量化为TF-IDF向量,以放大不常见但更具信息价值的单词并缩小常见但信息价值较低的单词
  4. 应用SVD来降低向量的维度
在这些步骤之后,将k-means聚类应用于向量。通过使用从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**

我生成了以下数据的绘图结果:

k-means聚类的绘图结果

这个结果对我来说似乎没有意义。我想知道为什么所有的簇都包含一些共同的术语,比如“pilot”和“failure”。

我能想到的一个可能性(但我不确定在这种情况下是否有效)是具有这些共同术语的文档实际上位于绘图的正中心,因此它们不能被有效地聚类到正确的簇中。我认为增加簇的数量无法解决这个问题,因为我刚刚尝试了这样做,问题仍然存在。

我只想知道还有哪些因素可能导致我面临的情况?更广泛地说,我是否正在使用正确的聚类算法?

谢谢!


1
更广泛地说,我是否使用了正确的聚类算法?反问:如果有人让你写下k-means聚类对数据所做的假设,你知道该如何回答吗? - cel
请不要重复发布问题:http://datascience.stackexchange.com/q/11076/924 - Has QUIT--Anony-Mousse
1个回答

6
我不想成为坏消息的传递者,但是...
1. 聚类是一种非常糟糕的探索技术 - 主要是因为如果没有明确的任务目标,聚类技术实际上是专注于某些数学标准的优化,这些标准很少与您想要实现的目标有任何关系。因此,特别是k-means将寻找最小化群集中心到群集内所有点的欧几里得距离。这与您想要实现的任务有任何关系吗?通常答案是“否”,或者在最好的情况下是“我不知道”。
2. 将文档表示为单词袋会导致对数据的非常普遍的看法,因此它不是区分相似对象的好方法。这种方法可以用于区分有关枪支的文本和有关曲棍球的文本,但不能用于非常相同领域的专业文本(这似乎是这里的情况)。
3. 最后 - 您无法真正评估聚类,这是最大的问题。因此,没有确定的最佳聚类拟合技术。
所以,回答您最后的问题:
“我只想知道是否还有其他因素会导致我面临的情况?”
有成千上万这样的因素。在数据中找到实际的、合理的人类角度的群集非常困难。找到任何群集都非常简单 - 因为每种聚类技术都会找到某些东西。但是,要找到在这里很重要的内容,您必须进行整个数据探索。
“更广泛地说,我是否使用了正确的聚类算法?”
可能没有,因为k-means只是一种最小化欧几里得距离内部群集总和的方法,因此它在大多数现实世界的情况下都不起作用。
不幸的是 - 这不是您可以只问“使用哪种算法?”并且有人会为您提供确切解决方案的那种问题。
您必须深入挖掘数据,弄清楚:
- 表示方式 - tfidf真的好吗?您是否预处理了词汇表?删除了无意义的单词?也许考虑采用一些现代单词/文档表示学习?
- 数据结构 - 为了找到最佳模型,您应该可视化数据,调查,运行统计分析,尝试弄清楚底层指标。是否存在任何合理的点分布?这些高斯分布吗?高斯混合物?您的数据是稀疏的吗?
- 您能提供一些专业知识吗?也许您可以自己划分数据集的一部分?半监督技术比任何无监督技术都更好定义,因此您可能很容易获得更好的结果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接