18


4

2Dポイントクラスタリング

指定: 2D平面内のN点のセット(xおよびy座標)と、各点に対応するN半径のセットを指定します。 ポイントのディスクとは、半径のあるポイントを中心とするディスクのことです。

*問題:*ポイントをクラスター化します。 ポイントのクラスターは、各ポイントがクラスター内の少なくとも1つの他のポイントのディスク内にあるか、クラスター内の少なくとも1つの他のポイントがそのディスク内にあるようなものです。 単一ポイントのクラスターは、クラスターとしてカウントされません。

これを効率的に計算するためのアルゴリズムが必要です(kdツリーのような複雑な空間ハッシュ手法に頼らないことが望ましい)。 O(N ^ 2)の実行時間で解決できますが、間違いなくO(N ^ 3)を超えることはありません。 これは単純なもののように感じますが、クラスタリング条件の非相反性に追いついています。

本質的には、C関数のプロトタイプを埋めたいと思っています。

int cluster_points(
    size_t n,
    point_t *pt, // length n list of points
    double *radius, // length n list of radii for each point
    int *cluster, // length n list of cluster indexes; -1 if not clustered
    size_t *ncluster // number of clusters (number of distinct non -1 entries in cluster)
);

これは宿題ではありません。 これは、複素数をクラスタリングするためのマトリックスアルゴリズムの一部として必要です。

5 Answer


10


ブルートフォースソリューションはO(N ^ 2 ^)のみであるため、動作するはずです。

  • 1)*未割り当てグループのすべてのポイントから開始します。

  • 2)* 1つの点を選択し、割り当てられていないグループ内の他のすべての点を見て、記述した半径基準を満たしているかどうかを確認します。

  • * 2a)*はいの場合、グループを開始し、他のすべてのポイントに進みます (現在のポイントに基づいて)このグループに収まるかどうかを確認し、収まる場合は、未割り当てグループからこの新しいグループに移動します。

  • * 2ab)*現在のポイントで完了したら、に追加された各ポイントに移動します グループ化して、未割り当てグループ内のすべてのポイントをチェックします。

  • * 2b)*ただし、現在の半径基準に一致するポイントがない場合 ポイント、それを破棄します。

  • 3)*最後に、あなたはあなたの基準によってポイントをグループ化し、N *(N / 2)回以上の検査をしなかったでしょう。

ところで、あなたが説明するのは、通常「クラスタリング」が意味するものではないので、私はそれが人々をここに追い出していると思います。 クラスタリングを困難な問題にしているのは、2つの隣接ポイントを同じクラスターに割り当てるかどうかの問題が、データセット内の他のすべてのポイントによって決定されることです。 あなたの場合、それは(基本的に)2つのポイントのプロパティによってのみ決定されるので、あなたのケースでは、それらすべてをチェックすることができます。


3


ローカル検索とロイドのアルゴリズムの組み合わせに基づくk-meansクラスタリング

http://www.cs.umd.edu/~mount/Projects/KMeans/ +(プログラムはGNU General Public Licenseの条件下で配布されます。)

k-means、k-medians、k-medoids、treecluster、自己組織化マップ、clustercentroids、clusterdistance http://bonsai.hgc.jp/~mdehoon/software/cluster/cluster.pdf


2


クラスターは、クラスターの数が事前に与えられている場合でもNPハード問題であるため、多項式の実行時間の取得をあきらめる可能性があります。 これを行うための多くの手法があり、文献は主に機械学習コミュニティで見られます。k-meansは、おそらく理解して実装するのに最も簡単なアルゴリズムです。


2


明らかなO(n ^ 2)アルゴリズムは、頂点を頂点としてグラフを作成し、指定した条件が満たされた場合に2つの点を接続するように聞こえます。 そして、グラフの接続されたコンポーネントを読み取り、シングルトンを破棄します。 また、クラスター化のために指定した条件は、私にとって対称的です。 私は何かが足りないのですか?


2


ペア(p、R)のコレクションUがあり、pはポイントで、Rはその半径です。

Uの関係〜:(p、R)〜(q、S)<⇒ pはqのディスクにあるか、qはpのディスクにある<⇒ | p-q | ⇐ max(R、S)

は明らかに再帰的かつ対称的であるため、推移的閉包(〜、たとえば)は等価関係です。 〜の下の等価クラスは(シングルトンまたは)クラスターになります。

〜のような関係の推移閉包の等価クラスを計算する標準的なアルゴリズムがあると信じています。 たとえば、これはソートに関する章の「数値レシピ」で説明されており、彼らのルーチンはKnuthに基づいていると述べています。

(リンクを提供しないで申し訳ありませんが、簡単な検索では正確なものは見つかりませんでした)。