一.K-MEANS算法
(一)基本概念
无监督问题,不需要标签
难点:如何评估聚类结果,如何调参(也由于不能评估结果导致)
k-means
- 要得到簇的个数,需要指定K值
- 质心:均值,即向量各维取平均即可
- 距离的度量:常用欧几里得距离和余弦相似度(先标准化)
- 优化目标:(k表示k个聚类中心,ci表示第几个中心,dist表示的是欧几里得距离)
(二)基本过程
算法过程
- 随机选取K个对象作为初始聚类中心
- 将数据样本集合中的样本按照最小距离原则分配到最邻近聚类
- 根据聚类的结果,重新计算K个聚类的中心,并作为新的聚类中心
- 重复步骤2和3,直到聚类中心不再变化
(三)优缺点
优势
- 简单,快速,适合常规数据集
劣势
- K值难确定
- 复杂度与样本呈线性关系
- 很难发现任意形状的簇
简单,快速,适合常规数据集
参考:
https://blog.csdn.net/taoyanqi8932/article/details/53727841
k表示k个聚类中心,ci表示第几个中心,dist表示的是欧几里得距离。
二.DBSCAN算法
(一)基本概念
dbscan算法
- 核心对象(A):若某个点的密度达到算法设定的阈值则其为核心点(即r邻域内点的数量不小于minPts)
- 邻域的距离阈值:设定的半径r
- 直接密度可达:若某点p在点q的r邻域内且q是核心点,则p-q是直接密度可达(核心对象,在邻域内)
- 密度可达:若有一个点的序列q0、q1....qk,对任意qi-qi-1是直接密度可达,则称从q0到qk密度可达,这实际是直接密度可达的传播(直接密度可达传播)
- 密度相连:若从某核心点p出发,点q和点k都是密度可达的,则称点q和点k是密度相连
- 边界点(B、C):属于某一个类的非核心点,不能发展下线了
- 噪声点(N):不属于任何一个类簇的点,从任何一个核心点出发都是密度不可达的
(二)基本过程
算法流程:(数据集、半径、密度阈值)
- 标记所有对象都为没有访问过
- 随机选择一个没有访问过的对象p,标记p为已访问过
- 如果p的邻域至少有minpts个对象
- 创建一个新簇c,并把p添加到c中
- 令N为p的领域中的对象集合
- 对于N中每一个点:如果p是没有访问过,标记p为已访问过。且如果p的邻域至少有minpts个对象,把这些对象添加到N;如果p还不是任何簇的成员,把p添加到c
- 否则标记p为噪音
- 直到没有标记为没有访问过的对象
参数选择:
- 半径:可以根据k距离来设定:找突变点K距离
K距离:给定数据集P={p(i); i=0,1,…n},计算点P(i)到集合D的子集S中所有点
之间的距离,距离按照从小到大的顺序排序,d(k)就被称为k-距离。 - minpts:k-距离中k的值,一般取的小一些,多次尝试
(三)优缺点
优势
- 不需要指定簇的个数
- 可以发现任意形状的簇
- 擅长找到离群点
- 只需两个参数
劣势
- 高维数据有些困难(可以做降维)
- 参数难以选择,但对结果的影响非常大
- sklearn中效率很慢(数据削减策略)
三.聚类分析评估方法
(一)轮廓系数
计算样本i到同簇其他样本的平均距离ai。ai 越小,说明样本i越应该被聚类到该簇。将ai 称为样本i的簇内不相似度。
计算样本i到其他某簇Cj 的所有样本的平均距离bij,称为样本i与簇Cj 的不相似度。定义为样本i的簇间不相似度:bi =min{bi1, bi2, ..., bik}
* si接近1,则说明样本i聚类合理
* si接近-1,则说明样本i更应该分类到另外的簇
* 若si 近似为0,则说明样本i在两个簇的边界上。