速通机器学习 11| K-Means 聚类
目录前言一、K-Means 四大基础核心概念1. 簇数量 K2. 距离度量衡量样本相似度3. 簇质心聚类中心4. 优化目标簇内平方和 SSE损失函数二、K-Means 迭代流程算法终止条件满足其一即可三、核心难点簇质心初始化方法1. 传统随机初始化流程图原始方案2. K-Meanssklearn 默认优化方案推荐3. 手动自定义初始化配套参数 n_init四、如何选择最优 K 值两大实用方法方法 1肘部法则基于 SSE 损失方法 2轮廓系数量化聚类好坏核心评价指标1. 单个样本轮廓系数公式2. 轮廓系数判定规则六、Sklearn 完整实战代码全流程标准化 双方法寻K 模型训练 量化评估代码核心解析与参数说明KMeans核心参数详解七、全文总结前言什么是聚类和分类有什么区别前面学习的逻辑回归、SVM、随机森林都属于有监督学习训练数据自带标签模型学习「特征→标签」的映射关系。 而K-Means是经典无监督聚类算法数据集没有任何标签算法仅依靠样本特征的相似度自动把相似样本划分到同一簇实现 “物以类聚”。核心区分分类已知类别标签有标准答案聚类无标签仅靠数据分布自动分组。一、K-Means 四大基础核心概念1. 簇数量 K人为预先指定的超参数代表最终要把数据划分成多少组算法无法自动求解最优 K。2. 距离度量衡量样本相似度距离越小两个样本特征越相似K-Means 默认使用欧式距离同时支持曼哈顿距离。 1曼哈顿距离二维样本欧式距离二维样本算法首选3. 簇质心聚类中心单个簇内所有样本各维度特征的算术平均值作为该簇的代表中心点。 设某簇包含$$$$个样本$$x_1,x_2,...,x_$$质心公式4. 优化目标簇内平方和 SSE损失函数K-Means 迭代全程只为最小化所有样本到自身簇质心的距离平方和数学公式第i簇质心对应簇内样本SSE 越小簇内样本越紧凑。二、K-Means 迭代流程完整 6 步循环逻辑图 (a) 原始数据无标签样本自然分为 3 堆图 (b) 初始化质心选出K个点作为初始簇中心红色叉号图 (c) 样本分配计算每个样本到K个质心的欧式距离归入距离最近的簇图 (d)(e) 更新质心分别计算每个簇全部样本均值生成全新簇中心循环迭代重复「分配样本→更新质心」两步图 (f) 收敛停止质心位置几乎无偏移 / 达到最大迭代次数算法结束。算法终止条件满足其一即可前后两轮所有质心变化量小于极小阈值样本所属簇标签不再发生变动达到预设最大迭代次数sklearn 默认 300 轮。三、核心难点簇质心初始化方法初始化直接决定聚类是否收敛到全局最优共 3 种实现方式1. 传统随机初始化流程图原始方案操作从全部样本中随机不放回抽取$$$$个真实样本作为初始质心。 缺陷随机性极强若初始质心距离很近极易收敛到局部最优抽到离群点会严重破坏聚类结果。 代码写法initrandom2. K-Meanssklearn 默认优化方案推荐解决随机初始化局部最优问题核心逻辑让初始质心尽可能相互远离随机选取 1 个样本作为第一个质心计算所有样本到已有全部质心的最短距离$$d(x$$样本被选为下一个质心的概率与成正比离现有中心越远选中概率越高循环执行直到选出K个质心。 优势收敛更快、聚类结果稳定工业场景全部默认使用。3. 手动自定义初始化业务已知数据分布时人工输入K组特征向量作为初始中心# 自定义3组初始质心 init_center [[1.2,3.5], [5.1,2.2], [2.8,7.4]] kmeans KMeans(n_clusters3, initinit_center)配套参数 n_init无论哪种初始化n_init10代表程序自动重复 10 次完整聚类对比每组 SSE 损失最终输出损失最小的最优结果进一步削弱初始化随机性带来的误差。四、如何选择最优 K 值两大实用方法K 是人工指定超参数无法自动求解业务中结合两种方法综合判断。方法 1肘部法则基于 SSE 损失遍历 K2,3,4…10分别训练模型记录每个 K 对应的 SSEK 越大SSE 一定单调下降K 过小分组粗糙K 过大簇被过度拆分绘制 K-SSE 折线图找到曲线下降速率骤缓的拐点手肘拐点对应数值即为推荐 K。方法 2轮廓系数量化聚类好坏核心评价指标1. 单个样本轮廓系数公式等价分段形式变量释义a(i)样本$$x_$$与同簇所有样本的平均距离代表簇内凝聚度越小越好b(i)样本$$x_$$到其他任意一簇的最小平均距离代表簇间分离度越大越好。2. 轮廓系数判定规则取值范围数值越接近 1聚类效果越好样本划分合理簇内紧凑、簇间区分明显样本归属错误应划分至其他簇样本落在两个簇交界处簇边界重叠严重。整体评价标准计算全部样本轮廓系数平均值均值越靠近 1整体聚类质量越高。六、Sklearn 完整实战代码全流程标准化 双方法寻K 模型训练 量化评估本次实战基于无标签数据集完整复现K-Means工业建模全流程数据读取→特征标准化→肘部法则寻参→轮廓系数择优→模型训练→结果评估代码可直接运行适配教学与实验场景。代码核心解析与参数说明# 导入所需工具库 import pandas as pd import matplotlib.pyplot as plt from sklearn.cluster import KMeans from sklearn.preprocessing import StandardScaler from sklearn.metrics import silhouette_score # 设置中文字体 plt.rcParams[font.sans-serif] [SimHei, Microsoft YaHei, Arial Unicode MS] plt.rcParams[axes.unicode_minus] False # 1. 数据读取与特征筛选 # 读取空白分隔符数据集适配无标签聚类数据 datas pd.read_table(rD:\pythoncode2\bigdata_ai40\机械学习\data\data.txt, sep\s) # 剔除无关列保留纯特征数据 data datas.iloc[:, 1:] # 2. 特征标准化K-Means必备预处理消除量纲影响 scaler StandardScaler() data_scaled scaler.fit_transform(data) # 3. 肘部法则遍历K值基于SSE损失初步筛选最优聚类数 sse_list [] k_range range(2, 10) for k in k_range: km KMeans(n_clustersk, initk-means, n_init10, random_state42) km.fit(data_scaled) sse_list.append(km.inertia_) # 绘制SSE-K肘部曲线直观观察拐点 plt.figure(figsize(8, 4)) plt.plot(k_range, sse_list, o-, linewidth2, colorsteelblue) plt.xlabel(聚类数量 K) plt.ylabel(簇内平方和 SSE) plt.title(肘部法则筛选最优K值) plt.grid(alpha0.3) plt.show() # 4. 轮廓系数精准择优量化各K值聚类效果确定全局最优K best_k 2 best_score -1.0 print( 各聚类数量轮廓系数评估结果 ) for k in k_range: km KMeans(n_clustersk, initk-means, n_init10, random_state42) cluster_labels km.fit_predict(data_scaled) # 计算整体轮廓系数 score silhouette_score(data_scaled, cluster_labels) print(f聚类数{k} | 轮廓系数{score:.4f}) # 更新最优聚类参数 if score best_score: best_score score best_k k # 输出最优聚类参数 print(\n 最优聚类结果 ) print(f最优聚类数量: {best_k}) print(f对应最优轮廓系数: {best_score:.4f}) # 5. 基于最优K训练最终聚类模型 final_kmeans KMeans(n_clustersbest_k, initk-means, n_init10, random_state42) final_labels final_kmeans.fit_predict(data_scaled) # 输出最终模型核心指标 print(f模型最终SSE损失值: {final_kmeans.inertia_:.4f}) print(各簇样本数量分布) print(pd.Series(final_labels).value_counts().sort_index())本次优化补齐K-Means建模必备标准化流程融合肘部法则与轮廓系数双择优方案贴合工业建模标准核心要点如下数据预处理新增标准化操作彻底解决特征量纲不一致问题规避大数特征主导距离计算的缺陷是K-Means建模的必要前提。优化初始化策略统一采用k-means优化初始化搭配n_init10多次迭代择优有效避免局部最优解聚类结果更稳定。双维度K值寻优结合SSE肘部曲线可视化轮廓系数量化评分兼顾直观判断与精准数值评估筛选的K值更贴合数据真实分布。结果完整输出不仅输出最优K值与轮廓系数同时返回最终模型SSE损失、各簇样本分布全方位评估聚类质量。实验可复现固定随机种子所有参数可追溯适配课程实验、作业报告场景。KMeans核心参数详解KMeans( n_clusters3, # 核心超参手动指定聚类簇数量K initk-means, # 质心初始化方式默认优化版规避局部最优 n_init10, # 重复初始化次数自动选取SSE最小的最优模型 max_iter300, # 单次训练最大迭代次数达到上限强制终止 random_state42 # 固定随机种子保证实验结果可复现 )七、全文总结K-Means 无监督聚类核心逻辑随机初始化质心→分配样本→更新质心循环至收敛优化目标最小化 SSE距离默认使用欧式距离初始化优先选择 K-Means规避局部最优最优 K 值结合肘部法则 轮廓系数综合判定使用前必须标准化数据仅适合球状分布、中小规模数据集。