Menu
CoddyTech

クラスタと既知のラベルの比較

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

ラベルは存在するものの、k-meansがそれらを一度も見ていない場合は、何が見つかったかを確認しましょう。pd.crosstabはクラスターとラベルの各組み合わせを数えます。

labels = KMeans(n_clusters=3, n_init=10, random_state=0).fit_predict(X)
print(pd.crosstab(labels, kind))

長さとカフェイン量に基づいてクラスタリングした3種類のコーヒー豆150個について、クラスタごとに1行、種類ごとに1列です:

個数を示す3行3列の表。縦にクラスタ、横にコーヒー豆の種類(アラビカ、リベリカ、ロブスタ)。クラスタ0にはロブスタ豆が49個、クラスタ1にはアラビカ豆が48個、リベリカ豆が3個、ロブスタ豆が1個、クラスタ2にはリベリカ豆が47個、アラビカ豆が2個含まれる

各クラスターはほぼ同じ種類で、別のクラスターに紛れ込んだ豆は6個だけです。そして、k-meansはラベルを一度も見ていません。

ただし、クラスターはクラスではありません。よく一致しているということは、データの点でクラスが異なることを意味します。一致度が低いことは発見であり、バグではありません。

challenge icon

チャレンジ

中級

k-meansクラスタはアヤメの種を見つけられるでしょうか?スターターコードでは花をスケーリングし、名前をspeciesに保持して、kを読み取り、クラスタリングします。

  1. クラスタと種のクロス集計表を作成します。
  2. 種ごとに、1つのクラスタに含まれる最大数を合計数とともに出力します。
  3. 単一の種だけを含むクラスタの数を数えます。

別の庭でk = 3の場合:

setosa: 48 of 50 share a cluster
versicolor: 41 of 50 share a cluster
virginica: 33 of 50 share a cluster
Clusters with one species: 0 of 3

自分で試してみよう

import pandas as pd
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans

# スケーリングされた150個のアヤメの花のデータと、それぞれの種名。種名はk-meansには見せない
iris = load_iris()
X = StandardScaler().fit_transform(iris.data)
species = iris.target_names[iris.target]

k = int(input())
labels = KMeans(n_clusters=k, n_init=10, random_state=0).fit_predict(X)

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

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

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

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