#daiizメモ

Scrapboxに夢中

クラスタリングの様子を眺めた

最近はクラスタリングの実験をしている.様々なクラスタリングアルゴリズムを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で頑張った.

こんな感じで,画面下部のスライダー操作ボタンでクラスタリングの様子をアニメーションできる.

https://i.gyazo.com/a31c9c1d04e7d28fe68e2894c7c6c7e6.gif

様子が目で見えると安心感がある.

自分でデータセットを作るときにも重宝した.どうもクラスタリングの挙動がよろしくなかったので,訓練データセットを教師ラベル別に色分けしたものを表示してみると,うまく2クラス分類できそうな形をしていなかった.

https://i.gyazo.com/d0468709e8ee291ef1febb4651a48304.gif

ほぼ一日でここまで作れたのは良かったと思う.もう少し作り込んだら実験ツールとして公開したい.