Menu
CoddyTech

実際の単位で見る中心

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

クラスターの中心は、その典型的なメンバーです。K-meansはスケーリング済みデータでテーマパークの中心を見つけたため、それらはzスコアとして表されます。同じ中心を、変換前と変換後で示します。

テーマパークの来園者を示す2つのグラフ。それぞれのクラスター中心は十字で示されています。左はスケーリング済みの軸で、中心は0.8や1.3のような値に位置しています。右は実際の単位で、同じ中心が6.8時間と13.9回の乗り物、6.0と6.2、2.4と3.0に位置しています

スケーラーを保持しておきます。各特徴量の平均とばらつきを記憶し、inverse_transformでスケーリングを元に戻せます。

scaler = StandardScaler()
km.fit(scaler.fit_transform(park))
centers = scaler.inverse_transform(km.cluster_centers_)
print(centers.round(1))

これは、クラスターごとに1行で、時間、乗車回数、年齢を出力します。

[[ 6.   6.2 38.4]
 [ 2.4  3.  45.8]
 [ 6.8 13.9 20.7]]

クラスタ2の中心は0.8と1.3でした。今は6.8時間と13.9回の乗車として表示されており、同じ点を人が使える単位で表しています。

challenge icon

チャレンジ

中級

手袋メーカーは、手のクラスターを4つの手袋サイズに変換します。スターターコードは150人分の手をスケーリングしてクラスター化し、顧客の手をnew_handに読み込みます。

  1. 新しい手が属するクラスターを見つけます。まずスケーリングしてください。
  2. 中心をcm単位に戻します。
  3. 以下のように、そのクラスターの中心を小数第1位まで表示します。

別の手袋メーカーの場合:

Your glove size: hand 20.3 cm, palm 8.9 cm, finger 8.6 cm

自分で試してみよう

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

# 手袋職人が測定した150人分の手の寸法(cm):手の長さ、手のひらの幅、中指の長さ
hands = pd.read_csv("hands.csv")
scaler = StandardScaler()
scaled = scaler.fit_transform(hands)
# 手袋のサイズごとに1つのクラスター
km = KMeans(n_clusters=4, n_init=10, random_state=0)
km.fit(scaled)

# 新しい顧客の手の寸法を、同じ列を持つ1行の表として表したもの
new_hand = pd.DataFrame({
    "hand_cm": [float(input())],
    "palm_cm": [float(input())],
    "finger_cm": [float(input())],
})

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

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

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

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