Menu
CoddyTech

凝集型モデル

CoddyのMachine Learningジャーニー「教師なし学習」セクションの一部。レッスン 17/51。

2つの駐車場に車が停まり、その間の道路沿いにも車が並んでいます。2つのクラスタに分ける方法は2つあります。

同じ102台の車を示す2つのグラフ。左、linkage ward:北側の駐車場と南側の駐車場がそれぞれ53台と49台の2つのクラスタで、道路上の車は両者に分かれている。右、linkage single:101台の車のクラスタが1つと、単独の車が1台

結合はscikit-learnが行います。n_clustersで停止する位置を指定します。

from sklearn.cluster import AgglomerativeClustering
model = AgglomerativeClustering(n_clusters=2, linkage="ward")
labels = model.fit_predict(X)

linkageは、2つのグループ間の距離をどのように測るかを決めます。

  • "ward"(デフォルト):グループがまとまるようにする
  • "complete":最も離れたペア
  • "average":すべてのペアの平均
  • "single":最も近いペア

単連結法は連鎖をたどります。ここでは道路が両方の駐車場を飲み込みます。Ward法は丸く均等なグループを作ります。

challenge icon

チャレンジ

中級

野生のイチゴは3か所に群生し、道沿いにも少し生えています。どの連結方法なら群生地を見つけられるでしょうか? plants にはその位置が格納されています。

  1. linkages の各連結方法について、イチゴを3つのグループにクラスタリングします。
  2. グループのサイズを、大きい順にリストとして出力します。
  3. 最大のグループがイチゴの半数を超える場合は、chained を付け加えます。

別の草原の場合:

ward: [40, 38, 31]
complete: [41, 37, 31]
average: [41, 37, 31]
single: [86, 22, 1] chained

自分で試してみよう

import numpy as np
import pandas as pd
from sklearn.cluster import AgglomerativeClustering

# 草原に生える野生のイチゴ109株の位置(メートル単位):3つの群生地と1本の小道
rng = np.random.default_rng(4)
plants = np.round(np.concatenate([
    rng.normal([2, 3], 0.8, size=(40, 2)),
    rng.normal([9, 4], 1.0, size=(35, 2)),
    rng.normal([6, 10], 0.9, size=(25, 2)),
    np.column_stack([np.linspace(3, 8, 9), np.linspace(3.2, 4, 9)]) + rng.normal(0, 0.15, size=(9, 2)),
]), 2)
linkages = ["ward", "complete", "average", "single"]

# 以下にコードを書いてください
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

教師なし学習のすべてのレッスン

自分で練習してみよう: Pythonオンラインコンパイラ