Menu
CoddyTech

回顾:健身房会员

本课属于 Coddy Machine Learning 学习旅程的“无监督学习”单元。第 5 课,共 51 课。

challenge icon

挑战

简单

还记得本章开头提到的咖啡馆到访记录吗?健身房也想了解自己的会员情况:来这里的会员都有哪些类型?members.csv 记录了每位会员每次到访时的有氧运动和力量训练平均分钟数。

  1. 拟合 KMeans:3 个簇,n_init=10,random_state=0。
  2. 对每个组,按人数从多到少,打印该组人数、中心点和最具代表性的会员,也就是距离中心点最近的会员。
  3. 用散点图绘制每个组,并用人数标注,例如 55 members;然后用黑色星形标注中心点,并添加图例,最后显示图表。

另一个健身房的数据:

Groups, biggest first:
45 members: 39 min cardio, 15 min weights (most typical: Rosa P.)
30 members: 20 min cardio, 47 min weights (most typical: Finn A.)
15 members: 56 min cardio, 46 min weights (most typical: Lu W.)

以及对应的图表:

标题为 Gym Members 的散点图,横轴为有氧运动分钟数,纵轴为力量训练分钟数:45 名有氧运动会员位于下方,30 名力量训练会员位于左上方,15 名两种运动都做很多的会员位于右上方,每组都有一个黑色星形标记,图例按人数标明各组

然后 Coddy 会描述你的图表。

亲手试试

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

# 每位会员占一行:记录每次到访时有氧运动和力量训练的平均时长(分钟)
members = pd.read_csv("members.csv")
X = members[["cardio_min", "weights_min"]]

fig, ax = plt.subplots()
ax.set_title("Gym Members")
ax.set_xlabel("Cardio (min per visit)")
ax.set_ylabel("Weights (min per visit)")

# 在下方编写你的代码

无监督学习中的所有课

自己练习: Python 在线编译器