图像分割-无监督聚类分割

2020-05-23  本文已影响0人  小幸运Q

https://blog.csdn.net/ycy0706/article/details/90439245


(1) kmeans

1.聚类簇数K没有明确的选取准则,但是在实际应用中K一般不会设置很大,可以通过枚举法,比如令K从2到10。其实很多经典方法的参数都没有明确的选取准则,如PCA的主元个数,可以通过多次实验或者采取一些小技巧来选择,一般都会达到很好的效果。

2.从Kmeans算法框架可以看出,该算法的每一次迭代都要遍历所有样本,计算每个样本到所有聚类中心的距离,利用重心调整聚类中心,因此当样本规模非常大时,算法的时间开销是非常大的。

3.Kmeans算法是基于距离的划分方法,只适用于分布为凸形的数据集,不适合聚类非凸形状的类簇

非凸类簇

2.层次聚类

为了不用提前指明k的个数,我们采用从下而上地把小的cluster合并聚集,或者从上而下地将大的cluster进行分割的方法。目前一般用得比较多的是从下而上地聚集。

image.png

层次聚类的缺点是计算量比较大,因为要每次都要计算多个cluster内所有数据点的两两距离。另外,由 于层次聚类使用的是贪心算法,得到的显然只是局域最优,不一定就是全局最优,这可以通过加入随机效应解决。

每个样本点都是一个cluster,通过计算cluster的距离来作大概判断。如果合并的两个小 cluster同属于一个目标cluster,那么它们的距离就不会太大。但当合并出来K个目标cluster后,再进行合并,就是在这K个cluster间进行合并了,这样合并的cluster的距离就会有一个非常明显的突变。

image.png

(1) Self Organizing Maps (SOM) 基于神经网络的聚类算法

本质上是一种只有输入层--隐藏层的神经网络。隐藏层中的一个节点代表一个需要聚成的类。训练时采用“竞争学习”的方式,每个输入的样例在隐藏层中找到一个和它最匹配的节点,称为它的激活节点。输入层神经元个数代表了输入数据的维数(RGB)

image.png

SOM的一个特点是,隐藏层的节点是有拓扑关系的。这个拓扑关系需要我们确定,如果想要一维的模型,那么隐藏节点依次连成一条线;如果想要二维的拓扑关系,那么就行成一个平面

image.png

1) 初始化:每个节点随机初始化自己的参数W={w1,w2...wn}。每个节点的参数个数与Input的维度相同。

竞争(输出)层最少节点数量 =5\sqrt N

2)对于每一个输入数据,找到与它最相配的节点。假设输入时D维的, 即 X={x_i, i=1,...,D},那么判别函数可以为欧几里得距离:(寻找最近的神经元)

d_j(x)=\sum_{i=1}^{n}(x_i-w_{ji})^2, \text{n is dimention}

  1. 找到激活节点I(x)之后,我们也希望更新和它临近的节点。令S_ij表示节点i和j之间的距离,对于I(x)临近的节点(范围大小Nc),分配给它们一个更新权重:(更新邻近神经元的权重)

T_{j,I(x)}=e^{(-S^2_{j,I(x)}/2\sigma^2)}

简单地说,临近的节点根据距离的远近,更新程度要打折扣(远的更新少近的更新多)。

image.png

4)接着就是更新节点的参数了。按照梯度下降法更新:

\Delta w_{ji}=\eta(t)T_{j,I(x)} (t) (x_i-w_{ji})

学习率\eta(t)=\frac{1}{t+1.1},t是迭代次数

迭代,直到收敛。

1)K-means需要事先定下类的个数,也就是K的值。 SOM则不用,隐藏层中的某些节点可以没有任何输入数据属于它。所以,K-Means受初始化的影响要比较大。

2)K-means为每个输入数据找到一个最相似的类后,只更新这个类的参数。SOM则会更新临近的节点。所以K-mean受noise data的影响比较大,SOM的准确性可能会比k-means低(因为也更新了临近节点)。

3) SOM的可视化比较好。优雅的拓扑关系图 。


som.gif image.png

(2) DBSCAN算法

1)DBSCAN算法会以任何尚未访问过的任意起始数据点为核心点,并对该核心点进行扩充。这时我们给定一个半径/距离ε,任何和核心点的距离小于ε的点都是它的相邻点。

2)如果核心点附近有足够数量的点,则开始聚类,且选中的核心点会成为该聚类的第一个点。如果附近的点不够,那算法会把它标记为噪声(之后这个噪声可能会成为簇中的一部分)在这两种情形下,选中的点都会被标记为“已访问”。(抗噪能力很强)

3)一旦聚类开始,核心点的相邻点,或者说以该点出发的所有密度相连的数据点(注意是密度相连)会被划分进同一聚类。然后我们再把这些新点作为核心点,向周围拓展ε,并把符合条件的点继续纳入这个聚类中。

4)重复步骤2和3,直到附近没有可以扩充的数据点为止,即簇的ε邻域内所有点都已被标记为“已访问”。


(3) 高斯混合模型(GMM)

它是多个高斯分布函数的线性组合,理论上可以拟合出任意类型的分布,通常用于解决同一集合下的数据包含多个不同的分布的情况。

我们假设数据点满足不同参数下的高斯分布——比起均值,这是一个限制较少的假设。我们用两个参数来描述聚类的形状:均值和标准差。以二维分布为例,标准差的存在允许聚类的形状可以是任何种类的椭圆形。

如果数据点符合某个高斯分布,那它就会被归类为那个聚类。

1.首先,我们确定聚类的数量(如K-Means),并随机初始化每个聚类的高斯分布参数。

2.根据每个聚类的高斯分布,计算数据点属于特定聚类的概率。如果数据点越接近高斯质心,那它属于该聚类的概率就越高。

3.在这些概率的基础上,我们为高斯分布计算一组新的参数,使聚类内数据点的概率最大化。我们用数据点位置的加权和来计算这些新参数,其中权重就是数据点属于聚类的概率。

GMM有两个关键优势。首先它比K-Means更灵活,由于标准差的引入,最后聚类的形状不再局限于圆形,它还可以是大小形状不一的椭圆形——K均值实际上是GMM的一个特例,其中每个聚类的协方差在所有维上都接近0。其次,权重的引入为同一点属于多个聚类找到了解决方案。如果一个数据点位于两个聚类的重叠区域,那我们就可以简单为它定义一个聚类,或者计算它属于X聚类的百分比是多少,属于Y聚类的百分比是多少。简而言之,GMM支持混合“成员”。

过程
上一篇下一篇

猜你喜欢

热点阅读