当前位置: 首页 > article >正文

聚类问题(K-means,系统聚类,SBSCAN算法)

K-means算法

大概的流程

优缺点

步骤

例题:根据消费习惯来对省份进行分类

下面是spss的实操

系统/层次聚类

原理

步骤(以凝聚式聚类为例)

聚类分析需要注意的问题

类型

下面是spss操作

补充:

​编辑

 优缺点

DBSCAN算法

1.原理

算法步骤


K-means算法

一种广泛应用的无监督学习算法,用于将数据集划分为 K 个不同的簇(cluster),使得同一簇内的数据点相似度较高,而不同簇间的数据点相似度较低。

大概的流程

一、指定需要划分的簇[cù]的个数K值)(类的个数)

二、随机地选择K个数据对象作为初始的聚类中心(不一定要是我们的样本点);

三、计算其余的各个数据对象到这K个初始聚类中心的距离,把数据对象划归到距离它最近的那个中心所处在的簇类中:

四、调整新类并且重新计算出新类的中心;

五、循环步骤三和四,看中心是否收敛(不变),如果收敛或达到迭代次数则停止循环:

六、结束

优缺点

优点

简单快速:算法原理简单,易于理解和实现,计算复杂度相对较低,在处理大规模数据集时表现良好。

聚类效果较好:对于球形分布的数据,通常能得到不错的聚类结果,在许多实际应用中能有效地发现数据中的自然分组结构。

缺点

需预先指定簇的数量K :然而,在实际应用中,合适的 K值往往难以确定。不同的  值可能导致不同的聚类结果,选择不当可能无法准确反映数据的内在结构。

对初始簇中心敏感:初始簇中心的选择会影响最终的聚类结果。不同的初始值可能导致算法收敛到不同的局部最优解,从而得到差异较大的聚类结果。

对噪声和离群点敏感:由于簇中心是通过数据点的均值计算得到的,噪声和离群点可能会对簇中心的位置产生较大影响,进而影响聚类效果。

步骤

可以使用K-means++算法对选择初始化聚类中心进行优化:初始化的聚类种的中心之间尽可能的相隔远一点

步骤一:随机选取一个样本作为第一个聚类中心;

步骤二:计算每个样本与当前已有聚类中心的最短距离(即与最近一个聚类中心的距离),这个值越大,表示被选取作为聚类中心的概率较大;最后,用轮盘法(依据概率大小来进行抽选)选出下一个聚类中心;

步骤三:重复步骤二,直到选出K个聚类中心。选出初始点后,就继续使用标准的K-means算法了

类似迪杰斯特拉算法但是是每次大概率选择最远的路,更新最近的.

例题:根据消费习惯来对省份进行分类

省份

食品

衣着

家庭设备

医疗

交通

娱乐

居住

杂项

北京

2959.19

730.79

749.41

513.34

467.87

1141.82

478.42

457.64

天津

2459.77

495.47

697.33

302.87

284.19

735.97

570.84

305.08

河北

1495.63

515.9

362.37

285.32

272.95

540.58

364.91

188.63

山西

1406.33

477.77

290.15

208.57

201.5

414.72

281.84

212.1

内蒙古

1303.97

524.29

254.83

192.17

249.81

463.09

287.87

192.96

辽宁

1730.84

553.9

246.91

279.81

239.18

445.2

330.24

163.86

吉林

1561.86

492.42

200.49

218.36

220.69

459.62

360.48

147.76

黑龙江

1410.11

510.71

211.88

277.11

224.65

376.82

317.61

152.85

上海

3712.31

550.74

893.37

346.93

527

1034.98

720.33

462.03

江苏

2207.58

449.37

572.4

211.92

302.09

585.23

429.77

252.54

浙江

2629.16

557.32

689.73

435.69

514.66

795.87

575.76

323.36

安徽

1844.78

430.29

271.28

126.33

250.56

513.18

314

151.39

福建

2709.46

428.11

334.12

160.77

405.14

461.67

535.13

232.29

江西

1563.78

303.65

233.81

107.9

209.7

393.99

509.39

160.12

山东

1675.75

613.32

550.71

219.79

272.59

