0

オンラインの kmeans クラスタリングについて少し混乱しています。一度に 1 つのデータだけでクラスター化できることはわかっています。しかし、これはすべて1つのセッションに限定されていますか? この方法でクラスター化されたデータの束があり、クラスター化されたデータの結果が得られたとします。将来、クラスターにさらにデータを追加できますか?

私はこのコードの実装も探していましたが、役に立ちませんでした。誰でも知っていますか?

更新:より明確にするために。私のコードが今どのように機能するかは次のとおりです。

  1. 画像はライブ ビデオ フィードから取得され、十分な画像が保存されたら、sift 機能の kmeans を取得します。
  2. ステップ 1 を繰り返して、ライブ フィード画像の新しいバッチを作成し、kmeans を再度取得します。:[AB] のように、kmeans ベクトルを前の kmeans と結合します。

すぐにクラスターが多すぎて、クラスターの各バッチが確実に別のバッチとオーバーラップするため、これが悪いことがわかります。

私が欲しいもの:

  1. ライブ ビデオ フィードから取得した画像。写真を保存したら、kmeans を取得します。
  2. ステップ 1 を繰り返して、kmeans を再度取得します。これにより、新しいクラスターが更新され、前のクラスターに追加されます。

私がそれらを正しく理解していない限り、私が見たものはそれに対応できませんでした.

4

1 に答える 1

1

元の (!) 出版物を見ると、MacQueen によって提案された方法 (k-means という名前の由来) は、実際にはオンライン アルゴリズムでした。MacQueen が結果を改善するためにデータを複数回パスしたかどうかはわかりません。彼は単一のパスを使用したと思います。オブジェクトが別のクラスターに再割り当てされることはありませんでした。もしそうなら、それはすでにオンラインアルゴリズムでした!

平均は一般に として計算されsum / countます。これは、数値の観点からはあまり合理的ではありません。たとえば、古典的なクヌースの本では、手段を段階的に更新する方法を見つけることができます。ウィキペディアにもあります。

実際に以前のポイントを再割り当てしたい場合は、少し複雑になります。しかし、通常、ストリーミング コンテキストでは、前のポイントがわからないため、とにかくそれを行うことはできません。

于 2012-08-15T03:50:54.007 に答える