同你分享1个完整的聚类分析案例

article/2025/11/11 9:56:40

这篇文章从对聚类的感性认识到聚类算法的实现:

k个初始中心点的选择,中心点的迭代,直到算法收敛得到聚类结果。

但有几个问题需要回答:

如何判断数据是否适合聚类?
k类是如何确定的?
遇到数据集小的时候,如何得到直观的聚类图?
遇到非凸集数据,聚类要如何实现?

//

先看一幅以R语言绘制的图,适合聚类吗?

//

> library(fMultivar)
> set.seed(1234)
> df<-rnorm2d(1000,rho=.5)
> df<-as.data.frame(df)
> plot(df,main="bivariable normal distribution with rho=0.5")

显然,这幅图中的数据不适合聚类!因为数据是从相关系数为0.5的正态分布中抽取了1000个观测值!

//

如果采用中心点的聚类方法PAM,那么情况是否一致???

//

> library(cluster)
> library(ggplot2)
> fit<-pam(df,k=2)
> df$clustering<-factor(fit$clustering)
> ggplot(data=df,aes(x=V1,y=V2,color=clustering,shape=clustering))+geom_point()+ggtitle("clustering of Bivariate normal data")
> plot(nc$All.index[,4],type="o",ylab="CCC",xlab="number of clusters",col="blue")
通过对正态分布数据作基于中心点的聚类,我们发现出现了单峰分布,这表明数据是人为划分的,而不是”真实意义的类“。
事实上,聚类方法是无监督方法,到底靠不靠谱还是得看是否符合常识,现在又增加了一个方法: 如果多种方法都倾向于相似的聚类,那么聚类结果会更加稳健!

//

k值是如何确定的了?

//

> wssplot<-function(data,nc=15,seed=1234){
+ wss<-(nrow(data)-1)*sum(apply(data,2,var))
+ for (i in 2:nc){
+ set.seed(seed)
+ wss[i]<-sum(kmeans(data,centers=i)$withinss)}
+ plot(1:nc,wss,type="b",xlab="number of clusters",ylab="within groups sum of squares")}
> wssplot(df)
> library("NbClust")
> nc<-NbClust(df,min.nc=2,max.nc = 15,method="kmeans")
wssplot()推荐聚类个数选择2,或3较为合适!3之后,斜率下降越来越平缓,意味着继续增加类别,并不能带来多大的提升!
NbClust()推荐聚类个数为2,或3;意味着26个评价指标中,其中8项倾向选择2,5项选择3类!

//

如何选出最佳聚类个数的?

//

包中定义了几十个评估指标,聚类数目从2~15(自己设定),然后遍历聚类数目,通过看这些评估指标在多少聚类个数时达到最优。

基于五种营养标准的27类鱼、禽、肉的相同点和不同点是什么?是否有一种方法能把这些食物分成若干个有意义的类?

> data(nutrient,package="flexclust") #加载数据
> row.names(nutrient)<-tolower(row.names(nutrient))#将行名改为小写
> nutrient.sacled<-scale(nutrient) #标准化处理
> d<-dist(nutrient.sacled) #计算欧几里得距离
> fit.average<-hclust(d,method="average")#采用平均联动法进行聚类
> plot(fit.average,hang=-1,cex=.8,main="average linkage clustering")#绘制最后的聚类图
对于数据量较小时,聚类图可以很好展示类之间的界限!
解读聚类图:从下向上看;最开始所有的观测值都是一类,两两合并,最终成为一类

//

k-means聚类的缺点及改进

//

均值的使用意味着所有的变量必须是连续的,并且这个方法很有可能被异常值影响(所以有了k-medoids和k-medians)。

k-medoids基于中位数进行聚类,虽然可以排除异常值影响,但找中心点需要排序,所以计算速度很慢!

它在非凸聚类(例如U型)情况下也会变得很差(所以有了kernel k-means)。

数据集大时容易出现局部最优,需要预先选定k个中心点,对K个中心点选择敏感(所以有了k-means++ )

因为要算均值,所以只限于数值型数据;不适用categorical类型数据(分类型数据,比如男,女;商品类型;后来有了k-modes)

//

其它的聚类方法

//

PAM,围绕中心点的划分(PAM),在异常值上表现的很稳健;

K均值聚类一般选择欧几里得距离,要求数据类型是数值型且是连续变量;而PAM可以使用任意的距离计算;可以容纳混合数据类型,不仅限于连续变量;

与k-means一样,PAM也需要提前确定k类

中心点是动态变化的:通过计算中心点到每个观测值之间的距离的总和最小来选择中心点;直到最后中心点不再变化;

//

层次划分聚类

//

层次划分聚类最大的优点:可解释性好,能产生高质量的类(小而美),

缺点:时间复杂度高,不能跑大型数据集(改进的算法有BIRCH,数据类型是numerical);在某种意义上分层算法是贪婪的,一旦一个观测值被分配给一个类,它就不能在后面的过 程中被重新分配;容错机制弱,一步错步步错;

