バイナリデータの大規模な(650K行* 62列)行列(0-1エントリのみ)があります。マトリックスはほとんどスパースです。約8%が満たされます。
それを5つのグループにクラスター化したいと思います。たとえば、1から5までの名前が付けられています。階層的クラスター化を試みましたが、サイズを処理できませんでした。長さ62の650Kビットベクトルを考慮して、ハミング距離ベースのK平均クラスタリングアルゴリズムも使用しました。これらのいずれでも適切な結果が得られませんでした。
助けてください。
バイナリデータの大規模な(650K行* 62列)行列(0-1エントリのみ)があります。マトリックスはほとんどスパースです。約8%が満たされます。
それを5つのグループにクラスター化したいと思います。たとえば、1から5までの名前が付けられています。階層的クラスター化を試みましたが、サイズを処理できませんでした。長さ62の650Kビットベクトルを考慮して、ハミング距離ベースのK平均クラスタリングアルゴリズムも使用しました。これらのいずれでも適切な結果が得られませんでした。
助けてください。
回答:
あなたは間違った質問をしています。
「アルゴリズム」と尋ねる代わりに、「アプリケーションで意味のあるカテゴリ/クラスターは何か」と尋ねるべきです。
上記のアルゴリズムが機能しなかったことに驚くことはありません。これらのアルゴリズムは非常に異なるユースケース向けに設計されています。k-meansは、他の任意の距離では機能しません。ハミング距離では使用しないでください。これがk- 平均と呼ばれる理由はありますが、算術平均が意味のある場合にのみ使用するのが理にかなっています (バイナリデータには意味がありません)。
代わりにkモードを試すことをお勧めします。IIRCは、カテゴリデータで実際に使用されることを意図したバリアントであり、バイナリデータはややカテゴリです(ただし、スパース性により、まだ殺される可能性があります)。
しかし、最初に、データを簡略化するために重複を削除し、たとえば、一意/空の列を削除しましたか?
おそらく、APRIORIまたは同様のアプローチも、問題にとってより意味があります。
どちらの方法でも、まず必要なものを見つけ、次にどのアルゴリズムがこの課題を解決できるかを考えます。ランダムアルゴリズムを試すことではなく、データ駆動型で作業します。
多分私は答えに少し遅れますが、おそらくそれは将来的にいくつかの体に役立つでしょう。
適応共振理論は、バイナリ分類問題に適したアルゴリズムです。ART 1について確認してください。詳細については、第19章の無料のニューラルネットワーク設計書を参照してください。
このネットワークは、優れた生物学的アイデアと優れた数学の実装を組み合わせています。また、このアルゴリズムは実装が簡単であり、この本では、この分類子を構築する方法について段階的に説明しています。
バイナリデータクラスタリングの古典的なアルゴリズムは、ベルヌーイ混合モデルです。モデルはベイジアン法を使用して適合させることができ、EM(期待値最大化)を使用して適合させることもできます。GitHub全体でサンプルのPythonコードを見つけることができますが、前者はより強力ですがより困難です。GitHubにモデルのC#実装があります(制限付きライセンスのあるInfer.NETを使用します!)。
モデルはかなりシンプルです。最初に、データポイントが属するクラスターをサンプリングします。次に、データセットのディメンションと同じ数のベルヌーリスから独立してサンプリングします。これは、クラスターが与えられたバイナリー値の条件付き独立を意味することに注意してください!
ベイジアン設定では、事前のクラスター割り当てはディリクレ分布です。一部のクラスターが他のクラスターよりも大きいと思われる場合は、これを優先して配置します。各クラスターについて、ベルヌーイ分布ごとに事前にベータ分布を指定する必要があります。通常、この事前確率はBeta(1,1)または均一です。最後に、データが与えられたときにクラスター割り当てをランダムに初期化することを忘れないでください。これにより対称性が失われ、サンプラーが動かなくなります。
ベイジアン設定のBMMモデルにはいくつかの優れた機能があります。
オンラインクラスタリング(データはストリームとして到着できます)
モデルを使用して、不足している寸法を推測できます
1つ目は、データセットが非常に大きく、マシンのRAMに収まらない場合に非常に便利です。2番目は、あらゆる種類の欠損データ補完タスクで使用できます。バイナリMNISTイメージの欠落した半分を補完します。