原型方法和最近邻 ——统计学习方法 第十三章
——统计学习方法 第十三章)
原型方法和最近邻 ——统计学习方法 第十三章
本博客是一篇读书笔记。笔者一边以原书原文进行记录,一边辅以自己对一些要点的理解。
原型方法
K-均值聚类
K-均之聚类是一种在无类标号数据中发现簇和簇中心的方法。这里的簇可以理解为一群在空间中分布比较密集的点的集合,而簇中心可以理解为点集合的几何中心(以欧几里德距离为衡量标准)。K-均值聚类的大体方法如下:
- 选择期望的簇中心数,比如R
- 给定一个初始簇中心集合,K-均值过程就是通过反复移动簇中心以极小化整个簇内的方差。
- 对每个中心,识别离该中心比离其他中心都近的训练点的子集,言外之意就是挑选距离该中心比较近的一群点作为子集,这个子集为该中心的簇。
- 计算每个簇中数据点的坐标均值(书中称之为特征均值),并且该均值向量成为该簇新的中心。
使用K-均值聚类对有标号数据进行分类:
- 对每个类中的训练数据分别使用K-均值聚类,每个类使用R个原型。这里可以把原型大致理解为中心点。也就是说希望通过K-均值聚类的方法找到每个类中的R个中心。
- 如果一共有K个类,那么就有KR个中心,即KR个原型,给这些原型赋一个标号。
- 将新特征(即测试数据)分到最近原型的类。
缺点: 一些原型(即中心点)很可能比较靠近类的边界,这样会导致靠近边界的点会分类错误。比如A类的原型(即中心点)十分靠近AB两类的交界处,现在有一个属于B类、靠近边界、靠近A类原型的点,那么在分类的时候由于将新特征(即测试数据)分到最近原型的类,从而会导致该点被分到A类。导致这个缺点的原因很明显:在求解每个类的原型时,没有考虑到其他类对这个类原型的影响。
学习向量量化(Learning Vector Quantization, LVQ)
为了避免上述缺陷,需要在原型的求解中加入其他类的影响。其核心思想是训练点吸引正确类的原型,而排斥其他原型。算法过程可以简述为:
- 先用K-均值聚类算法求出各个原型,作为初始原型;
- 有放回地随机抽取训练点,并找到离该训练点最近的原型;
- 若该训练点和原型属于同一类且相距d,则将原型靠近训练点,移动的距离为 ,其中 为学习率,同理若训练点合和原型不属于同一类,则原型远离训练点,移动的距离为 ;
- 不断重复第二步和第三步,随着迭代次数的增加降低学习率,直至为0.
高斯混合
高斯混合模型也可以认为是原型方法。每个簇用高斯密度描述,它具有一个中心和协方差矩阵。由于高斯混合模型是其他章节的重点内容,在这里不详细介绍其EM算法和分类方法。高斯混合模型通常作为一个软聚类方法,而K-均值是硬聚类方法。高斯混合模型的判定边界比K-均值的判定边界更光滑一些,而且效果更好。
K-最近邻分类器
- 思想:给定测试数据 ,寻找距离上与 最近的k个训练点,然后在这k个训练点中使用多类表决分类。
- 首先要对数据进行标准化,使之均值为0,方差为1。
- 1-最近邻分类器中,每一个训练点都相当于一个原型。
- 近似地,1-最近邻分类器的误差永远不会高于贝叶斯误差率的2倍。
- 在K-最近邻分类中,并非k越大,误分类率越低。需要使用客观的、基于数据的方法(如交叉验证)估计调整参数最佳值。
- 不变度量与切距离:对于手写数字识别问题,通过图像像素灰度的欧几里德距离进行度量。但是对于旋转以后的数字,这种度量方法存在很大的弊端。为了解决这一问题,提出了不变度量和切距离这两个概念。不变度量是指两幅图像间的距离取为第一幅图像的任意一个旋转版本和第二幅图像的任意一个旋转版本间的最短欧几里德距离。切距离是指通过原图像的切线逼近图像旋转版本(称之为不变流形)。对于一幅将要分类的查询图像,我们计算他的不变切线,并且在训练集的直线中发现离它最近的直线。对应于这条最近直线的类使我们对查询图像的预测类。其中训练集合包含原图像以及其各种旋转版本图像。
自适应的最近邻方法
DANN
在高维特征空间中执行最近邻分类时,点的最近邻可能非常远,会引起偏倚并降低规则的性能。一般情况下,近邻分类隐含的假设是在邻域中类概率大致是常量,因此简单求平均就能给出较好的估计。此时测试点的邻域可以认为是一个圆。但是对于类概率在某个维度上变化的情况,邻域需要在其他类概率变化不大的方向上延伸。这就是自适应的最近邻方法。
在每个查询点(测试点)上形成一个邻域,使用这些点上的类分布决定怎样改变邻域的形状,即调整度量。然后,自适应的度量用于查询点上的最近邻规则。这样,在每个查询点上使用一种潜在不同的度量。
这里介绍Hastie和Tibshirani(1996a)的判别自适应最近邻(DANN)规则。
W是合并的类内协方差矩阵,B是类间协方差矩阵,D是查询点的邻域。W将数据球形化,而B将邻域扩展至椭球。
最近邻的全局维归约
DANN实现了局部维归约,即在每个查询点上分别进行维归约。在许多问题中我们可以使用全局维归约,即在原特征空间中选出的某个优化子空间中应用最近邻规则。(这有些类似于数据降维)
计算考虑
最近邻的一个缺点就是发现最近邻和存储整个训练记得计算负荷。在这本书里有更加详细的介绍,在这里不再赘述。