k-means中的观测值不会永远被分配到一类中。

//

Mean-Shift聚类

//

Mean shift算法,又称均值漂移算法,这是一种基于核密度估计的爬山算法,可用于聚类、图像分割、跟踪等。它的工作原理基于质心,这意味着它的目标是定位每个簇/类的质心,即先算出当前点的偏移均值,将该点移动到此偏移均值,然后以此为新的起始点,继续移动,直到满足最终的条件(找出最密集的区域)。

优点:不需要提前确定k类

这里还有更多的问题:

相似性/相异性的度量:数据本身的相似性,或特征的相似性。度量方法:距离,余弦距离等
聚类算法如何选择:根据数据特点和想要的聚类个数作选择。
数据如何作处理:离散傅里叶变换可以提取数据的频域信息,离散小波变换除了频域之外,还可以提取到时域信息。
降维,比如常见的PCA与SVD作为线性方法,受到广泛的应用,还有基于非线性的方法比如流形学习等。降维与聚类算法结合最好的莫过是谱聚类(先将数据转换成邻接矩阵,再转换成Laplacian矩阵,再对Laplacian矩阵进行特征分解,把最小的K个特征向量排列在一起作为特征,然后适用k-means聚类)。

End.

作者:求知鸟

来源:知乎


http://chatgpt.dhexx.cn/article/kHRWCDVq.shtml

相关文章

Python 实操案例:一文详解10种聚类算法

聚类或聚类分析是无监督学习问题。它通常被用作数据分析技术&#xff0c;用于发现数据中的有趣模式&#xff0c;例如基于其行为的客户群。有许多聚类算法可供选择&#xff0c;对于所有情况&#xff0c;没有单一的最佳聚类算法。相反&#xff0c;最好探索一系列聚类算法以及每种…

SPSS中系统聚类操作案例

示例&#xff1a; 一啤酒生产商想了解当前啤酒市场情况&#xff0c;并判断时下最受欢迎的啤酒品牌&#xff0c;收集了多种啤酒在售价、热量、钠含量、酒精含量等方面的数据。运用系统聚类法对各项数据进行分析&#xff0c;并给出&#xff1a; &#xff08;1&#xff09;所有样…

一篇文章透彻解读聚类分析及案例实操

1 聚类分析介绍 1.1 基本概念 聚类就是一种寻找数据之间一种内在结构的技术。聚类把全体数据实例组织成一些相似组&#xff0c;而这些相似组被称作聚类。处于相同聚类中的数据实例彼此相同&#xff0c;处于不同聚类中的实例彼此不同。聚类技术通常又被称为无监督学习&#xff…

暗光增强论文“Kindling the Darkness: A Practical Low-light Image Enhancer”

暗光增强论文“Kindling the Darkness:A Practical Low-light Image Enhancer” 还是retinex-based的思想&#xff0c;将图像调节分解为2个部分&#xff1a;一个部分是负责光照的调节&#xff0c;一份部分是负责退化的去除。在这样的方法下&#xff0c;最原始的空间是被分成两…

NFC学习笔记(2)——NFC基础知识

书接上文 在等待PN532板子到货的同时&#xff0c;需要了解一些NFC的知识。 NFC卡分为5类 * I 型卡&#xff08;不支持防冲突&#xff09; * II 型卡 Mifare Ultralight卡 * III 型卡 Sony FeliCa卡 * IV 型卡 NXP DESFire卡 * V 型卡 NXP Mifare Classic卡 平时最常使…

Low-Light Image Enhancement with Normalizing Flow

基础理论知识点&#xff1a; 李宏毅flow-model: 参考博客、flow-model视频 Flow-model参考博客 3 Methodology 在本节中&#xff0c;首先介绍以往基于像素级重建损失的微光增强方法的局限性。然后&#xff0c;介绍了图2中我们的框架的总体范式。最后&#xff0c;我们提出的框架…

Ultra Edit使用技巧

Ultra Edit使用技巧 1.去掉横向滚动条(自动换行) 在菜单栏选择“高级->配置”&#xff0c;进入如下界面。然后在“编辑器”选项的“自动换行”界面里&#xff0c;选择“默认为每个文件启用自动换行”。 2.列编辑模式 按“ALT c”组合键可进入列编辑模式&#xff0c;可以按…

HighlightingSystem插件使用(边缘发光)

插件链接: http://pan.baidu.com/s/1dFwkaTr 密码: nw2c 导入Unity里面可能会报错&#xff0c;不过没关系&#xff0c;直接注释掉就可以了&#xff0c;我用的是Unity5.1的版本 可以看到如下文件夹&#xff0c;HighlighingSystemDemo是一些实例&#xff0c;可以看一下&#xff0…

HighlightPlus物体自发光

只介绍常用的几个参数与使用&#xff1a;

