我目前正在使用NTSB航空事故数据库进行一些分析。在这个数据集中,大多数航空事件都有原因说明,描述了导致此类事件的因素。
我在此的一个目标是尝试对这些原因进行分组,聚类似乎是解决这种问题的可行方法。在开始k-means聚类之前,我执行了以下操作:
(注:我使用Python和sklearn进行分析)
我在此的一个目标是尝试对这些原因进行分组,聚类似乎是解决这种问题的可行方法。在开始k-means聚类之前,我执行了以下操作:
- 停词移除,即删除文本中一些常见的功能性单词
- 文本还原,即删除单词的后缀,并在必要时将术语转换为其最简单的形式
- 将文档向量化为TF-IDF向量,以放大不常见但更具信息价值的单词并缩小常见但信息价值较低的单词
- 应用SVD来降低向量的维度
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”。
我能想到的一个可能性(但我不确定在这种情况下是否有效)是具有这些共同术语的文档实际上位于绘图的正中心,因此它们不能被有效地聚类到正确的簇中。我认为增加簇的数量无法解决这个问题,因为我刚刚尝试了这样做,问题仍然存在。
我只想知道还有哪些因素可能导致我面临的情况?更广泛地说,我是否正在使用正确的聚类算法?
谢谢!