ロゴ ロゴ

クラスタリング可視化アプリ作った

まえがき

お久しぶりです.前回の投稿から気づけば4か月,前期いっぱい授業で苦しんでいました.どうもウグイスです.修士は研究と授業を平行でやるので,5科目でも意外とつらかった…

今回はそんな授業の中でもクラスタリングについて取り扱っている授業の課題の一環としてブラウザ上で動作するインタラクティブな可視化ツールを作ったので,こちらで供養します.

クラスタリングとは

いわゆる教師無し機械学習に分類されるものです.基本的に正解ラベルがついていないデータの集合を,距離を基準にグルーピングするようなアルゴリズムを指します.

情報系の学生なら名前くらいは聞くことも多い,K-meansなどが有名です.

ちなみに,クラスタ中心と所属をいじってクラスタ中心までの距離の和を最小化しているにすぎないので,適用して意味がある結果が得られるかはデータ次第となります.これは基本的なK-meansだけではなく,拡張手法においてもほぼ同じことが言えます.

今回のツールは2次元ベクトルデータに対して,K-meansとFuzzy-C-meansという2手法を適用して結果を見ることができるツールとなってます.

Fuzzy-C-menasはK-meansの拡張手法です.具体的にはK-meansが1つのデータが一つのクラスタに所属するという手法であるのに対して,Fuzzy-C-meansは1つのデータが複数のクラスタに確率的に所属するようにする手法です.例えば,2つのクラスタに分けるときにクラスタ中心点から等距離にある点なら50%,50%で所属しているみたいな感じになります.

作製したツールについて

Github: https://github.com/uguisu64/HCMwebApp

GithubPages: https://uguisu64.github.io/HCMwebApp/

まずはリンクを張りました.上がリポジトリ,下は実際に遊べるようにSSGしてみたいな感じです.とりあえず触ってみたいだけなら下のリンクを踏んでください.

今回作ったのは,人工データ生成,クラスタリングアルゴリズムの実行,識別関数の描画機能です.全てを一つにページに突っ込んだものと,個別の機能ごとに分けているページがあります.

制作環境

今回はWindows11でNodejsを使って開発しました.WSLにしなかったのは外部ドライブと相性が悪いからです.

フレームワークはSveltekitを使いました.主に使った技術要素としては,Pyodide(ブラウザ上でのPython実行),Emscripten(C++コードをWASMコンパイルして,ブラウザ上で実行),Plotly(識別関数の描画用)って感じです.

実際の画面

細かく紹介するのも大変なので,メインの機能についてだけ説明します.

左側が人工データ生成,真ん中が結果の表示,右側がクラスタリング手法の選択と,実行結果のテキストがあります.

Plotlyなのでぐりぐり回して確認もできます.

あとがき

ブログ書いている途中でやる気がなくなったので短めのブログになってしまいました.

まあ,クラスタリングに関して多少理解が進むようなものになったと思うので,暇なら触ってみてください.

では今回はここまで,ご精読ありがとうございます.ウグイスでした.

コメント入力

関連サイト