HDBSCAN クラスタリング手法を使用して外れ値を予測したいと考えています。パラメータを最適化するためにモデルをトレーニングしましたが、新しいデータにapproximate_predictを適用すると、元のモデルとは異なるクラスターとラベルが得られます。ここでは処理の流れを説明します。
次のようなデータセットがあります。
このデータセットには、パラメーターを最適化する目的で、人為的に追加された外れ値があることに注意してください。次に、適用します。
clusterer = hdbscan.HDBSCAN(min_cluster_size=10, gen_min_span_tree=True,
cluster_selection_epsilon=0.1,min_samples=1,allow_single_cluster=True, prediction_data=True, leaf_size=30)
clusterer.fit(X_scaled)
3 つのクラスターを取得する (外れ値 -1 クラスターを含む):
ここでは、クラスタリングがどのように見えるかを確認できます。
この後、「new_observation」と呼ばれるデータフレームを作成します。これは、実際には元のデータセットから取得したランダムな観測であり、適用します。
test_labels, strengths = hdbscan.approximate_predict(clusterer, new_observation)
test_labels
ここで、私のテスト ラベルは次のようになります: array([ -1, 56, 150, -1])
つまり、これらの観測から、2 つの外れ値と、私が持っていないクラスターに割り当てられた 2 つの観測が検出されます。
さらに、次のようなプロットを見てみましょう。
from matplotlib import cm
cmap = cm.get_cmap('Set1')
plt.scatter(x='wind_speed',y='temperature',data=X_scaled, c=clusterer.labels_, cmap=cmap)
plt.scatter(x='wind_speed',y='temperature',data=new_observation, c=test_labels, cmap=cmap, s=120)
plt.show()
あるべきではないところに異常値があることがわかります。
approximate_predict がクラスタリングをどのように行っているのか本当にわかりませんが、機能していないようです。誰か助けてください???
ありがとうございました!!!!