クラスタと既知のラベルの比較
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列です:
各クラスターはほぼ同じ種類で、別のクラスターに紛れ込んだ豆は6個だけです。そして、k-meansはラベルを一度も見ていません。
ただし、クラスターはクラスではありません。よく一致しているということは、データの点でクラスが異なることを意味します。一致度が低いことは発見であり、バグではありません。
チャレンジ
中級k-meansクラスタはアヤメの種を見つけられるでしょうか?スターターコードでは花をスケーリングし、名前をspeciesに保持して、kを読み取り、クラスタリングします。
- クラスタと種のクロス集計表を作成します。
- 種ごとに、1つのクラスタに含まれる最大数を合計数とともに出力します。
- 単一の種だけを含むクラスタの数を数えます。
別の庭で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)
# 以下にコードを書いてください
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
教師なし学習のすべてのレッスン
自分で練習してみよう: Pythonオンラインコンパイラ