五、非监督学习

K-means

K-means算法的具体步骤

在这里插入图片描述
首先,给定二维空间上的一些样本点,接下来,初始化K个中心点,并根据中心点的位置计算每个样本所属的簇;然后根据每个簇中的所有点的平均值计算新的中心点位置;在经过n轮的迭代之后,算法基本收敛。

K-means 算法的优缺点

缺点:
受初值和离群点的影响每次的结果不稳定、
结果通常不是全局最优而是局部最优解、
无法很好地解决数据簇分布差别比较大的情况(比如一类是另一类样本数量的100倍)、
不太适用于离散分类等。
优点:
对于大数据集,K均值聚类算法相对是可伸缩和高效的。
它的计算复杂度是O(NKt)接近于线性,其中N是数据对象的数目,K是聚类的簇数,t是迭代的轮数。
尽管算法经常以局部最优结束,但一般情况下达到的局部最优已经可以满足聚类的需求。
调优:
K均值算法的调优一般可以从以下几个角度出发。
(1)数据归一化和离群点处理。
同时,离群点或者少量的噪声数据就会对均 值产生较大的影响,导致中心偏移,因此使用K均值聚类算法之前通常需要对数据做预处理。做归一化处理和统一单位
(2)合理选择K值。
K值的选择是K均值聚类最大的问题之一,这也是K均值聚类算法的主要缺点。K值的选择一般基于经验和多次实验结果。例如采用手肘法,我们可以尝试不同的K值,并将不同K值所对应的损失函数画成折线,横轴为K的取值,纵轴为误差平方和所定义的损失函数。

K-means的改进模型

K-means++

K-means++按照如下的思想选取K个聚类中心。 假设已经选取了n个初始聚类中心(0<n<K),则在选取第n+1个聚类中心时,距离当前n个聚类中心越远的点会有更高的概率被选为第n+1个聚类中心。 第一个聚类中心(n=1)通过随机的方法选取。聚类中心当然是互相离得越远越好。当选择完初始点后,K-means++后续的执行和经典K均值算法相同,这也是对初始值选择进行改进的方法等共同点。

ISODATA

在K均值算法中,聚类个数K的值需要预先人为地确定,并且在整个算法过程中无法更改。而当遇到高维度、海量的数据集时,人们往往很难准确地估计出K的大小。ISODATA算法就是针对这个问题进行了改进,它的思想也很直观。 当属于某个类别的样本数过少时,把该类别去除;当属于某个类别的样本数过多、分散程度较大时,把该类别分为两个子类别。
ISODATA算法是一个比较常见的算法,其缺点是需要指定的参数比较多,不仅仅需要一个参考的聚类数量Ko,还需要制定3个阈值。下面介绍ISODATA算法的各个输入参数。
(1)预期的聚类中心数目Ko。在ISODATA运行过程中聚类中心数可以变化,Ko是一个用户指定的参考值,该算法的聚类中心数目变动范围也由其决定。
(2)每个类所要求的最少样本数目Nmin。如果分裂后会导致某个子类别所包含样本数目小于该阈值,就不会对该类别进行分裂操作。
(3)最大方差Sigma。用于控制某个类别中样本的分散程度。当样本的分散程度超过这个阈值时,且分裂后满足(1),进行分裂操作。
(4)两个聚类中心之间所允许最小距离Dmin。如果两个类靠得非常近(即这两个类别对应聚类中心之间的距离非常小),小于该阈值时,则对这两个类进行合并操作。

K-means算法的收敛性证明

首先,我们需要知道K均值聚类的迭代算法实际上是一种最大期望算法,简称EM算法,EM算法解决的是在概率模型中含有无法观测的隐含变量情况下的参数估计问题。EM算法保证收敛到局部最优的点。

高斯混合模型

高斯混合模型(Gaussian Mixed Model,GMM)也是一种常见的聚类算法, 与K均值算法类似,同样使用了EM算法进行迭代计算。高斯混合模型假设每个簇的数据都是符合高斯分布(又叫正态分布)的,当前数据呈现的分布就是各个簇的高斯分布叠加在一起的结果。 理论上,高斯混合模型可以拟合出任意类型的分布。

高斯混合模型的核心思想

