聚类

聚类(Clustering)算法是一种无监督的机器学习算法,也就是说,数据是没有标签的,需要算法根据数据本身的特点来将数据分成几个类别(簇)。常见的聚类算法有K-MEANS算法和。

K-MEANS算法

K-MEANS算法首先要指定一个k值,用于确定将数据分成几个簇。
其次,需要确定每个簇的“质心”,所谓质心,就是将该簇中所有数据的各个维度取平均值所得到的数据点。
K-MEANS算法的优化目标是:
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 C_i}dist(C_i,x)^2 mini=1kxCidist(Ci,x)2
其中Ci是第i个质心。也就是说,优化目标是对于每个簇来说,簇中的所有数据点到其质心的距离的平方和最小。

这里“距离”是一个问题,怎样计算两个点之间的距离?以下是一些可能的方法:

欧 式 距 离 : 欧式距离:

其中欧式距离和余弦相似度是比较常用的。

下面我们看一下K-MEANS算法的工作流程。

假定我们要对以下的数据进行聚类。

聚类_第1张图片

第1步:我们指定聚类的k值为2,也就是打算把数据分成2个簇。

然后,我们随机地生成2个质心,如下图:

聚类_第2张图片

第2步:将所有的数据进行聚类,距离哪个质心较近,就属于哪个类,如下图所示:

聚类_第3张图片

第3步:对于每个类,重新计算其质心的位置,如下图:

聚类_第4张图片

第4步:重复上面的第2,3两步,直至所有的数据的类别都不再发生变化。聚类完成。

聚类_第5张图片

聚类_第6张图片

K-MEANS算法的优势:
简单,快速,适合常规数据集

劣势:
1)K值难确定
2)复杂度与样本呈线性关系
3)很难发现任意形状的簇,比如下面的数据集:

聚类_第7张图片

下面是一个关于K-MEANS算法执行过程的可视化展示的网址,共参考:
https://www.naftaliharris.com/blog/visualizing-k-means-clustering/

DBSCAN算法

DBSCAN算法(Density-Based Spatial Clustering of Applications with Noise)有以下的几个基本概念:
1)核心点:若某个点的r邻域内点的数量(称为密度)达到设定的阈值minPts,则称该点为核心点。
2)直接密度可达:若某点q在点p的r邻域内,且p是核心点,则称点p-p直接密度可达。
3)密度可达:若有一个点的序列q0,q1,…qk,对任意的qi-1和qi都是密度可达的,则称q0到qk密度可达,这实际上是直接密度可达的“传播”。
4)边界点:属于某一个类的非核心点,不能发展下线了。
5)噪声点:不属于任何类的点,即从任何一个核心点除法都是密度不可达的。

在下面的图中,A是核心点,B和C是边界点,N是噪声点。

聚类_第8张图片

下面是一个关于DBSCAN算法执行过程的可视化展示的网址,共参考:
https://www.naftaliharris.com/blog/visualizing-dbscan-clustering/

你可能感兴趣的:(聚类)