599.43

371.62

211.84

河南

1427.65

431.79

288.55

208.14

217

337.76

421.31

165.32

湖南

1942.23

512.27

401.39

206.06

321.29

697.22

492.6

226.45

湖北

1783.43

511.88

282.84

201.01

237.6

617.74

523.52

182.52

广东

3055.17

353.23

564.56

356.27

811.88

873.06

1082.82

420.81

广西

2033.87

300.82

338.65

157.78

329.06

621.74

587.02

218.27

海南

2057.86

186.44

202.72

171.79

329.65

477.17

312.93

279.19

重庆

2303.29

589.99

516.21

236.55

403.92

730.05

438.41

225.8

四川

1974.28

507.76

344.79

203.21

240.24

575.1

430.36

223.46

贵州

1673.82

437.75

461.61

153.32

254.66

445.59

346.11

191.48

云南

2194.25

537.01

369.07

249.54

290.84

561.91

407.7

330.95

西藏

2646.61

839.7

204.44

209.11

379.3

371.04

269.59

389.33

陕西

1472.95

390.89

447.95

259.51

230.61

490.9

469.1

191.34

甘肃

1525.57

472.98

328.9

219.86

206.65

449.69

249.66

228.19

青海

1654.69

437.77

258.78

303

244.93

479.53

288.56

236.51

宁夏

1375.46

480.89

273.84

317.32

251.08

424.75

228.73

195.93

新疆

1608.82

536.05

432.46

235.82

250.28

541.3

344.85

214.4

下面是spss的实操

分析->分类->k均值聚类

下面表示分为两类(这里的k要设置的方便解释)

迭代可以调整最大迭代次数

保存可以保存得出的一些额外的数据

选项

系统/层次聚类

聚类分析中的一种重要方法,它能够构建出一棵具有层次结构的聚类树,展示数据点之间的亲疏关系。

原理

基本思想:系统聚类基于数据点之间的相似性度量,通过不断合并或分裂数据点,形成具有层次结构的聚类结果。它假设数据点之间存在一种自然的层次关系,这种关系可以通过聚类树直观地展现出来。

相似性度量:常用的相似性度量方法包括欧氏距离、曼哈顿距离等用于衡量数值型数据点之间的距离,以此反映它们的相似程度。距离越小,数据点之间的相似性越高。

步骤(以凝聚式聚类为例)

1.初始化:将每个数据点看作一个单独的类,此时类的数量等于数据点的数量。

2.计算类间距离:使用选定的距离度量方法(如欧氏距离),计算每两个类之间的距离。常用的样品之间的距离计算方法有:(xik表示第i个样品的第k个指标)

1)绝对值距离:

2)欧式距离法:

(下面的都不常用)

3)minkowshi距离:

4)chebyshev距离:

5)马氏距离:

比如将高三,8班的30个人,根据他们的6科考试成绩来分类

指标和指标之间的距离:

1)相关系数:

2)夹角余弦:

比如根据高三8班的30个人的成绩,将6门课分为2类

类和类之间的距离:

我们记

1)最短距离法:

取两个类中各取一个点得到的最短距离为类间距离

2)重心法:

两个类之间的距离等于两个类的重心的距离

3.合并类:找到距离最近的两个类,将它们合并为一个新类。

4.更新距离矩阵:由于类的合并,需要重新计算新类与其他类之间的距离,更新距离矩阵。

5.判断终止条件:重复步骤 2 - 4,直到所有数据点都合并到一个类中,或者满足某个终止条件(如达到预设的类的数量)

流程图:

最后会变成如下的图:

(类似霍夫曼树)

聚类分析需要注意的问题

1.对于一个实际问题要根据分类的目的来选取指标,指标选取的不同分类结果一般也不同。

2.样品间距离定义方式的不同,聚类结果一般也不同。

3.聚类方法的不同,聚类结果一般也不同(尤其是样品特别多的时候)。最好能通过各种方法找出其中的共性。

4.要注意指标的量纲,量纲差别太大会导致聚类结果不合理。

5.聚类分析的结果可能不令人满意,因为我们所做的是一个数学的处理,对于结果我们要找到一个合理的解释。

