0

次のような数千のデータ エントリがあります。

08 00 00 00 c3 85 20 65 6e 61 62 6c 65 64 2e 0d 0a 45 78 70
5c 72 88 74 80 83 82 79 68 8d 7b 73 90 7c 60 84 80 74 00 00
5d 77 84 76 7d 85 7f 7d 6c 94 7e 73 82 74 61 7f 7b 76 00 00
63 70 84 8c 95 87 80 72 65 73 70 67 85 8a 64 93 89 74 00 00
65 7c 73 6c 6c 9a a2 86 7e 4f 7e 71 7c 79 5c 7f 72 7b 00 00
...

各エントリには 20 個の数字があり、各数字は 0 から 255 までの任意の値 (16 進数で表示) にすることができます。クラスターを固定するために使用できるリファレンスがあります。参照には、データと同じテンプレートがあります。

マンハッタン距離方程式を使用して、参照配列に関する数値をそれぞれに与えることができることは既に決定しています。しかし、データをクラスター化する方法を探しています。私がデータについて知っていることに基づいて、約 50 ~ 60 のクラスターがあるはずです。一部のデータはしきい値を超えており、その結果、どのクラスターにも属していないことが予想されます。

データが設定されている方法で、データが入ってくるとすぐに処理できます (約 1 回 20 秒)。使用する便利なライブラリが見つからず、全体を Python で作成する必要があります (標準ライブラリのみを使用することが望ましい)。

自分でアルゴリズムを開発する必要がないことを望んでいました。私は MinHash が必要かもしれないと信じていますが、他の可能性も受け入れています。

4

2 に答える 2

1

したがって、それは実際にどのような種類のクラスタリングが必要かによって異なります。クラスタリングは、信じられないほど大規模で、一般的に非常に量的に費用のかかる操作であり、多数の異なるアプローチがあります。

scikit のクラスタリング モジュールを使用するよりも、問題に対するより良い解決策はないと言えます。ここに示されているさまざまなクラスタリングアルゴリズムの素晴らしい内訳があります: http://scikit-learn.org/dev/modules/clustering.html

個人的には、ほとんどのアプリケーションで DBSCAN を使用していますが、このデータをどのようにクラスタ化するかによっては、最適な選択ではない可能性があります。また、マンハッタン距離は通常、クラスタリング アルゴリズムには最適な選択肢ではなく、コサイン距離とユークリッド距離はどちらもよりパフォーマンスが高く、データをより正確に表現できることにも言及する価値があります。

于 2013-05-24T15:11:48.827 に答える
-1

Google で簡単に検索すると、 https://pypi.python.org/pypi/cluster/1.1.0b1にある python-cluster パッケージが見つかります。例の 1 つは、必要なデータ設定に多少似ていると思われるものを示しています。パッケージは、大規模なデータセットが別のスレッドでクラスタリングを実行するようにアドバイスしますが、特定の状況では必要ないと思います.

>>> from cluster import *
>>> data = [12,34,23,32,46,96,13]
>>> cl = HierarchicalClustering(data, lambda x,y: abs(x-y))
>>> cl.getlevel(10)     # get clusters of items closer than 10
[96, 46, [12, 13, 23, 34, 32]]
>>> cl.getlevel(5)      # get clusters of items closer than 5
[96, 46, [12, 13], 23, [34, 32]]

すべてのデータが 0 から 255 の間であることがわかっているため、getlevel(5)呼び出しによってデータが約 50 から 52 のクラスターに分割されます。また、データセットを整数のリストに変換する必要があります。

編集:結局のところ、それはあなたが望むことをしません。5 つごとに少なくとも 1 つの値を持つ十分なデータがあると仮定します。このクラスタリング アルゴリズムは、以下のように、すべてを大きなネストされたリストにグループ化します。

>>> data = [1,2,3,4,5,6,7,8,9]
>>> x = HierarchicalClustering(data, lambda x,y: abs(x-y))
>>> x.getlevel(1)
[[1, 2, 3, 4, 5, 6, 9, 7, 8]]
于 2013-05-24T15:03:28.733 に答える