使用肘部法则(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计算、可视化分析和模型训练,适合初学者在生产环境中实现。
热门推荐
纯碱期货市场中,如何利用波浪理论和移动平均线确定交易的目标价格?
荐读 | 《彼得·林奇的成功投资》:成功的投资来自成功的策略
串起四大交通枢纽,济南地铁3号线二期2分钟实现“空轨换乘”
发热的中医治疗方法有什么
年轻人选车指南:油车 vs 新能源车,如何做出最佳选择?
利用语义搜索和混合查询策略提升RAG系统的准确性
新社保卡怎样激活,分享新社保卡激活方法
中国十大莲藕产区:从洪湖到安龙,品味各地特色
如何理解黄金价今日价格的形成机制?这种形成机制如何受市场因素影响?
胎儿体重计算方法
PE和芳纶防弹装备的特点对比
如何在机械工程行业中获得实习和工作机会
东乡平八郎有没有说过“一生俯首拜阳明”?
新手司机上高速:陪同要求与事故处理指南
驾驶证实习期上高速规定及扣分细则
四川建设"天府森林粮库":盘活森林资源 保障粮食安全
2025U.S.News最具创新性大学排名:亚利桑那州立大学连续10年蝉联榜首
陈姓宝宝取名字大全,选择最有意义的名字,给宝宝一个美好的未来
“结石姐”Jessie J:从英国神童到《我是歌手》歌王的音乐之旅
AI+制药大幅提升新药研发效率和成功率
智能医疗新篇章:机器学习如何重塑临床试验,释放健康数据的巨大力量
角质层过厚皮肤会出现哪些症状?
债务加入、公司转让后债务承担及法院强制执行债权转让的法律解析
游资股票操作:游资如何操作股票账户
《女神异闻录》系列为何选高中生作主角?总监解释背后共鸣因素
江西十大特色名小吃,这些小吃,你真的都尝遍了吗?
FDA警告:儿童误食止咳药可能导致严重副作用
如何诊断蕈样肉芽肿
粘胶怎么去除干净(粘胶怎么去除)
发现鱼菜共生的潜力:它的工作原理及其好处