使用肘部法则(Elbow Method)来确定最佳K值
创作时间:
作者:
@小白创作中心
使用肘部法则(Elbow Method)来确定最佳K值
引用
CSDN
1.
https://m.blog.csdn.net/gotshgo/article/details/143321075
在进行聚类分析时,如何选择合适的K值是一个常见的问题。肘部法则(Elbow Method)是一种常用的方法,通过计算不同K值下的聚类成本(SSE)并可视化其变化趋势,可以帮助我们找到最佳的K值。本文将详细介绍如何使用肘部法则来确定最佳K值,适合初学者在生产环境中实现。
环境准备
确保已经安装并配置好PySpark环境。你需要有一个可用的Spark集群或本地Spark环境。
数据准备
确保有用户行为数据,这些数据应该经过清洗和预处理。以下是一个简化的加载数据的示例:
from pyspark.sql import SparkSession
# 创建 SparkSession
spark = SparkSession.builder \
.appName("ElbowMethodExample") \
.getOrCreate()
# 加载数据(假设数据在CSV文件中)
df = spark.read.csv("path_to_user_logs.csv", header=True, inferSchema=True)
# 数据清洗(去除缺失值和重复记录)
df = df.dropna(subset=["view_depth", "time_spent", "cart_additions"]).dropDuplicates()
特征工程
将特征向量化,为K-Means聚类做准备。使用VectorAssembler来构建特征向量:
from pyspark.ml.feature import VectorAssembler
# 将特征合并为一个向量
assembler = VectorAssembler(inputCols=["view_depth", "time_spent", "cart_additions"], outputCol="features")
data = assembler.transform(df)
计算不同K值的聚类成本
肘部法则的核心思想是计算不同K值下的聚类成本(即每个聚类的总误差平方和SSE),并通过可视化SSE随K值变化的趋势来确定最佳K值。
步骤 4.1:计算每个K值的SSE
使用循环遍历不同的K值(例如2到10),并记录每个K值对应的SSE。
from pyspark.ml.clustering import KMeans
# 存储每个K值的SSE
cost = []
K = range(2, 11) # K值范围从2到10
for k in K:
# 创建KMeans模型
kmeans = KMeans(featuresCol="features", k=k)
model = kmeans.fit(data)
# 计算每个模型的SSE
cost.append(model.summary.trainingCost)
步骤 4.2:输出SSE结果
打印每个K值对应的SSE值,以便进行后续分析。
# 打印每个K值的SSE
for k, sse in zip(K, cost):
print(f"K={k}, SSE={sse}")
可视化SSE与K值的关系
通过图表可视化SSE随K值变化的趋势,以便直观分析最佳K值。
步骤 5.1:绘制图表
可以使用matplotlib库进行可视化。首先,确保在环境中安装matplotlib:
pip install matplotlib
然后,使用以下代码绘制图表:
import matplotlib.pyplot as plt
# 绘制肘部法则图
plt.figure(figsize=(8, 5))
plt.plot(K, cost, marker='o')
plt.title('Elbow Method for Optimal K')
plt.xlabel('Number of clusters (K)')
plt.ylabel('SSE')
plt.xticks(K)
plt.grid()
plt.show()
确定最佳K值
在图表中观察K值与SSE的关系,找到“SSE减少减缓”或“肘部”位置,这个位置对应的K值即为最佳K值。例如,如果SSE在K=4到5之间的下降幅度明显减小,那么K=4可能是一个合理的选择。
应用最佳K值进行聚类
确定最佳K值后,可以使用该K值重新训练K-Means模型:
# 假设最佳K值为4
optimal_k = 4
kmeans = KMeans(featuresCol="features", k=optimal_k)
model = kmeans.fit(data)
# 预测用户群组
predictions = model.transform(data)
# 查看聚类结果
predictions.select("features", "prediction").show(5)
下图可以发现当k=4或者5时是最佳的情况。SSE图像下降幅度最大放缓的情况在4-5之间。
总结
通过以上步骤,您可以使用肘部法则确定最佳K值并进行用户聚类分析。这一过程包括数据加载、特征工程、SSE计算、可视化分析和模型训练,适合初学者在生产环境中实现。
热门推荐
孕期雪糕知多少:能不能吃、何时吃与为何少吃
胫骨痛的原因及预防
线上学术沙龙 | 水政治:以印孟水资源争端为例
腱鞘炎不求人,家庭疗法让你缓解疼痛!
这一骑行绿道有线路标识不清?回应:整改完毕,将加强巡查
《绝地潜兵2》全武器图鉴一览:AR-23系列武器属性优缺点解析
商标被异议或注销怎么办?一文详解应对方案
我在浦城寻古道
病态的高压教育和李泰的咄咄逼人逼迫李承乾放手一搏谋反
如何分析卢布汇率的变动原因?这种分析对国际贸易有哪些影响?
开发商延期交房怎么赔偿业主损失
冬季果树种植指南:8种耐寒果树品种详解
“老头乐”?到底乐不乐!
用一年时间,设计一座梦想中的雨水花园!这所小学绕着“滨江”开了一门课……
飞鸟与飞机的“空中暗战”,航空业如何应对鸟击挑战?
山药蛋派的代表作家是谁 有哪些代表作品
含羞草养殖方法和注意事项
CPI与股票投资:探索两者之间的微妙关系及对A股的影响
含羞草养殖完全指南:从种植到病虫害防治的全方位养护技巧
SCI期刊OA是什么意思?开放获取模式如何改变学术出版?
你是情绪的喷火龙吗?伤肝伤心伤人际 心理师送你4道管理情绪的心法
科技股突然大跌,投资者这样看!外资再发声:买入!
德国汽车有什么特点
54个简约又文艺的个性网名,总有一个适合你
《三国演义》中的人物性格特征及启示
脾胃虚弱怎么调理?5个实用的食疗菜谱
认识青春痘救星「口服 A 酸」!一次看懂治疗作用、使用注意事项
轿车轮胎的气怎样合理放出?放气操作对轮胎有什么影响?
痛风患者是否可以食用拉面
南昌各区域房价表出炉!红谷滩与高新区房价上涨显著