バーチアルゴリズムが期待どおりにクラスター化しない


10

私は、scipy-learn PythonパッケージのBirchアルゴリズムを使用して、10のセットで1つの小さな都市のポイントのセットをクラスター化しています。

私は次のコードを使用します:

no = len(list_of_points)/10
brc = Birch(branching_factor=50, n_clusters=no, threshold=0.05,compute_labels=True)

私の考えでは、私は常に10ポイントのセットで終わります。今の場合、私はクラスターに650ポイントあり、n_clustersは65です。

しかし、私の問題は、しきい値が低すぎると、クラスターのアドレスが1つになり、非常に大きなしきい値(クラスターあたり40アドレス)になることです。

ここで何が悪いのですか?


多分それはCRSです。問題?度で試してみた場合(WGS 84など)、メトリックを試してください。座標にはかなり大きな違いがあり、両方に異なるしきい値が必要になる場合があります。また、別のpythonライブラリを試すこともできます。scikit-learnを使用することを強くお勧めします。
dmh126 2016

..erm、Google APIから受け取ったGPS座標に基づいてクラスタリングしています。それらは標準形式であると思います。番号?
kaboom

これらの座標をここに貼り付けてください。これを理解しようとします。
dmh126 2016

dmh126は、右することができます:Goolge APIはWGS84と協力して、これは(世界)測地系、メートル法ではありません
アンドレ・

回答:


10

私はいくつかの研究をしました。私は、2つの座標系の非メトリック(WGS84)とメトリック(ポーランド1992)でいくつかの点を取った。

私はこのコードを使用しました:

from scipy import loadtxt
from sklearn.cluster import Birch
import matplotlib.pyplot as plt

data84 = loadtxt("/home/damian/workspace/84.csv", delimiter=",")
data90 = loadtxt("/home/damian/workspace/90.csv", delimiter=",")

brc = Birch(threshold=0.5)

次に、モデルをメトリックデータに適合させます。

brc.fit(data90)

そして、結果をプロットします。ここで、十字は私の点であり、円は私のサブクラスターでした。

c = brc.subcluster_centers_
plt.plot(data90[:,0], data90[:,1], '+')
plt.plot(c[:,0], c[:,1], 'o')
plt.show()

これは私が得たものです: ここに画像の説明を入力してください

各ポイントでサブクラスターが見つかったため、しきい値が小さすぎることがわかります。

しきい値の定義:

新しいサンプルと最も近いサブクラスターをマージして得られたサブクラスターの半径は、しきい値より小さくなければなりません。それ以外の場合は、新しいサブクラスターが開始されます。

この場合、この値を増やす必要があります。

にとって:

brc = Birch(threshold=5000)

それははるかに優れていました:

ここに画像の説明を入力してください

そして、しきい値0.5のWGS84ポイント:

brc = Birch(threshold=0.5)
brc.fit(data84)

ここに画像の説明を入力してください

サブクラスターは1つだけです。ただし、この場合はしきい値を下げる必要があるため、0.05の場合:

brc = Birch(threshold=0.05)
brc.fit(data84)

ここに画像の説明を入力してください

良い結果が得られました。

結論:

CRSは重要です。適切なしきい値を見つける必要があります。これは、データ座標系とポイント間の距離によって異なります。非メトリックCRSがある場合、しきい値はメトリックシステムの場合よりも比較的小さくする必要があります。メートルと度の違いを知る必要があります。2点間の距離が10000mの場合、WGS84では1度未満になります。より正確な値については、Googleを確認してください。

また、n_clusters値よりも多くのポイントがあります。大丈夫です。クラスターの重心ではなく、サブクラスターがあります。何かを予測したり、ラベルを印刷したりすると、ポイントがn_clusters領域の1つに分類されます(または0、1、2、...、n_clustersラベルに分類されたポイントを印刷します)。

別のパラメータを試したくない場合は、いつでも別のアルゴリズムを使用できます。クラスタリングの非常にシンプルで一般的なアルゴリズムは、K平均アルゴリズムです。

http://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html

しきい値などを気にせずに、データのn個のクラスターを見つける必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.