K-Meansがうまくいかない場合
CoddyのMachine Learningジャーニー「教師なし学習」セクションの一部。レッスン 14/51。
K-meansは、各クラスタを中心の周りにある丸い塊として捉えます。ダーツのデータは、中心の的を囲むリング状になりますが、k-meansはそれを真っ二つに分けてしまいます。
各点は最も近い中心に割り当てられるため、2つのクラスターの境界は中心のちょうど中間を通る直線になります。リングとその中央部分を直線で分けることはできません。
細長く曲がったグループや、非常に不均一なグループも、同じように k-means の問題になります。クラスタ自体は返されるので、必ず図を確認しましょう。
チャレンジ
中級ドローンが、2つの曲がった砂州にいる200頭のアザラシを発見しました。スターターコードはleftパネルに正解を描画します。
- k-meansでアザラシをクラスタリングします。k = 2。
rightパネルに各クラスタを散布図で表示し、cluster 0またはcluster 1というラベルを付けます。- 中心を黒い
"X"マーカーで示し、centersというラベルを付けます。凡例を追加してから、表示します。
Coddyがチャートを説明し、それぞれの砂州にいるアザラシのうち、正しく分類された数を数えます。2つの群れの場合は、次のようになります。
自分で試してみよう
import matplotlib.pyplot as plt
from sklearn.datasets import make_moons
from sklearn.cluster import KMeans
# ドローンから見た、2つの湾曲した砂州で休む200頭のアザラシ(位置の単位は100 m)
X, sandbar = make_moons(n_samples=200, noise=0.07, random_state=4)
# 実際の砂州をaxに描画する
def draw_truth(ax):
ax.scatter(X[sandbar == 0, 0], X[sandbar == 0, 1], s=12, label="north bar")
ax.scatter(X[sandbar == 1, 0], X[sandbar == 1, 1], s=12, label="south bar")
ax.set_title("The truth")
ax.legend()
fig, (left, right) = plt.subplots(1, 2, figsize=(9, 4))
draw_truth(left)
right.set_title("K-means, k = 2")
# 以下にコードを書いてください
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
教師なし学習のすべてのレッスン
自分で練習してみよう: Pythonオンラインコンパイラ