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

时间:2016-04-07 08:36:13

标签: machine-learning scikit-learn cluster-analysis k-means data-science

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

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

  1. 删除停用词,即删除文本中的一些常用功能词
  2. 文字词干,即删除单词的后缀,如有必要,将术语转换为最简单的形式
  3. 将文档矢量化为TF-IDF向量,以扩大不太常见但信息量更大的单词,并缩小高度常见但信息量较少的单词
  4. 应用SVD来降低向量的维数
  5. 在这些步骤之后,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**
    

    我生成了如下数据的情节图:

    Plot result of the k-means clustering

    结果对我来说似乎没有意义。我想知道为什么所有的集群都包含一些常见术语,如“飞行员”和“失败”。

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

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

    非常感谢。

1 个答案:

答案 0 :(得分:5)

我不想成为坏消息的载体,但是......

  1. 聚类是一种非常糟糕的探索技术 - 主要是因为没有明确的,以任务为导向的目标,聚类技术实际上专注于某些数学标准的优化,这些标准很少与您想要实现的目标有任何关系。因此,特别是k-means将寻找从聚类中心到聚类内所有点的欧几里德距离的最小化。这无论如何与您想要实现的任务相关吗?通常答案是" no",或者在最好的情况下"我不知道"。
  2. 将文档表示为单词包可以非常一般地查看您的数据,因此它不是区分类似对象的好方法。这种方法可以用来区分关于枪支的文本和关于曲棍球的文本,但不是来自同一领域的特殊文本(这似乎就是这种情况)
  3. 最后 - 您无法真正评估群集,这是最大的问题。因此,没有完善的技术来拟合最佳聚类。
  4. 所以,回答你的最后问题

      

    我只想知道是否还有其他因素可能导致我所面临的情况?

    有成千上万的这样的因素。从人类的角度来看,实际的,合理的,数据集群是非常困难的。查找任何集群都非常简单 - 因为每种集群技术都会找到一些东西。但是为了找到重要的东西,我们必须在这里进行全面的数据探索。

      

    或者更广泛地说,我使用正确的聚类算法吗?

    可能不是,因为k-means只是一种最小化欧氏距离的内聚类总和的方法,因此它在大多数现实场景中都不起作用。

    不幸的是 - 这不是一个问题,你可以问"使用哪种算法?"有人会为你提供准确的解决方案。

    你必须挖掘你的数据,弄清楚:

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