这个算法是无监督算法,没有标签。
K-MEANS算法
基本概念
- 要得到蔟的个数,需要指定K值
- 质心:均值,向量各维度取平均值
- 距离的度量:常用欧几里得距离和余弦相似度(先标准化)
- 优化目标如下,
算法流程
对a图中如果是要分成两个蔟,随机选择两个点如图b,以每个点选择距离自己最近为标准进行聚类得到c,计算两个蔟的质心为图d,继续以上操作得到图e、f,一直迭代,直到质心不再变化。
优缺点
优势,简单、快速、适合常规数据集
劣势,K值难确定、复杂度与样本呈线性关系、很难发现任意形状的簇,初始值对结果影响非常大,建议随机做多次取平均。
DBSCAN聚类算法
基本概念(Density-Based Spatial Clustering of Applications with Noise)
- 核心对象:若某个点的密度达到算法设定的阈值则其为核心点。(即r邻域内点的数量不小于minPts)
- 邻域内的距离阈值:设定的半径r
- 直接密度可达:若某点p在点q的r邻域内,且q是核心点则p-q直接密度可达。
- 密度可达:若有一个点的序列\(q_{0}\)、\(q_{1}\)、...\(q_{k}\),对任意\(q_{i}-q_{i-1}\)是直接密度可达的,则称从\(q_{0}\)到\(q_{k}\)密度可达,这实际上是直接密度可达的“传播“。
- 密度相连:若从某核心点p出发,点q和点k都是密度可达的,则称点q和点k是密度相连的。
- 边界点:属于某一个类的非核心点,不能发展下线了。
- 噪声点:不属于任何一个类蔟的点,从任何一个核心点出发都是密度可达的。
A为核心对象;B、C为边界点;N为离群点。
其实还可以通过找离群点,做异常检测任务。
算法流程
以下参数D:输入数据集;参数r:指定半径;MinPts:密度阈值。
标记所有对象为unvisited;
Do
随机选择一个unvisited对象p;
标记p为visited;
If p的r领域内至少有MinPts个对象
创建一个新簇C,并把p添加到C;
令N为p的r领域中的对象集合
For N中每个点p
If p是unvisited;
标记p为visited;
If p的r领域至少有MinPts个对象,把这些对象添加到N;
If p还不是任何簇的成员,把p添加到C;
End For;
输出C;
Else 标记p为噪声;
Until没有标记为unvisited的对象;
参数选择
半径r:可以根据K距离来设定,找突变点K距离,给定数据集P={p(i);i=0,1,...n},计算点p(i)到集合D的子集S中所有点之间的距离,距离按照从小到大的顺序排序,d(k)就被称为k-距离。
MinPts:k-距离中k的值,一般取的小一些,多次尝试。
优缺点
优点:不需要指定簇的个数、可以发现任意形状的簇、擅长找到离群点(检测任务)、两个参数就够了,没有额外的参数。
缺点:高维数据有些困难(可以做降维)、参数难以选择(参数对结果的影响非常大)、SKLearn库上的效率很慢(数据削减策略)
标签:对象,距离,算法,参数,密度,聚类 From: https://www.cnblogs.com/CallMeRoot/p/18038687