最近はクラスタリングの実験をしている.様々なクラスタリングアルゴリズムをJavaで実装しながら精度を観察している.
クラスタリング結果として,各クラスタの中心ベクトルと何番目の訓練データ点がどのクラスタに入ったかをテキストログとして眺めていた.しかしこれだと,上手くいったり失敗したりしたときに原因を探しにくい.そこで,「Cluster Visualizer」というものを即席で作って可視化に挑戦した.
Cluster Visualizerは,あくまで補助的なツールなので,既に作ってあるJavaプログラムを大きく変更するようなことはしない.毎回のクラスタリング試行ごとに,以下のような一行ログを追加出力するだけで良い.
[Cluster Visualizer] {"0": [1, 3, 5, 7], "1": [0, 2, 4, 6]}
これは「0番目のクラスタに1, 3, 5, 7番目の訓練データ点が,1番目のクラスタに0, 2, 4, 6番目の訓練データ点が属している」ことを表している.
このような結果ログと,N次元の訓練データセットを3次元に次元削減したものをテキストファイルで用意する.次元削減は「TensorFlowで画像分類した定食たちの銀河をつくった - ShikousakuGo」と同様に行った.クラスタを描画するのはThree.jsで頑張った.
こんな感じで,画面下部のスライダー操作ボタンでクラスタリングの様子をアニメーションできる.
様子が目で見えると安心感がある.
自分でデータセットを作るときにも重宝した.どうもクラスタリングの挙動がよろしくなかったので,訓練データセットを教師ラベル別に色分けしたものを表示してみると,うまく2クラス分類できそうな形をしていなかった.
ほぼ一日でここまで作れたのは良かったと思う.もう少し作り込んだら実験ツールとして公開したい.