赞
踩
聚类就是按照某个特定标准把一个数据集分割成不同的类或簇,使得同一个簇内的数据对象的相似性尽可能大,同时不在同一个簇中的数据对象的差异性也尽可能地大。即聚类后同一类的数据尽可能聚集到一起,不同类数据尽量分离。
主要的聚类算法可以划分为如下几类:划分方法、层次方法、基于密度的方法、基于网格的方法以及基于模型的方法。下面主要对k-means聚类算法、凝聚型层次聚类算法、神经网络聚类算法之SOM,以及模糊聚类的FCM算法通过通用测试数据集进行聚类效果的比较和分析。
通过迭代的方式寻找 k 个簇的划分方案,使得聚类结果对应的代价函数最小。代价函数可以定义为各个样本距离它所属的簇中心点的误差平方和:
J
(
c
,
μ
)
=
∑
i
=
1
N
∣
∣
x
i
−
μ
c
i
∣
∣
2
J(c, \mu)=\sum_{i=1}^{N} || x_i-\mu_{c_i} ||^2
J(c,μ)=∑i=1N∣∣xi−μci∣∣2
其中,
x
i
x_{i}
xi代表第i个样本,
c
i
c_{i}
ci是
x
i
x_{i}
xi所属的簇,
μ
c
i
\mu_{c_{i}}
μci代表簇对应的中心点(即均值),N是样本总数.
采用了贪心策略,通过多次迭代近似求解代价函数。
优点:
缺点:
定义为:
G
a
p
(
k
)
=
E
(
l
o
g
D
k
)
−
l
o
g
D
k
Gap(k)=E(logD_k)-logD_k
Gap(k)=E(logDk)−logDk
其中,
D
k
D_{k}
Dk是第k簇聚类对应的损失值,
E
(
l
o
g
D
k
)
E(logD_{k})
E(logDk)是
l
o
g
D
k
logD_{k}
logDk的期望。
对于上式的 E ( l o g D k ) E(logD_{k}) E(logDk),一般通过蒙特卡洛模拟产生。具体操作是:在样本所在的区域内,按照均匀分布随机产生和原样本数目一样的随机样本,计算这些随机样本的均值,得到一个 D k D_{k} Dk,重复多次即可计算出 E ( l o g D k ) E(logD_{k}) E(logDk) 的近似值。
G a p ( k ) Gap(k) Gap(k) 可以看做是随机样本的损失与实际样本的损失之差,假设实际样本最佳的簇类数目为 k,那么实际样本的损失应该相对较小,随机样本的损失与实际样本的损失的差值相应地达到最大,即最大的 G a p ( k ) Gap(k) Gap(k) 值应该对应最佳的k值。
因此,我们只需要用不同的k值进行多次实验,找出使得 G a p ( k ) Gap(k) Gap(k)最大的k即可。
到现在为止我们可以发现,上面的算法中,k值都是通过人为地凭借经验或者多次实验事先确定下来了的,但是当我们遇到高维度、海量的数据集时,可能就很难估计出准确的k值。那么,有没有办法可以帮助我们自动地确定k值呢?有的,下面来看看另一个算法。
ISODATA,全称是迭代自组织数据分析法,针对传统 k-means 算法需要人为地预先确定 k 值而改进的,主要思想是:
优点:可以自动寻找合适的 k 值
缺点: 除了要设置一个参考聚 类数量 k 0 k_{0} k0 外,还需要指定额外的3个阈值,来约束上述的分裂和合并操作。具体如下:
根据分解的顺序时自下而上还是自上而下,层次聚类算法分为凝聚的层次聚类和分裂的层次聚类
凝聚性层次聚类的策略是先将每个对象作为一个簇,然后合并这些原子簇为越来越大的簇,直到所有对象都在一个簇中,或者某个终结条件被满足。绝大多数层次聚类属于凝聚性层次聚类,只在簇间相似度的定义上有所不同。
流程:以采用最小距离的凝聚层次聚类为例:
假设在输入对象中存在一些拓扑结构或顺序,可以实现从输入空间到输出空间的降维映射,其映射具有拓扑性质,与实际的大脑处理很有理论联系
流程:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。