Python

【Python】階層的クラスタリングの種類!樹形図はscipy♪

  • このエントリーをはてなブックマークに追加
  • LINEで送る

Pythonの階層的クラスタリングが今イチわからないアナタへ…

『階層的クラスタリングって何?』

『どんな種類があるの?』

『樹形図は出力できるの?』

こんな疑問に答えます。

SE歴25年のオッサンが解説するぞい!
SEおっさん
SEおっさん

 

と勢い良く書いた記事ですが…

途中でわからなくなり解決できてません。ごめんなさい!!
『こんな奴もいるんだな』とか思ってもらえたり、
万が一、何かの役に立つかもしれないので残してます。

【Python】階層的クラスタリングって何?どんな種類があるの?

Pythonのクラスタリングで階層的クラスタリングがあります。

階層的クラスタリングってわかりずらい名前。

まず、
クラスターは集まるっていう意味です。

階層っていうのはWindowsのエクスプローラみたいな感じで芋を掘っていくようなイメージ。
集めながら、芋を掘る。
うーんわかるようなわからんような。

階層的っていうからには階層化されているんだなってことはわかるけど…

階層的クラスタリングは凝集型と分散型にわけれれます。

また、難しい言葉でてきたな。くそー。

凝集は、めっちゃ集まるってことか。
分散は、バラバラになるってことか。

Pythonエンジニア認定試験のデータ分析試験では、凝集型を扱ってます。
とりあえず、凝集型で。

階層的クラスタリング:凝集型

凝集型の階層的クラスタリングの手順

  1. 似ているデータをまとめて、小さなクラスタを作る(芋を掘る)
  2. 作った小さなクラスタと似ているデータをさらにまとめる(掘った芋をまとめる)
  3. 最終的に1つのクラスタにまとめるまで、上記を繰り返す(掘った穴は1つにする)

芋を掘るを用いると余計に分かり辛いか…

くそー。ごめん。

凝集型の階層的クラスタリングの実行できるScikit-learnのクラス

凝集型の階層的クラスタリングは

Scikit-learnのclusterモジュール内のAgglomerativeClausteringクラスでの実行できます。

なにわ友あれ、赤井英和! まちがえた。
なにはともあれ、データセットが必要です。
まずはデータセットから、おなじみのアヤメ(Iris)データセットを読み込みましょう。

Irisデータセットはアヤメの額の長さや花びらの長さと種類を持つデータです。

つまり、額の長さや花びらの長さが~なら、この種類のアヤメだよね~

ってことがわかるはずだ。という推測にもとづいて処理をしていくことになります。

from sklearn.datasets import load_iris
# Irisデータセットを読み込む
iris = load_iris()
data = iris.data
# 1, 3列目を抽出
X = data[:100, [0, 2]]
X
from sklearn.cluster import AgglomerativeClustering
# 擬集型の階層クラスタリングのインスタンスを作成
ac = AgglomerativeClustering(n_clusters=3, affinity='euclidean', linkage='complete')
# クラスタリングを実行し、各クラスのクラスタ番号を取得
labels = ac.fit_predict(X)
labels
array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 2, 2, 2, 0, 2, 0, 2, 0, 2, 0, 0, 0, 0, 2, 0, 2,
       0, 0, 2, 0, 2, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 2, 0, 2, 2, 2,
       0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0], dtype=int64)

 

うーん。わからんな。
イメージは下から似てるデータをちょっとずつまとめていって、最後には1つにする。
と言った感じかなー

いやー、中途半端でごめんなさい!
とりあえず、勉強してるヤツがここにおる
ということで、終わりにさせてください。

ごめんよぉぉ。

SEおっさん
SEおっさん
ここまで読んでくれてありがとう!

「記事を読んでもわからないトコがある」「内容が変だよ」
という時は、お気軽にコメントください♪

「もっとSEおっさんに詳しく聞きたい。何かお願いしたい!」
という時は、ココナラまで。メッセージもお気軽に♪

LINEでのお問合わせも受付中!
LINE公式アカウント

メッセージをお待ちしています!

取得資格
  • 応用情報技術者
  • Oracle Master Gold
  • Java Silver SE
  • Java EE Webコンポーネントディベロッパ
  • Python エンジニア認定データ分析
  • 簿記2級


スポンサーリンク
  • このエントリーをはてなブックマークに追加
  • LINEで送る

コメントを残す

*