当数据事实上有多个类,或者我们希望将数据划分为一些簇时,可以假设不同簇中的样本各自服从不同的高斯分布,由此得到的聚类算法称为高斯混合模型。 在该假设下,每个单独的分模型都是标准高斯模型,其均值μi和方差Σi是待估计的参数。此外,每个分模型都还有一个参数πi,可以理解为权重或生成数据的概率。高斯混合模型的公式为
在这里插入图片描述
然而,通常我们并不能直接得到高斯混合模型的参数,而是观察到了一系列数据点,给出一个类别的数量K后,希望求得最佳的K个高斯分模型。因此,高斯混合模型的计算,便成了最佳的均值μ,方差Σ、权重π的寻找,可以用上一节已经介绍过的EM算法框架来求解该优化问题。 EM算法是在最大化目标函数时,先固定一个变量使整体函数变为凸优化函数,求导得到最值,然后利用最优参数更新被固定的变量,进入下一个循环。
具体到高斯混合模型的求解,EM算法的迭代过程如下。
首先,初始随机选择各参数的值。然后,重复下述两步,直到收敛。
(1)E步骤。根据当前的参数,计算每个点由某个分模型生成的概率。
(2)M步骤。使用E步骤估计出的概率,来改进每个分模型的均值,方差和权重。
也就是说,我们并不知道最佳的K个高斯分布的各自3个参数,也不知道每个数据点究竟是哪个高斯分布生成的。所以每次循环时,先固定当前的高斯分布不变,获得每个数据点由各个高斯分布生成的概率。然后固定该生成概率不变,根 据数据点和生成概率,获得一个组更佳的高斯分布。循环往复,直到参数的不再变化,或者变化非常小时,便得到了比较合理的一组高斯分布。

高斯混合模型与K均值算法的相同点是,它们都是可用于聚类的算法;都需要指定K值;都是使用EM算法来求解;都往往只能收敛于局部最优。而它相比于K均值算法的优点是,可以给出一个样本属于某类的概率是多少;不仅仅可以用于聚类,还可以用于概率密度的估计;并且可以用于生成新的样本点。

自组织映射神经网络

自组织映射神经网络(Self-Organizing Map,SOM)是无监督学习方法中一类重要方法,可以用作聚类、高维可视化、数据压缩、特征提取等多种用途。
自组织神经网络是对生物神经系统功能的一种人工神经网络模拟。
自组织映射神经网络本质上是一个两层的神经网络,包含输入层和输出层。输入层模拟感知外界输入信息的视网膜,输出层模拟做出响应的大脑皮层。输出层中神经元的个数通常是聚类的个数,代表每一个需要聚成的类。 训练时采用“竞争学习”的方式,每个输入的样例在输出层中找到一个和它最匹配的节点,称为激活节点;紧接着用随机梯度下降法更新激活节点的参数;同时,和激活节点临近的点也根据它们距离激活节点的远近而适当 地更新参数。这种竞争可以通过神经元之间的横向抑制连接(负反馈路径)来实现。自组织映射神经网络的输出层节点是有拓扑关系的。这个拓扑关系依据需求确定,如果想要一维的模型,那么隐藏节点可以是“一维线阵”;如果想要二维的拓扑关系,那么就行成一个“二维平面阵”,如图所示。也有更高维度的拓扑关系的,比如“三维栅格阵”,但并不常见。

在这里插入图片描述
SOM的具体步骤如下:
在这里插入图片描述
在迭代结束之后,每个样本所激活的神经元就是它对应的类别。
自组织映射神经网络具有保序映射的特点,可以将任意维输入模式在输出层映射为一维或者二维图形,并保持拓扑结构不变。这种拓扑映射使得“输出层神经 元的空间位置对应于输入空间的特定域或特征”。由其学习过程可以看出,每个学习权重更新的效果等同于将获胜的神经元及其邻近的权向量wi向输入向量x移动,同时对该过程的迭代进行会使得网络的拓扑有序。
在自组织映射神经网络中,获胜的神经元将使得相关的各权重向更加有利于它竞争的方向调整,即以获胜神经元为中心,对近邻的神经元表现出兴奋性侧反馈,而对远邻的神经元表现出抑制性侧反馈,近邻者互相激励,远邻者相互抑制。近邻和远邻均有一定的范围,对更远邻的神经元则表现弱激励的作用。这种 交互作用的方式以曲线可视化则类似于“墨西哥帽”,如图所示。
在这里插入图片描述
自组织映射神经网络与K均值算法的区别如下。
(1)K均值算法需要事先定下类的个数,也就是K的值。而自组织映射神经网络则不用,隐藏层中的某些节点可以没有任何输入数据属于它,因此聚类结果的实际簇数可能会小于神经元的个数。而K均值算法受K值设定的影响要更大一 些。
(2)K均值算法为每个输入数据找到一个最相似的类后,只更新这个类的参数;自组织映射神经网络则会更新临近的节点。所以,K均值算法受noise data的影 响比较大,而自组织映射神经网络的准确性可能会比K均值算法低(因为也更新了临近节点)。
(3)相比较而言,自组织映射神经网络的可视化比较好,而且具有优雅的拓扑关系图。

