聚类
聚类是一种无监督的机器学习任务,它可以自动将数据划分成类cluster。因此聚类分组不需要提前被告知所划分的组是什么样子的。
因为我们甚至不知道我们在寻找什么,所以聚类只是用于发现,而不是预测。
- 本质上是将N个样本,映射到K个簇中
- 每个簇至少有1个样本
- 一个样本只隶属于一个簇
先给定一个初始划分,迭代改变隶属关系。
K-means
流程
-
给定初始中心点
-
每一点和初始中心点计算欧氏距离
-
根据距离划分区间
-
如图划分好区域后,分别计算这三个区域的平均点,这三个均值点作为新的初始点。
均 值 X = ∑ i = 0 n x i 均值X=\sum_{i=0}^{n}x_{i} 均值X=i=0∑nxi
均 值 Y = ∑ i = 0 n y i 均值Y=\sum_{i=0}^{n}y_{i} 均值Y=i=0∑nyi
-
再根据新的中心点,计算欧氏距离,划分区域。
-
再迭代
-
发现已经没有类别的变动了,算法收敛,所以分类结束。
缺点
- 开始中心点随机,随机到同一簇里,会导致问题。最好是初始根据先验知识人为给定。
- K是几?不能确定
K-Mediods
把之前找中心点的求均值改成求中位数
就增加了点抗干扰能力(没啥大用)
二分K-Means
初始中心点选的比较近的,就合在一起。
初始中心点选的比较远的,且划分的数量比较多,就分开。
K-Means++
- 选择初始化簇中心稍远的一点
- 随机选择第一个中心点
- 算每个样本到第一个样本的距离,样本距离可以算成概率,越远被选择为中心点的概率越大。
那K(类别数)应该怎么选呢??
首先来看一下K-means的损失
损失函数是MSE=每个分类区域的MSE加和
每个MSE怎么算呢?
每个区域的MSE=样本点到中心点的距离加和
肘部法:纵轴是损失
找一个点,其损失A-B最大
意义是:上一次的error-下一次的error 最大,就是再增长K,error没有明显变化。
Canopy聚类
- 一次迭代出结果。
- 用来找中心点。
- 不用指定K。
- 一个点可能属于多个类别。
流程:
5. 首先选一个中心点,图中鼠标位置。
6. T1,T2为半径画两个圆。(这是超参数)
7. T2半径里面是属于同一类,且不会被选为中心点。
8. T1半径里面是属于同一类,有可能被选为中心点。
9. T1外面的是不同的类
10. 结束条件是每一个点都被划分到某一类。
作用:
用来获取K
层次聚类
理解起来有点像无监督的决策树
分裂的层次聚类: DIANA
把原始数据集去不断的分裂,然后去计算每个子数据集里面的相似性,然后不断的分裂,把数据集分为很多的类别
凝聚的层次聚类: AGNES
把一个个样本,不断的自底向上的聚类,然后一层一层的来聚,最后聚成一完整的数据集,这种用的更多一些
密度聚类
统计样本周围密度,密度达到阈值就添加到这一簇
DBSCAN
-
Density Based Spatial Clustering of Applications with Noise
-
对象邻域:给定对象在半径内的区域
-
如果给定5为阈值,那么q是7,p是3,那么q是核心对象,那么q圈起来的点是一个类别,且其可以指定一个点去画圈,看是否能发展为核心对象。
-
而p是在q这个范围(制定一个半径)内的,那么说q到p是核心密度可达
-
-
q密度可达p1,p1密度可达p,那么q到p是密度可达
-
- 从o点能密度可达q,也能密度可达p
- p和q叫密度相连
- 簇就是密度相连的最大的点的集合
- 即最大的密度相连构成的集合就是簇
- 如何一个点不是核心对象,也不能被别的点密度可达,就是噪声
优点
- 聚类一些不规则的样本。
- 不需要知道K,只需要设定半径r和和阈值m。
- 有些点会成为孤岛
谱聚类
没太看懂。。。。。。再补充。。。。。