我目前正在使用NTSB航空事故数据库进行一些分析。此数据集中的大多数航空事故都有原因声明,描述导致此类事件的因素。
我的目标之一是尝试对原因进行分组,而群集似乎是解决此类问题的可行方法。我在k-means聚类开始之前执行了以下操作:
在这些步骤之后,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**
我生成了如下数据的情节图:
结果对我来说似乎没有意义。我想知道为什么所有的集群都包含一些常见术语,如“飞行员”和“失败”。
我能想到的一种可能性(但我不确定它在这种情况下是否有效)是具有这些常用术语的文档实际上位于绘图图的中心,因此它们不能有效聚集成一个正确的集群。我相信这个问题不能通过增加集群的数量来解决,正如我刚刚完成的那样,这个问题仍然存在。
我只想知道是否还有其他因素可能导致我所面临的情况?或者更广泛地说,我使用正确的聚类算法吗?
非常感谢。
答案 0 :(得分:5)
我不想成为坏消息的载体,但是......
所以,回答你的最后问题
我只想知道是否还有其他因素可能导致我所面临的情况?
有成千上万的这样的因素。从人类的角度来看,实际的,合理的,数据集群是非常困难的。查找任何集群都非常简单 - 因为每种集群技术都会找到一些东西。但是为了找到重要的东西,我们必须在这里进行全面的数据探索。
或者更广泛地说,我使用正确的聚类算法吗?
可能不是,因为k-means只是一种最小化欧氏距离的内聚类总和的方法,因此它在大多数现实场景中都不起作用。
不幸的是 - 这不是一个问题,你可以问"使用哪种算法?"有人会为你提供准确的解决方案。
你必须挖掘你的数据,弄清楚: