私は現在、NTSB 航空事故データベースを使用していくつかの分析を行っています。このデータセットのほとんどの航空事故には、そのような出来事につながる要因を説明する原因記述があります。
ここでの私の目的の 1 つは、原因をグループ化することです。クラスタリングは、この種の問題を解決する実行可能な方法のようです。k-means クラスタリングを開始する前に、次のことを実行しました。
- ストップワードの削除、つまり、テキスト内のいくつかの一般的な機能的な単語を削除します
- テキスト ステミング。つまり、単語の接尾辞を削除し、必要に応じて用語を最も単純な形式に変換します。
- ドキュメントを TF-IDF ベクトルにベクトル化して、あまり一般的ではないがより有益な単語をスケールアップし、非常に一般的だがあまり有益でない単語を縮小しました
- ベクトルの次元を削減するために 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**
そして、次のようにデータのプロット グラフを生成しました。
結果は私には意味がないようです。すべてのクラスターに「パイロット」や「失敗」などの一般的な用語が含まれているのはなぜでしょうか。
私が考えることができる 1 つの可能性 (ただし、この場合に有効かどうかはわかりません) は、これらの一般的な用語を含むドキュメントが実際にはプロット グラフの中心に位置しているため、効率的にクラスター化することができないということです。右のクラスター。この問題は、クラスターの数を増やしても対処できないと思います。これを行ったばかりで、この問題が解決しないためです。
私が直面しているシナリオを引き起こす可能性のある他の要因があるかどうかを知りたいだけですか? より広い意味で、適切なクラスタリング アルゴリズムを使用しているか?
ありがとうございます。