102

したがって、次のような配列があるとしましょう。

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

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

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

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

厳格な範囲分割を提案する人もいますが、常に結果が期待どおりにレンダリングされるとは限りません

4

5 に答える 5

138

1 次元の問題に多次元クラスタリング アルゴリズムを使用しないでください。単一のディメンションは、単純に考えるよりもはるかに特別です。実際に並べ替えることができるため、作業がずっと簡単になります。

実際、通常はクラスタリングとも呼ばれませんが、セグメンテーションや自然分割の最適化などです。

Jenks Natural Breaks Optimizationおよび同様の統計手法を確認することをお勧めします。カーネル密度推定も、強力な統計的背景を使用して検討するのに適した方法です。密度の極小値は、データをクラスターに分割するのに適した場所であり、そうする統計的な理由があります。KDE は、おそらく 1 次元データをクラスタリングするための最も適切な方法です。

KDE を使用すると、1 次元データがより適切に動作することが再び明らかになります。1D では極小値があります。しかし、2D では、鞍点やそのような「おそらく」分割点がある場合があります。このウィキペディアのサドル ポイントの図を参照してください。このようなポイントがクラスターの分割に適している場合とそうでない場合があります。

Python でこれを行う方法の例については、この回答を参照してください(緑のマーカーはクラスター モード、赤のマーカーはデータがカットされるポイント、y 軸は密度の対数尤度です)。

KDE と Python

于 2012-07-17T05:38:50.717 に答える