以实际单位表示中心
本课属于 Coddy Machine Learning 学习旅程的“无监督学习”单元。第 12 课,共 51 课。
一个簇的中心就是它的典型成员。K-means 在缩放后的数据中找到了公园的中心,因此这些中心的数值是 z 分数。同一组中心,变换前后如下:
保留缩放器:它会记住每个特征的均值和离散程度,而 inverse_transform 会撤销缩放:
scaler = StandardScaler()
km.fit(scaler.fit_transform(park))
centers = scaler.inverse_transform(km.cluster_centers_)
print(centers.round(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 次乘车:同一个点,只是换成了人们能理解的单位。
挑战
中等一位手套制造商将手部数据聚类,划分为 4 种手套尺码。起始代码会对 150 只手的数据进行缩放和聚类,并将一位顾客的手部数据读入 new_hand。
- 找到新手部数据所属的聚类:先对它进行缩放。
- 将聚类中心转换回厘米。
- 按下方所示,输出该聚类中心,保留 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)
# 每种手套尺码对应一个簇
km = KMeans(n_clusters=4, n_init=10, random_state=0)
km.fit(scaled)
# 一位新顾客的手部数据,存为一行且列名相同的表
new_hand = pd.DataFrame({
"hand_cm": [float(input())],
"palm_cm": [float(input())],
"finger_cm": [float(input())],
})
# 在下方编写你的代码
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
无监督学习中的所有课
自己练习: Python 在线编译器