客户细分
本课属于 Coddy Machine Learning 学习旅程的“无监督学习”单元。第 39 课,共 51 课。
本章将聚类应用于实践,最终制作出一份按情绪分类的播放列表:
首先是细分群体:人们可以采取行动的群体。一家旅舍将两个特征量化并对住客进行聚类:
实际单位说明了一个群组的特征。它的标准化中心显示了它的独特之处:相对于平均水平,群组中每项特征的标准差。
X = StandardScaler().fit_transform(guests[["nights", "days_ahead"]])
km = KMeans(n_clusters=3, n_init=10, random_state=0).fit(X)
print(km.cluster_centers_.round(1))这会打印:
[[ 1.3 -0.7]
[-0.7 -0.7]
[-0.7 1.4]]每行中离 0 最远的数字表示其细分群体。第 0 行的停留时间长 1.3 个标准差:背包客。第 2 行的预订时间早 1.4 个标准差:学校旅行团。
挑战
中等一家剧院想了解它的 166 名会员。程序会读取用于划分的特征,例如 age,ticket_price。
- 对这些列进行缩放,使用起始代码中的辅助函数聚类为
best_k(X)个群组,并打印群组数量。 - 按规模从大到小,打印每个群组的规模和名称:中心离 0 最远的特征、
high或low,以及距离。
对于另一家剧院和 age,shows_per_year:
4 segments
57 members: high shows_per_year (1.2 std from average)
52 members: low shows_per_year (1.0 std from average)
40 members: low age (1.4 std from average)
32 members: high age (1.5 std from average)亲手试试
import numpy as np
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
# 每位剧院会员对应一行
members = pd.read_csv("theatre.csv")
# 用于分组的特征,例如 age,ticket_price
features = input().split(",")
# 根据轮廓系数:从 2 到 6 中,选出使 X 的轮廓系数最高的 k
def best_k(X):
best, best_score = 2, -1
for k in range(2, 7):
labels = KMeans(n_clusters=k, n_init=10, random_state=0).fit_predict(X)
score = silhouette_score(X, labels)
if score > best_score:
best, best_score = k, score
return best
# 在下方编写你的代码
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
无监督学习中的所有课
自己练习: Python 在线编译器