类型

凝聚式聚类:从每个数据点作为一个单独的类开始,然后逐步合并相似的类。具体来说,每次迭代时,算法会计算所有类之间的距离,将距离最近的两个类合并为一个新类,这个过程不断重复,直到所有数据点都合并到一个类中,最终形成一棵聚类树。

分裂式聚类:与凝聚式聚类相反,它从所有数据点都属于一个大类开始,然后逐步将大类分裂成更小的类。每次迭代时,算法会选择一个类进行分裂,使得分裂后的两个子类之间的差异尽可能大,直到每个数据点都成为一个单独的类,同样形成一棵聚类树。

(这里讲解的是凝聚式)

下面是spss操作

分析->分类->系统聚类:

如下的选择:

统计可以不用管,图可以如下的选择,帮助我们更加直观的反应一些数据

方法里面可以选择之前的距离计算的方法:

如果量纲有差异就可以进行标准化,这里都是元,可以不进行标准化

保存可以选择K的数量和解的范围

得出的谱系图

那么我们就可以根据这个图来选择这个K的值(可以自己根据图区估计)

也可以根据下面的肘部法则来确定最优的k

各个类畸变程度之和:各个类的畸变程度等于该类重心与其内部成员位置距离的平方和;假设一共将n个样本划分到K个类中(K≤n-1,即至少有一类中有两个元素)

在部分多元统计教材中,J又被称为聚合系数。聚合系数折线图:横坐标为聚类的类别数K,纵坐标为聚合系数J

根据下面的表格来画出肘部图

复制到excel中,插入图表

根据k=5的时候,下降的趋势缓和,K<5畸变程度较大(k==3也可以解释)

下面我们就按照K=3去分类

生成如下的结果:

北京

1

天津

1

河北

2

山西

2

内蒙古

2

辽宁

2

吉林

2

黑龙江

2

上海

3

江苏

2

浙江

1

安徽

2

福建

1

江西

2

山东

2

河南

2

湖南

2

湖北

2

广东

3

广西

2

海南

2

重庆

2

四川

2

贵州

2

云南

2

西藏

1

陕西

2

甘肃

2

青海

2

宁夏

2

新疆

2

补充:

图表的绘制:

图表->图表构建器->加入x和y,根据分出来的类分色,将省份作为标签

 优缺点

优点:

不需要预先指定聚类数量:与 K - means 聚类不同,系统聚类不需要事先确定要划分的类的数量,聚类结果的层次结构可以展示不同粒度下的数据分组情况,用户可以根据实际需求和聚类树的结构来选择合适的聚类数量。

聚类结果展示直观:聚类树能够直观地展示数据点之间的亲疏关系和聚类的层次结构,有助于用户理解数据的内在结构和分布特征。

缺点:

计算复杂度高:每次迭代都需要计算所有类之间的距离,随着数据点数量和类数量的增加,计算量会迅速增大,时间复杂度较高,不适合处理大规模数据集。

一旦合并或分裂不可撤销:在凝聚式聚类中,一旦两个类被合并,后续步骤无法撤销这个操作。如果在某个阶段选择了不恰当的合并,可能会导致最终聚类结果不理想。同样,分裂式聚类中一旦类被分裂,也无法恢复。

DBSCAN算法

基于密度的空间聚类算法,它是一种无监督学习算法,主要用于在具有噪声的数据集中发现任意形状的簇,并识别出数据集中的噪声点。

1.原理

核心概念:

邻域:对于数据集中的一个点p,给定半径r,以点p为中心,r为半径的区域内的所有点构成点p的r-邻域,记为 N r(p)。

核心点:如果点p的r-邻域内包含的点数大于或等于某个阈值 MinPts,则点p被称为核心点。核心点意味着在其周围一定范围内有足够多的数据点,表明该区域具有较高的数据密度。

边界点:如果点q在某个核心点p的-邻域内,但点q的r-邻域内的点数小于 MinPts,则点q是边界点。边界点依赖于核心点来确定其所属的簇。

噪声点:既不是核心点也不是边界点的点被认为是噪声点,这些点通常是孤立的,在其周围没有足够的数据点形成有意义的簇。