Deep Retinex Decomposition for Low-Light Enhancement

参考 Deep Retinex Decomposition for Low-Light Enhancement - 云社区 - 腾讯云 目录 摘要 1、简介 2、弱光增强的视黄素网 2.1、数据驱动的图像分解 2.2、支持结构平滑损失 2.3、多尺度照明调整 2.4、反射上的去噪 3、数据集 3.1、真实场景中捕获的数据集 3.2、从…

霓虹灯(light)

【题目描述】 小石家旁边有一个大型商场&#xff0c;晚上会有不停变换的霓虹灯&#xff0c;各种各样的颜色非 常漂亮&#xff0c;小石每天晚上都喜欢站在窗口看不停变换的霓虹灯。这个商场的霓虹灯 在每个时刻都是同一种颜色。小石每天晚上会在商场开始亮灯时就站在窗口观看。 …

ultralight搭建/运行/打包

0、ultralight的github更新 截至2023年3月17日&#xff0c;ultralight的github仓库最近的提交时间为2022年12月10日。 1、ultralight ultralight是使用C或C语言和HTML/JS构建界面&#xff0c;基于WebKit的HTML渲染器。 支持系统&#xff1a;Windows(7、x64)、macOS(Sierra或…

rpi4 实现 qiuqiu - Ultralight-SimplePose

qiuqiu Ultralight-SimplePose&#xff1a;https://github.com/dog-qiuqiu/Ultralight-SimplePose &#x1f4bb;​ OS Linux raspberrypi 5.10.60-v8 #1448 SMP PREEMPT Sat Aug 21 10:48:18 BST 2021 aarch64 GNU/Linux⚡️ 安装 protobuf sudo apt-get install autoconf au…

射频识别技术漫谈(16)——Mifare UltraLight

【转自】http://blog.sina.com.cn/s/blog_9ed067ad01010t8k.html Mifare UltraLight又称为MF0&#xff0c;从UltraLight(超轻的)这个名字就可以看出来&#xff0c;它是一个低成本、小容量的卡片。低成本&#xff0c;是指它是目前市场中价格最低的遵守ISO14443A协议的芯片之一&a…

low-light系列:Lightening Network for Low-light Image Enhancement

前言 文章下载链接在后面 这是一篇顶刊TIP2020的文章&#xff0c;重点在于&#xff1a; 文章将暗光增强任务视为一个求residual&#xff08;残差&#xff09;的任务LBP模块的提出&#xff0c;借用了SR&#xff08;超分辨率&#xff09;任务中的back-projection思想可调亮度的…

Low-light images enhancement系列:EnlightenGAN:Deep Light Enhancement without Paired Supervision

众所周知&#xff0c;在暗光增强任务中&#xff0c;要获取到适合的成对的暗光/正常曝光训练图像是非常困难的&#xff0c;甚至是不存在唯一的定义良好的正常曝光ground truth图片。如果用正常曝光的图像去合成带噪点的暗光图像作为训练集&#xff0c;很可能导致最终应用在真实世…

RC522读取NFC Forum Type2 Tag流程及代码解析——Mifare Ultralight卡片读取(采用PHY6212平台,可移植)

RC522作为一款NFC读写芯片&#xff0c;性价比还是很高的&#xff0c;因为在项目里需要采用NFC OOB配对&#xff0c;所以需要读取配对方模拟的NFC卡片信息 读取对象采用NRF52832&#xff0c;使用其NFC功能模拟type2 tag&#xff0c;但是读取方式和M1卡不一样&#xff0c;踩了不…

Lighting - 光的亮度衰减

一些零零碎碎的笔记归档&#xff1b; 光的亮度衰减&#xff1a; 在物理正确的情况下&#xff0c;光的衰减遵循反比例平方衰减&#xff1b;因为光在传播过程中如下图&#xff1a; 随着距离的增加&#xff0c;单位平面上所接受的光照强度与距离的计算关系&#xff1b; 公式可简单…

PFLD+GhostNet+MobileOne=PFLD_GhostOne,重参数化让PFLD重生,精度提升超过4%,速度提升超过55%,代码已开源

在两年前&#xff0c;我曾经分享过利用GhostNet对PFLD进行优化的文章——《人脸关键点检测算法PFLD的优化实战记录》&#xff0c;那里面介绍了经过各种奇技淫巧&#xff0c;GhostNet确实能够提升PFLD的速度和精度&#xff0c;暂且称呼这个方法为PFLD-GhostNet&#xff0c;而且分…

LightGBM -- Light Gradient Boosting Machine

LightGBM 是微软开源的一个基于决策树和XGBoost的机器学习算法。具有分布式和高效处理大量数据的特点。 更快的训练速度&#xff0c;比XGBoost的准确性更高更低的内存使用率&#xff0c;通过使用直方图算法将连续特征提取为离散特征&#xff0c;实现了惊人的快速训练速度和较低…