VAddyの脆弱性検査エンジンでは、ベイジアンネットワークなどのデータサイエンス分野の技術も積極的に採用しています。実装として、Java+データサイエンスという組み合わせではよく知られている、WEKAを使っています。
WEKAにはK-Meansクラスタリングを行うためのSimpleKMeansという実装が存在しますが、これはシングルスレッドでの処理しか行わないため、パフォーマンスがそれほど良くありません。
K-Meansクラスタリングでは対象のすべてのデータそれぞれに対して、単純な距離の計算が繰り返し発生します。各ステップにおいて、それぞれの計算は独立して行うことができるため、この計算をそれぞれ別のスレッドにおいて行うようにすることで、全体としての処理スピードを上げることができます。
今回、研究の一環でこのクラスをマルチスレッド対応させたものを書いたので、Githubに置きました。
https://github.com/Kanatoko/weka_multithread_kmeans/blob/master/SimpleKMeans.java
WEKAでのK-Meansクラスタリングの処理速度が遅く悩んでいる人がいらっしゃいましたら、お気軽にご利用ください。