巨大なバイナリデータセットをいくつかのカテゴリにクラスター化するには、どのアルゴリズムを使用する必要がありますか?


11

バイナリデータの大規模な(650K行* 62列)行列(0-1エントリのみ)があります。マトリックスはほとんどスパースです。約8%が満たされます。

それを5つのグループにクラスター化したいと思います。たとえば、1から5までの名前が付けられています。階層的クラスター化を試みましたが、サイズを処理できませんでした。長さ62の650Kビットベクトルを考慮して、ハミング距離ベースのK平均クラスタリングアルゴリズムも使用しました。これらのいずれでも適切な結果が得られませんでした。

助けてください。


1人の担当者のb / cにはコメントできないので、これを回答として入力する必要がありました。Jaccard Similarityを調べてみてください。Python scipyにはそれが実装されていると思います。Jaccard ...
gobrewers14 2014年

データが少なくともある程度、当然5つのグループに分類されると想定する理由はありますか?行のクラスタリングに本当に興味がありますか、それともビットベクトルにエンコードされた62の特性間の関係にも興味がありますか?後者の場合、他の手法がより適しています。
micans 2014年

回答:


4

あなたは間違った質問をしています。

「アルゴリズム」と尋ねる代わりに、「アプリケーションで意味のあるカテゴリ/クラスターは何か」と尋ねるべきです。

上記のアルゴリズムが機能しなかったことに驚くことはありません。これらのアルゴリズムは非常に異なるユースケース向けに設計されています。k-meansは、他の任意の距離では機能しませ。ハミング距離では使用しないでください。これがk- 平均と呼ばれる理由はありますが、算術平均が意味のある場合にのみ使用するのが理にかなっています (バイナリデータには意味がありません)。

代わりにkモードを試すことをお勧めします。IIRCは、カテゴリデータで実際に使用されることを意図したバリアントであり、バイナリデータはややカテゴリです(ただし、スパース性により、まだ殺される可能性があります)。

しかし、最初に、データを簡略化するために重複を削除し、たとえば、一意/空の列を削除しましたか?

おそらく、APRIORIまたは同様のアプローチも、問題にとってより意味があります。

どちらの方法でも、まず必要なものを見つけ、次にどのアルゴリズムがこの課題を解決できるかを考えます。ランダムアルゴリズムを試すことではなく、データ駆動型で作業します


「ハミング距離では使用しない」理由を教えてください。結局それはMatlabで利用できるので、それは理にかなっているかもしれません。
ドロールAtariah

平均のため。算術平均は、ハミング距離またはバイナリデータでは意味がありません。代わりにモードまたはmedoidを使用してください
QUITあり-Anony-Mousse 2015年

ちょうど私がそれが正しいことを確認するために:matlabは、ハミングメトリックと一緒にk-meansを使用するときに、重心を更新するときに算術平均を使用します。そうですか?このメトリックをMATLABで使用する正しい方法は何ですか?
Dror Atariah 2015

k-meansは平均を使用するため、k-meansと呼ばれます。それ以外の場合、k-medoids、k-modesなどと呼ばれます。平均はL2に適しています-偏差の2乗の合計。
QUITあり-Anony-Mousse 2015年

したがって、MATLABはハミングメトリックと共にk- 平均を使用します。これはあまり意味がありません。
Dror Atariah

3

多分私は答えに少し遅れますが、おそらくそれは将来的にいくつかの体に役立つでしょう。

適応共振理論は、バイナリ分類問題に適したアルゴリズムです。ART 1について確認してください。詳細については、第19章の無料のニューラルネットワーク設計書を参照してください。

このネットワークは、優れた生物学的アイデアと優れた数学の実装を組み合わせています。また、このアルゴリズムは実装が簡単であり、この本では、この分類子を構築する方法について段階的に説明しています。


2

バイナリデータクラスタリングの古典的なアルゴリズムは、ベルヌーイ混合モデルです。モデルはベイジアン法を使用して適合させることができ、EM(期待値最大化)を使用して適合させることもできます。GitHub全体でサンプルのPythonコードを見つけることができますが、前者はより強力ですがより困難です。GitHubにモデルのC#実装があります(制限付きライセンスのあるInfer.NETを使用します!)。

モデルはかなりシンプルです。最初に、データポイントが属するクラスターをサンプリングします。次に、データセットのディメンションと同じ数のベルヌーリスから独立してサンプリングします。これは、クラスターが与えられたバイナリー値の条件付き独立を意味することに注意してください!

ベイジアン設定では、事前のクラスター割り当てはディリクレ分布です。一部のクラスターが他のクラスターよりも大きいと思われる場合は、これを優先して配置します。各クラスターについて、ベルヌーイ分布ごとに事前にベータ分布を指定する必要があります。通常、この事前確率はBeta(1,1)または均一です。最後に、データが与えられたときにクラスター割り当てをランダムに初期化することを忘れないでください。これにより対称性が失われ、サンプラーが動かなくなります。

ベイジアン設定のBMMモデルにはいくつかの優れた機能があります。

  1. オンラインクラスタリング(データはストリームとして到着できます)

  2. モデルを使用して、不足している寸法を推測できます

1つ目は、データセットが非常に大きく、マシンのRAMに収まらない場合に非常に便利です。2番目は、あらゆる種類の欠損データ補完タスクで使用できます。バイナリMNISTイメージの欠落した半分を補完します。

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