怎样设计自组织映射神经网络并设定网络训练参数?

■ 设定输出层神经元的数量
输出层神经元的数量和训练集样本的类别数相关。若不清楚类别数,则尽可能地设定较多的节点数,以便较好地映射样本的拓扑结构,如果分类过细再酌情减少输出节点。这样可能会带来少量从未更新过权值的 “死节点”,但一般可通过 重新初始化权值来解决。
■ 设计输出层节点的排列
输出层的节点排列成哪种形式取决于实际应用的需要,排列形式应尽量直观地反映出实际问题的物理意义。例如,对于一般的分类问题,一个输出节点能代表一个模式类,用一维线阵既结构简单又意义明确;对于颜色空间或者旅行路径 类的问题,二维平面则比较直观。
■ 初始化权值
可以随机初始化,但尽量使权值的初始位置与输入样本的大概分布区域充分重合,避免出现大量的初始“死节点”。一种简单易行的方法是从训练集中随机抽 取m个输入样本作为初始权值。
■ 设计拓扑领域
拓扑领域的设计原则是使领域不断缩小,这样输出平面上相邻神经元对应的 权向量之间既有区别又有相当的相似性,从而保证当获胜节点对某一类模式产生 最大响应时,其领域节点也能产生较大响应。领域的形状可以是正方形、六边形 或者菱形。优势领域的大小用领域的半径表示,通常凭借经验来选择。
■ 设计学习率
学习率是一个递减的函数,可以结合拓扑邻域的更新一起考虑,也可分开考 虑。在训练开始时,学习率可以选取较大的值,之后以较快的速度下降,这样有 利于很快地捕捉到输入向量的大致结构,然后学习率在较小的值上缓降至0值,这 样可以精细地调整权值使之符合输入空间的样本分布结构。

聚类算法的评估

相比于监督学习,非监督学习通常没有标注数据,模型、算法的设计直接影响最终的输出和模型的性能。那么在没有外部标签数据的情况下,应该如何评估两个聚类算法的优劣?
由于数据以及需求的多样性,没有一种算法能够适用于所有的数据类型、数据簇或应用场景,似乎每种情况都可能需要一种不同的评估方法或度量标准。例如,K均值聚类可以用误差平方和来评估,但是基于密度的数据簇可能不是球形, 误差平方和则会失效。在许多情况下,判断聚类算法结果的好坏强烈依赖于主观解释。尽管如此,聚类算法的评估还是必需的,它是聚类分析中十分重要的部分之一。
聚类评估的任务是估计在数据集上进行聚类的可行性,以及聚类方法产生结果的质量。这一过程又分为三个子任务。

估计聚类趋势。

这一步骤是检测数据分布中是否存在非随机的簇结构。如果数据是基本随机的,那么聚类的结果也是毫无意义的。我们可以观察聚类误差是否随聚类类别数量的增加而单调变化,如果数据是基本随机的,即不存在非随机簇结构,那么聚类误差随聚类类别数量增加而变化的幅度应该较不显著,并且也找不到一个合适的K对应数据的真实簇数。 另外,我们也可以应用霍普金斯统计量来判断数据在空间上的随机性。

判定数据簇数。

确定聚类趋势之后,我们需要找到与真实数据分布最为吻合的簇数,据此判定聚类结果的质量。数据簇数的判定方法有很多,例如手肘法和Gap Statistic方法。需要说明的是,用于评估的最佳数据簇数可能与程序输出的簇数是不同的。 例如,有些聚类算法可以自动地确定数据的簇数,但可能与我们通过其他方法确定的最优数据簇数有所差别。

测定聚类质量。

给定预设的簇数,不同的聚类算法将输出不同的结果,如何判定哪个聚类结果的质量更高呢?在无监督的情况下,我们可以通过考察簇的分离情况和簇的紧凑情况来评估聚类的效果。
事实上测量指标可以有很多种,以下列出了几种常用的度量指标。

轮廓系数:

在这里插入图片描述

均方根标准偏差:

在这里插入图片描述

R方(R-Square):

在这里插入图片描述

改进的Hubert统计:

在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值