重访批发数据:"最佳" k
在第 2 章的结尾,您使用层次聚类探索了批发分销商数据 customers_spend。这一次,您将用本章介绍的 k-means 聚类工具来分析同一数据。
第一步是使用平均轮廓系数(average silhouette width)来确定"最佳"的 k 值。
先回顾一下数据:它包含某批发分销商 45 位不同客户在Milk、Grocery 和 Frozen 三类食品上的花费记录。数据存放在数据框 customers_spend 中。本练习中,您可以假设数据类型一致(都是消费金额),因此无需进行缩放。
本练习是课程的一部分
R 中的聚类分析
练习说明
- 使用
map_dbl()在 k 从 2 到 10 的范围内,对customers_spend运行pam(),并从每个模型中提取平均轮廓系数:model$silinfo$avg.width。将结果向量存为sil_width。 - 构建新的数据框
sil_df,包含 k 的取值与对应的平均轮廓系数向量。 - 使用
sil_df中的数值绘制折线图,展示 k 与平均轮廓系数之间的关系。
交互式实操练习
通过完成这段示例代码来试试这个练习。
# Use map_dbl to run many models with varying value of k
sil_width <- map_dbl(2:10, function(k){
model <- pam(x = ___, k = ___)
model$silinfo$avg.width
})
# Generate a data frame containing both k and sil_width
sil_df <- data.frame(
k = ___,
sil_width = ___
)
# Plot the relationship between k and sil_width
ggplot(___, aes(x = ___, y = ___)) +
geom_line() +
scale_x_continuous(breaks = 2:10)