NISHIO Hirokazu[Translate]
濃いクラスタ抽出
2024-11-30

データ全体をクラスタに分類するのではなく、密度の高い塊を見つけて解説するスクリプト

背景
Talk to the Cityは与えられたデータの「全体」を指定した個数のグループに「分割」する
どのようなデータがあるかをざっくりと捉える上では有用だが、しばしば「もっと掘り下げたい」というニーズがある
このスクリプトはそのニーズに応えるために、Talk to the Cityの抽出ステップと埋め込みステップの後の中間データを用いて「密度の高い意見の塊」を発見して列挙する

使い方と実装の解説
どのような結果が得られるものかのデモンストレーションのために対話的なJupyter形式(IPython Notebook, *.ipynb )になっているが、Pythonコード部分を切り出してPythonスクリプトとして使っても良い
Visual Studio Codeなら手軽に実行できるはず
Talk to the Cityが内部的に使っているHDBSCANを使う
In [4] の実行の後 Num dense clusters 48 と表示されているのが抽出された密度の高い塊の個数
元データの個数や分布によって変わるのでパラメータの試行錯誤の余地はある
hdb = HDBSCAN(min_cluster_size=5, max_cluster_size=30, min_samples=2)
min_samples=2 は大きくするほど密度の計算にスムージングの効果が起きるので「ざっくりといえば全部一つの塊」みたいな出力になりやすくなる
min_cluster_size=5 は「5件以上が密に集まっているところを抽出」の意味
max_cluster_size=30 は30件以上の大きなクラスタを分割して詳細に見る意図で付けたが、大きなクラスタが分割されて似た内容のクラスタがいくつもできるのでない方がいいかもしれない
ここでは指定していないが cluster_selection_method="leaf" を指定すると良い可能性もある
In [6] で結果を保存した後、 In [7] からAIによる解説を生成している
プロンプトは工夫の余地がある
またその表札の興味深さを100点満点で出力せよ。ありきたりなものを0点、新しい気づきのあったものを100点とする。 の部分は今回の結果を見て、それほど有効ではなかったなと思っている
それよりも出力されたクラスタ一覧に対してあらためて 他にない視点を導入しているクラスタとその独創的な点を列挙しなさい とプロンプトした方が面白くなりそうと感じている

表記揺れ

"Engineer's way of creating knowledge" the English version of my book is now available on [Engineer's way of creating knowledge]

(C)NISHIO Hirokazu / Converted from [Scrapbox] at [Edit]