高次元データのクラスタリング
TL; DR:ラベル付けされていないデータの大きな画像データセット(生のピクセルが約36 GiB)がある場合、K最初にクラスターの数を知らずに(ピクセル値に基づいて)画像をクラスター化するにはどうすればよいですか? 私は現在、画像をクラスター化するための教師なし学習プロジェクトに取り組んでいます。16x16x3のRGBピクセル値でMNISTをクラスタリングすると考えてください。クラスタリングする必要があるのは約4800万の例だけです。それらのアイデンティティを知らなくても、一部の画像は同じソースからのものであるため、確実に関連していることはわかりますが、たとえばK、セットでK平均法を「ただ」実行するための適切な方法もまだわかりません。 t-SNEを使用して手動の2D埋め込みを実行し、埋め込みスペースで手動でクラスター化することを考えていました(16x16x3-d で手動で実行するよりも簡単なタスク)。ただし、すべてのt-SNE実装で、データをメモリにロードする必要がありました。最初にt-SNEを実行し、次にt-SNE埋め込みデータでK-meansを実行することも考えましたが、MNISTからのt-SNEの結果を見ると、これらのクラスターが歪んでいる可能性があり、歪んでいる可能性があることは明らかです非線形の方法で。したがって、私がを知っていたKとしても、クラスターはおそらく分割されます。K平均にマハラノビス距離を使用することは興味深いかもしれませんが、そもそも共分散がわからないので、これも行き止まりのようです。 現在、サンプルでPCA圧縮を実行して、少なくともt-SNEのメモリをいくらか取り戻すことができるかどうかを試していますが、それが機能する場合と機能しない場合があります。 誰かが私にこれを行うための正しい方向へのポインタを与えることができますか(理想的には、Python、TensorFlow、またはApache Beam / Dataflowコンテキストでは必ずしも必要ではありません)?私は少し前にストリーミング/ボールK-meansの移植に取り組んでいましたが、「オンデマンド」で新しいクラスターを作成するという優れた特性がありますが、それをPython / TensorFlow / Dataflowに再び実装する前に、誰かができることを望んでいましたどこから始めるべきか、何を避けるべきか、いくつかのアイデアを教えてください。