Menu
CoddyTech

クラスタに名前を付けよう

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

クラスタには名前ではなく番号が付いています。ここでラベルを使えます。クロス集計表は、各クラスタにどの数字が入ったかを数えます。たとえば、3つのクラスタにおける1、7、9の数は次のとおりです。

クラスタが縦、数字の1、7、9が横に並ぶ3行3列の度数表。各行で最も大きい度数が囲まれている:クラスタ0には9が166個、クラスタ1には7が176個、クラスタ2には1が154個ある

各クラスタに、そのクラスタで最も多く見られる数字の名前を付けます。その数字として正しく分類された件数を数えます:

ct = pd.crosstab(km.labels_, y)
names = ct.idxmax(axis=1)      # 各行で値が最も大きい列
right = ct.max(axis=1).sum()
print(names.tolist(), right)

これは [9, 7, 1] 496 を出力します。541 回のスキャンのうち496 回は、単一のラベルなしで見つかったグループによって right と名付けられています。

challenge icon

チャレンジ

中級

10 個のクラスタに名前を付けましょう。スターターには、ラベルなしで学習させた km が用意されています。ここからは y の数字を使えます。

  1. クラスタと y のクロス集計表を作成し、各クラスタで最も多い数字にちなんで名前を付けます。
  2. 名前の順に、各クラスタで正しく名前が付いたスキャン数、クラスタのサイズ、正しく名前が付いたスキャンの割合を整数のパーセントで出力します。
  3. 全体で正しく名前が付いたスキャン数を、パーセントは小数第1位まで表示して出力します。

5 個のクラスタの場合:

Cluster named 0: 175 of 177 scans (99%)
Cluster named 2: 160 of 367 scans (44%)
Cluster named 3: 168 of 531 scans (32%)
Cluster named 6: 179 of 359 scans (50%)
Cluster named 7: 176 of 363 scans (48%)
Named right without labels: 858 of 1797 scans (47.7%)

あなたのクラスタのうち、最も精度が低いのはどれですか?その中には何が隠れていますか?

自分で試してみよう

import pandas as pd
from sklearn.datasets import load_digits
from sklearn.decomposition import PCA
from sklearn.cluster import KMeans

# 「Look at the Digits」より:64ピクセルのスキャンが1,797件、インクの値は0から16
digits = load_digits()
X = digits.data
y = digits.target

# 「Shrink with PCA」より:分散の80%をスキャンあたり13個の数値で表現
pca = PCA(n_components=0.8)
X_small = pca.fit_transform(X)

# 「Cluster the Digits」より:ラベルを使わずに見つけた10個のクラスタ
km = KMeans(n_clusters=10, n_init=10, random_state=0).fit(X_small)

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

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

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

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