密度可达:如果存在一条从核心点p到点q的点链,其中链上的每个点都在其前一个点的r-邻域内,且链上的第一个点是核心点,那么称点q从核心点p密度可达。

密度相连:如果存在一个核心点o,使得点p和点q都从点o密度可达,那么称点p和点q密度相连。

聚类原理:DBSCAN 通过检查数据集中每个点的-邻域来确定该点是核心点、边界点还是噪声点。然后基于核心点的密度可达关系将数据点划分为不同的簇,密度相连的数据点构成一个簇。

算法步骤

1,初始化,确定r和MinPts,两个参数的选择对聚类结果有重要影响,通常需要根据数据的特点和经验进行调整。

2,遍历数据集:

对于数据集中的每个点 p:计算点 p的 r - 邻域 Nr(p),

1)如果领域中的点的数量大于MinPts,那么p就是核心点,创建一个新的簇C,并且将p及其密度可达的所有点加入C中。

2)如果领域中的点的数量小于MinPts,则 p不是核心点。如果 p尚未被分配到任何簇中,则将p标记为噪声点。

3,重复聚类:重复步骤2,知道数据点都被处理完毕。

 优缺点

优点:

能够发现任意形状的簇:不像 K - means 等算法倾向于发现球形的簇,DBSCAN 可以根据数据点的密度分布发现任意形状的簇,适用于各种复杂的数据分布情况。

对噪声点不敏感:可以直接识别并标记出数据集中的噪声点,而 不会将噪声点错误地划分到某个簇中,使得聚类结果更加准确和可靠。

无需预先知道要形成的簇类的数量:与 K - means 等需要预先指定聚类数量的算法不同,DBSCAN 根据数据的密度自动确定簇的数量,减少了用户对聚类数量先验知识的依赖。

缺点:

参数选择困难:r和MinPts 的选择对聚类结果影响很大,但没有通用的方法来确定最优值。不合适的参数可能导致聚类结果不理想,例如将过多的点标记为噪声点,或者将不同的簇合并为一个簇。

计算复杂度较高:在最坏情况下,DBSCAN 的时间复杂度为O(N^2),其中N是数据点的数量。对于大规模数据集,计算量较大,可能需要较长的运行时间。

不适合高维数据:随着数据维度的增加,数据点之间的距离度量变得不太可靠,密度的概念也变得模糊,导致聚类效果下降。这是因为在高维空间中,数据点趋于稀疏,传统的基于距离的密度定义不再有效,即所谓的 “维度灾难” 问题。


http://www.kler.cn/a/516941.html

相关文章:

  • 12、MySQL锁相关知识
  • docker环境搭建,docker拉取mysql,docker制作自定义C++镜像
  • C语言常用知识结构深入学习
  • 编程界“华山论剑”:PHP与Go,谁主沉浮?
  • 常见的加密方式以及自定义加密工具
  • nginx分发请求超时切换服务
  • 构建沉浸式汉语学习环境
  • Neural networks 神经网络
  • 2025春招 SpringCloud 面试题汇总
  • AI Agent:深度解析与未来展望
  • Spring自定义BeanPostProcessor实现bean的代理Java动态代理知识
  • 【JVM】OOM
  • python——Django 框架
  • QT QListWidget控件 全面详解
  • 使用LabVIEW的History功能实现队列数据的读取而不清空
  • 在 VS Code 中使用 TypeScript 进行开发和打包的几种方法
  • Vue.js 渐进式增强:如何逐步为传统项目注入活力
  • 【深度学习】微积分
  • 移动端ui库uv-ui实现弹窗式picker选择控件
  • Node.js NativeAddon 构建工具:node-gyp 安装与配置完全指南
  • 【小游戏篇】三子棋游戏
  • Ubuntu18.04 搭建DHCP服务器
  • 08.七种排序算法实现(C语言)
  • Kafka中bin目录下面kafka-run-class.sh脚本中的JAVA_HOME
  • 浅谈APP之历史股票通过echarts绘图
  • 回归预测 | MATLAB基于TCN-BiGRU时间卷积神经网络结合双向门控循环单元多输入单输出回归预测