NISHIO Hirokazu[日本語][English]

濃いクラスタ抽出

2024-11-30 image

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

背景

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

使い方と実装の解説

  • どのような結果が得られるものかのデモンストレーションのために対話的なJupyter形式(IPython Notebook, *.ipynb)になっているが、Pythonコード部分を切り出してPythonスクリプトとして使っても良い
  • Talk to the Cityが内部的に使っているHDBSCANを使う
  • In [4]の実行の後Num dense clusters 48と表示されているのが抽出された密度の高い塊の個数
    • 元データの個数や分布によって変わるのでパラメータの試行錯誤の余地はある
      • HDBSCAN — scikit-learn 1.5.2 documentation
      • 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点とする。の部分は今回の結果を見て、それほど有効ではなかったなと思っている
      • それよりも出力されたクラスタ一覧に対してあらためて他にない視点を導入しているクラスタとその独創的な点を列挙しなさいとプロンプトした方が面白くなりそうと感じている

表記揺れ


(C)NISHIO Hirokazu / Converted from Markdown (ja)
Source: [GitHub] / [Scrapbox]