5

Javaでk-meansアルゴリズムをプログラムしようとしています。いくつかの配列を計算しました。各配列にはいくつかの係数が含まれています。このすべてのデータをグループ化するには、k-meansアルゴリズムを使用する必要があります。このアルゴリズムの実装を知っていますか?

ありがとう

4

8 に答える 8

5

私は自分でコードを調べたことはありませんが、この JavaWorld の記事にあるマルチスレッドの K-means 実装があり、かなり参考になります。

于 2009-06-28T21:29:27.910 に答える
4

OpenCV は、私がこれまでに使用しなければならなかったライブラリの中で最も恐ろしく書かれたライブラリの 1 つです。一方、Matlab は非常にきれいに処理します。

自分でコーディングする必要がある場合、アルゴリズムは非常に単純であり、効率的です。

  1. クラスタ数 (k) を選択
  2. k点を作成します(それらは重心になります)
  3. これらすべての点の位置をランダム化します
  4. 各点からすべての重心までのユークリッド距離を計算します
  5. 各ポイントの「メンバーシップ」を最も近い重心に割り当てます
  6. 特定のクラスターに属するすべてのポイントの位置を平均して、新しい重心を確立します。
  7. Goto 4 収束が達成されるまで、または行われた変更が無関係になるまで。
于 2009-06-30T19:38:44.460 に答える
3

"Programming Collective Intelligence"に、K-means クラスタリングの非常に優れた Python 実装があります。強くお勧めします。

Java に変換する必要があることは承知していますが、それほど難しくはないようです。

于 2009-06-28T21:25:21.473 に答える
3

本当に、KMeans は本当に簡単なアルゴリズムです。自分でコーディングしない正当な理由はありますか? 私はQtでそれを行い、コードをプレーンな古いSTLに移植しましたが、それほど問題はありませんでした.

私は Joel のアイデアのファンになり始めました: 外部依存関係がないので、あなたが制御していない大きなソフトウェアの良いところを教えてください.ソフトウェア/

話は安っぽい、本物の男が自分たちのコードを世界に公開する: http://github.com/elcuco/data_mining_demo

より一般的になるようにコードを少しきれいにする必要があり、現在のバージョンは STL に移植されていませんが、それはスタートです!

于 2009-06-30T19:44:07.400 に答える
2

非常に古い質問ですが、 K-Meansの実装があり、その使用法に関するドキュメントが含まれているJava Machine Learning Libraryについて言及されていないことに気付きました。

プロジェクトはあまり活発ではありませんが、最後のバージョンは比較的最近 (2012 年 7 月) です。

于 2012-11-22T07:00:43.617 に答える
1

投稿したすべての人が、事実上の画像処理ライブラリである OpenCV http://sourceforge.net/projects/opencvlibrary/について言及するのを忘れていたようです。KMeans を機能させるには、C OpenCV コードの周りに JNI ラッパーを作成する必要がありますが、追加の利点は次のとおりです。

  1. KMeans アルゴリズムが大幅に最適化されていることがわかります。
  2. OpenCV は GPU を広範囲に使用するため、非常に高速に実行されます

主な欠点は、JNI ラッパーを作成する必要があることです。私は以前、テンプレート マッチング ルーチンが必要で、多くの代替案に直面していましたが、JNI ラッパーを作成することを余儀なくされたにもかかわらず、OpenCV が群を抜いて優れていることがわかりました。

于 2009-06-29T20:14:24.240 に答える