
【聚类分析】基于GUI K-means聚类分析【Matlab 022期】
发布日期:2021-05-24 10:06:46
浏览次数:28
分类:精选文章
本文共 2008 字,大约阅读时间需要 6 分钟。
聚类分析简介
聚类是一种数据分析方法,旨在将相似的数据点分组,以发现潜在的模式和结构。这类方法无需事先对数据进行标注,可以直接从数据中提取信息。
相似度与距离度量
聚类的核心在于定义相似度和距离度量。常见的距离度量方法包括欧氏距离、曼哈顿距离和闵氏距离。为了确保变量的量纲一致,通常会采用标准化方法,如0-1标准化或区间缩放法。对于分类变量,可以采用onehot编码填充。
聚类算法及划分方法
聚类算法可按不同划分方式分为层次聚类、基于密度的聚类和基于模型的聚类。基于划分的方法中,K-means算法是广泛使用的。
- K-means算法流程
- 随机选取K个数据点作为初始类中心
- 根据数据点与类中心的距离进行类分配
- 更新类中心点,使用新的类中心点作为下一次的初始点
- 重新分配数据点至新的类中
- 迭代步骤直到满足收敛条件(如类中心漂移足够小)
聚类模型评估
优点
简单易懂,计算速度快。体现数据内在结构的特性,效果显著(当类密集时)。缺点
K值需事先确定,难以选择合适的K值。易受孤立点和噪声干扰,常以局部最优而非全局最优。计算量较大,类划分依赖初始中心点,结果需多次迭代验证。
K-means在scikit-learn中的实现
scikit-learn中的KMeans算法参数配置及其意义:
n_clusters
:定义聚类数量,默认为8。init
:类中心点初始化方式,可选为‘k-means++’(优化选择)、‘random’(随机选择)或自定义数组。max_iter
:最大迭代次数,默认为300。tol
:收敛阈值,判断类中心点是否收敛,设为0.0001。precompute_distances
:预计算距离,适用于大数据量,提高计算速度。n_jobs
:并行计算数目,默认为1。copy_x
:是否复制输入数据,默认为True,避免原数据被修改。
确定K值——肘部法则
肘部法则通过观察不同K值下的总平方误差(SSE)变化趋势,找到K值使得SSE开始显著增加的临界点。图示显示,当K值增加到某一值后,SSE开始上升,此时选择较小的K值即为最佳。
聚类模型评估指标——轮廓系数
轮廓系数衡量聚类的质心质量:
- a(i):数据i与其所属类的平均距离。
- b(i):数据i与其不所属类的平均距离。最终值在[ -1, 1 ]范围内,接近1表示质心高质量。
最近簇则基于平均轮廓系数定义,选择数据点与最近簇的距离最小。
Canopy算法配合K-means
Canopy算法通过预处理筛选相似对象,提高K-means的计算效率:
- 工作流程
- 选择两个距离阈值T1和T2(T1 > T2)。
- �ء点P与所有Canopy计算距离,T1近则加入Canopy。
- 若P与任一Canopy距离小于T2,则从列表中删除(认为与该Canopy已经足够近)。
- 重复步骤直至列表为空。
优点:Canopy过滤的小类帮助抗噪声,中心点精确程度高,减少相似计算量。
scikit-learn中的轮廓系数计算
使用sklearn.metrics.silhouette_score
函数,支持多种度量方法。
- 参数说明
X
:输入特征数据。labels
:类标签数组。sample_size
:可选抽样数,影响计算速度,为None时抽样均衡。
代码示例
以下为一个K-means聚类示例:
from sklearn.cluster import KMeansimport numpy as np#生成随机数据mu = np.array([0., 0.])var = np.array([0.3, 0.35])samNum = 200data = np.random.multivariate_normal(mu, var, samNum)# K-means初始化n_clusters = 4 # 可根据图像观察调整kmeans = KMeans(n_clusters=n_clusters, init='k-means++', max_iter=100, random_state=42)label = kmeans.fit_predict(data)#查看结果print("Number of clusters:", n_clusters)print("Label unique count:", np.unique(label).size)print("Inertia:", kmeans.inertia_)
运行结果
图示显示聚类结果类数为4,误差较小,类间差异明显。
代码备注
该脚本展示了K-means算法的核心步骤,清晰的几何可视化帮助直观理解聚类结果。代码包括初始中心点选择、迭代分类、类中心更新以及可视化绘制。
通过以上内容,读者可以了解K-means算法的基本原理、在scikit-learn中的实现以及如何选择合适的K值和评估聚类结果质量。
发表评论
最新留言
表示我来过!
[***.240.166.169]2025年05月02日 11时58分29秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
matlab图的连通性算法,matlab判别图的连通性.doc
2025-04-12
MATLAB坐标设置:范围、主次坐标等常见问题
2025-04-12
matlab复信道化滤波器组,基于复多相滤波器组的信道化接收机
2025-04-12
MATLAB如何固定text在图中的相对位置
2025-04-12
Matlab安装
2025-04-12
matlab实现LSTM时序预测-ChatGPT4o+mathworks文档
2025-04-12
MATLAB实现主成分分析
2025-04-12
MATLAB实现交叉小波变换
2025-04-12
MATLAB实现各种概率密度函数(概率密度/分布/逆概率分布函数)
2025-04-12
MATLAB实现各种熵:香农熵、条件熵、模糊熵、样本熵等
2025-04-12
MATLAB实现各种离散概率密度函数(概率密度/分布/逆概率分布函数)
2025-04-12
MATLAB实现基于遗传算法/引力搜索算法优化新安江水文模型
2025-04-12
matlab练习程序(RGB2HSV、HSV2RGB)
2025-04-12
MATLAB绘制椭圆
2025-04-12
Maven学习总结(23)——Maven常用命令介绍
2025-04-12
Maven学习总结(59)—— Jar 包依赖冲突最全解决方案
2025-04-13
maven常用命令集合(收藏大全)
2025-04-13
Maven项目怎样重新下载依赖
2025-04-13
Maven项目打包版本号管理——Maven Project Version插件
2025-04-13