1. ホーム
  2. arrays

[解決済み] 1次元数配列のクラスタリング

2023-01-09 08:29:30

質問

このような配列があるとします。

[1,1,2,3,10,11,13,67,71]

このような配列に分割する便利な方法はありますか?

[[1,1,2,3],[10,11,13],[67,71]]

私は同じような質問を見ましたが、ほとんどの人がk-meansを使ってポイントをクラスタリングすることを提案していました。 scipy のような、私のような初心者が使うにはかなり分かりにくいものです。また、k-meansは2次元以上のクラスタリングに適していると思うのですが?N個の数値からなる配列を、数値に応じた数のパーティション/クラスタリングに分割する方法はあるのでしょうか?

厳密な範囲分割を提案する人もいますが、必ずしも期待通りの結果が得られるとは限りません。 期待される

どのように解決するのですか?

1次元の問題に多次元のクラスタリングアルゴリズムを使わない。1次元は 多く であるため、素朴に考えているよりも特別です。 ソート というのは、実際にができるので、物事がずっと簡単になるからです。

実際には、クラスタリングとは呼ばず、セグメンテーションやナチュラルブレーク最適化などと呼ばれることが多いようです。

あなたは ジェンクス ナチュラルブレイクの最適化 といった統計的手法があります。 カーネル密度推定 は、強力な統計的背景を持つ、見るのに良い方法です。密度のローカルミニマムは、データをクラスタに分割するのに適した場所であり、そうするための統計的理由があります。KDEは1次元のデータをクラスタリングするための最も健全な方法かもしれません。

KDEを使うと、1次元のデータがよりよく振舞うことが再び明らかになります。1次元では、ローカル ミニマムがありますが、2次元では、鞍点やそのような分割点があるかもしれません。これを見てください。 Wikipediaの鞍点の図解 このような点がクラスターを分割するのに適切であるかどうかは、こちらのを参照してください。

参照 この回答 を参照してください(緑のマーカーはクラスタモード、赤のマーカーはデータが切断された点、Y軸は密度の対数尤度です)。