聚类是一种无监督的学习,它将相似的对象归到同一个簇中。它有点像全自动分类。聚类方法几乎可以应用于所有对象,簇内的对象越相似,聚类的效果越好。
K-均值聚类算法
基本概念:
簇:假定有一些数据,现在将相似数据归到一起,簇识别会告诉我们这些簇到底都是些什么。聚类与分类的最大不同在于,分类的目标事先已知,而聚类则是类别未知,其产生的结果和分类相同。
K-均值中的K(簇个数)是自己给定的,k是多少就有多少个簇。
质心:均值,即向量各维取平均,即簇中所有点的中心来描述。
距离的度量:常用欧氏距离 (
x
2
+
y
2
)
\sqrt{x^2+y^2} )
x2+y2)和余弦相似度(通过测量两个向量的夹角的余弦值来度量它们之间的相似性),大多情况下都要先标准化
优化目标:
m
i
n
∑
i
=
1
K
∑
x
∈
C
i
d
i
s
t
(
c
i
,
x
)
2
min \sum_{i=1}^{K}\sum_{x\in{Ci}}dist(c_i,x)^2
min∑i=1K∑x∈Cidist(ci,x)2 就是使所有簇里的点到质心的距离加起来最小
工作流程:
- 随机确定k个初始点作为质心
- 然后将数据集中的每个点分配到一个簇中,即为每个点找距其最近的质心
- 然后其分配给该质心所对应的簇
- 然后每个簇的质心更新为该簇所有点的平均值
下面具体来看:
1.根据自己的数据,设K值,现假设K=2
2.K=2,所以随机取两个点作为质心
3.根据那两个质心进行距离计算并划分簇
4.对已经分类了的两个簇进行质心的更新,再重新遍历一遍计算距离
5.更新到再更新他的簇也不再变之后就说明已经分好了
优缺点
优点:简单快速,适合常规数据集
缺点:
- K值难确定,不好调参
- 复杂度与样本成线性关系,在大规模数据集上收敛较慢。
- 可能收敛到局部最小值
- 对一些环状簇或者奇形怪状的簇难以分离
适用数据类型:数值型数据。
K-均值聚类的一般流程
(1) 收集数据:使用任意方法。(2) 准备数据:需要数值型数据来计算距离,也可以将标称型数据映射为二值型数据再用于距离计算。
(3) 分析数据:使用任意方法。
(4) 训练算法:不适用于无监督学习,即无监督学习没有训练过程。
(5) 测试算法:应用聚类算法、观察结果。可以使用量化的误差指标如误差平方和(后面 会介绍)来评价算法的结果。
(6) 使用算法:可以用于所希望的任何应用。通常情况下,簇质心可以代表整个簇的数据 来做出决策。
DBSCAN聚类( Density-Based Spatial Clustering of Applications with Noise)
DBSCAN 的主要优点是它不需要用户先验地设置簇K的个数,可以划分具有复杂形状的簇,还可以找出不属于任何簇的点。DBSCAN 比凝聚聚类和 k 均值稍慢,但仍可以扩展到相对较大的数据集。
原理思想
识别特征空间的“拥挤”区域中的点,在这些区域中许多数据点靠近在一起。这些区域被称为特征空间中的密集区域。
思想是,簇形成数据的密集区域,并由相对较空的区域分隔开。
基本概念
核心样本:在密集区域内的点被称为核心样本(或核心对象,核心点)。
ϵ-邻域的距离阈值:设定的半径r
直接密度可达:若某点b在点q的 r 邻域内,且a是核心点则p-q直接密度可达。
密度可达:若有一个点的序列q0、q1、…qk,对任意qi-qi-1是直接密度可达的,则称从q0到qk密度可达,这实际上是直接密度可达的“传播”。
此图a,b密度可达
密度相连:若从某核心点p出发,点q和点k都是密度可达的,则称点q和点k是密度相连的。
边界点:属于某一个类的非核心点,不能发展下线了
噪声点:不属于任何一个类簇的点,从任何一个核心点出发都是密度不可达的
如图。A是核心对象,A1,A2,A3在A这个圈内,即A123是A的下线,A123又会以自己为核心点画圈。往下类似,直到遇到B,C这种下线,他们再画圈,其圈内没有其他下线了,就叫做边界点。N是所有的核心点画的圈都圈不到的一个点,所以N是离群点,也叫噪声点。
工作流程
参数选择:
半径ϵ:可以根据K距离来设定:找突变点
K距离:给定数据集P={p(i); i=0,1,…n},计算点P(i)到集合D的子集S中所有点 之间的距离,距离按照从小到大的顺序排序,d(k)就被称为k-距离。
点的个数MinPts: k-距离中k的值,一般取的小一些,多次尝试
优缺点
优点:
- 不需要指定簇个数
- 可以发现任意形状的簇
- 擅长找到离群点(检测任务) 两个参数就够了
缺点:
- 高维数据有些困难(可以做降维)
- 参数难以选择(参数对结果的影响非常大)
- Sklearn中效率很慢(数据削减策略)
很牛的一个聚类可视化网站可以自己玩玩
https://www.naftaliharris.com/blog/visualizing-dbscan- clustering/