机器学习面试题中有这么一道题:如果正样本有10000,负样本有1000,该怎么训练? 这个问题属于机器学习样本训练中的样本不均衡问题。经过资料的查找,大概分为如下几类:
1 产生新数据型:过采样小样本(SMOTE),欠采样大样本。
过采样是通过增加样本中小类样本的数据量来实现样本均衡。其中较为简单的方式是直接复制小类样本,形成数量上的均衡。这种方法实现简单,但会由于数据较为单一而容易造成过拟合。 SMOTE过采样算法: 针对少数类样本的xi,求出其k近邻。随机选取k紧邻中一个样本记为xn。生成一个0到1之间的随机数r,然后根据Xnew = xi + r (xn - xi)生成新数据。也可通过经过改进的抽样的方法,在少数类中加入随机噪声等生成数据。
欠采样大样本是通过减少多数类样本的样本数量来实现样本均衡。其中比较简单直接的方法就是随机去掉一些数据来减少多数类样本的规模,但这种方法可能会丢失一些重要的信息。还有一种方法就是,假设少数类样本数量为N,那就将多数类样本分为N个簇,取每个簇的中心点作为多数类的新样本,再加上少数类的所有样本进行训练。这样就可以保证了多数类样本在特征空间的分布特性。
2 对原数据的权值进行改变
通过改变多数类样本和少数类样本数据在训练时的权重来解决样本不均衡的问题,是指在训练分类器时,为少数类样本赋予更大的权值,为多数类样本赋予较小的权值。例如scikit-learn中的SVM算法,也称作penalized-SVM,可以手动设置权重。若选择balanced,则算法会设定样本权重与其对应的样本数量成反比。
3 通过组合集成方法解决
通过训练多个模型的方式解决数据不均衡的问题,是指将多数类数据随机分成少数类数据的量N份,每一份与全部的少数类数据一起训练成为一个分类器,这样反复训练会生成很多的分类器。最后再用组合的方式(bagging或者boosting)对分类器进行组合,得到更好的预测效果。简单来说若是分类问题可采用投票法,预测问题可以采用平均值。这个解决方式需要很强的计算能力以及时间,但效果较好,相当于结合了组合分类器的优势。
4 通过特征选择
在样本数据较为不均衡,某一类别数据较少的情况下,通常会出现特征分布很不均衡的情况。例如文本分类中,有大量的特征可以选择。因此我们可以选择具有显著区分能力的特征进行训练,也能在一定程度上提高模型的泛化效果。
Adaboost是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器)。
Adaboost算法已被证明是一种有效而实用的Boosting算法。该算法是Freund和Schapire于1995年对Boosting算法的改进得到的,其算法原理是通过调整样本权重和弱分类器权值,从训练出的弱分类器中筛选出权值系数最小的弱分类器组合成一个最终强分类器。基于训练集训练弱分类器,每次下一个弱分类器都是在样本的不同权值集上训练获得的。每个样本被分类的难易度决定权重,而分类的难易度是经过前面步骤中的分类器的输出估计得到的。
Adaboost算法在样本训练集使用过程中,对其中的关键分类特征集进行多次挑选,逐步训练分量弱分类器,用适当的阈值选择最佳弱分类器,最后将每次迭代训练选出的最佳弱分类器构建为强分类器。其中,级联分类器的设计模式为在尽量保证感兴趣图像输出率的同时,减少非感兴趣图像的输出率,随着迭代次数不断增加,所有的非感兴趣图像样本都不能通过,而感兴趣样本始终保持尽可能通过为止。
1 先通过对N个训练样本的学习得到第一个弱分类器
2 将分错的样本和其他的新数据一起构成一个新的N个的训练样本,通过对这个样本的学习得到第二个弱分类器
3 将1和2都分错了的样本加上其他的新样本构成另一个新的N个的训练样本,通过对这个样本的学习得到第三个弱分类器
4 最终经过提升的强分类器。即某个数据被分为哪一类要由各分类器权值决定
由Adaboost算法的描述过程可知,该算法在实现过程中根据训练集的大小初始化样本权值,使其满足均匀分布,在后续 *** 作中通过公式来改变和规范化算法迭代后样本的权值。样本被错误分类导致权值增大,反之权值相应减小,这表示被错分的训练样本集包括一个更高的权重。这就会使在下轮时训练样本集更注重于难以识别的样本,针对被错分样本的进一步学习来得到下一个弱分类器,直到样本被正确分类。在达到规定的迭代次数或者预期的误差率时,则强分类器构建完成。
(1)很好的利用了弱分类器进行级联
(2)可以将不同的分类算法作为弱分类器
(3)AdaBoost具有很高的精度
(4)相对于bagging算法和Random Forest算法,AdaBoost充分考虑的每个分类器的权重
(1)AdaBoost迭代次数也就是弱分类器数目不太好设定,可以使用交叉验证来进行确定
(2)数据不平衡导致分类精度下降
(3)训练比较耗时,每次重新选择当前分类器最好切分点
看到这个算法你是不是似曾相识?对,他们都是由多个弱算法组合成一个强算法的原理。印证了“三个臭皮匠赛过诸葛亮”。但是其实他们棣属于不同的算法框架:
1)Bagging + 决策树 = 随机森林
2)AdaBoost + 决策树 = 提升树
那么bagging和boosting分别是什么呢?
Bagging和Boosting都是将已有的分类或回归算法通过一定方式组合起来,形成一个性能更加强大的分类器,更准确的说这是一种分类算法的组装方法。即将弱分类器组装成强分类器的方法。
A)从原始样本集中抽取训练集。每轮从原始样本集中使用Bootstraping的方法抽取n个训练样本(在训练集中,有些样本可能被多次抽取到,而有些样本可能一次都没有被抽中)。共进行k轮抽取,得到k个训练集。(k个训练集之间是相互独立的)
B)每次使用一个训练集得到一个模型,k个训练集共得到k个模型。(注:这里并没有具体的分类算法或回归方法,我们可以根据具体问题采用不同的分类或回归方法,如决策树、感知器等)
C)对分类问题:将上步得到的k个模型采用投票的方式得到分类结果;对回归问题,计算上述模型的均值作为最后的结果。(所有模型的重要性相同)
其主要思想是将弱分类器组装成一个强分类器。在PAC(概率近似正确)学习框架下,则一定可以将弱分类器组装成一个强分类器。关于Boosting的两个核心问题:
通过提高那些在前一轮被弱分类器分错样例的权值,减小前一轮分对样例的权值,来使得分类器对误分的数据有较好的效果。
通过加法模型将弱分类器进行线性组合,比如AdaBoost通过加权多数表决的方式,即增大错误率小的分类器的权值,同时减小错误率较大的分类器的权值。而提升树通过拟合残差的方式逐步减小残差,将每一步生成的模型叠加得到最终模型。
Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。
Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。
Bagging:使用均匀取样,每个样例的权重相等
Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大。
Bagging:所有预测函数的权重相等。
Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重。
Bagging:各个预测函数可以并行生成
Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。
这两种方法都是把若干个分类器整合为一个分类器的方法,只是整合的方式不一样,最终得到不一样的效果,将不同的分类算法套入到此类算法框架中一定程度上会提高了原单一分类器的分类效果,但是也增大了计算量。
SVM核函数的作用
SVM核函数是用来解决数据线性不可分而提出的,把数据从源空间映射到目标空间(线性可分空间)。
SVM中核函数的种类
1、线性核
优点:
方案首选,奥卡姆剃刀定律
简单,可以求解较快一个QP问题
可解释性强:可以轻易知道哪些feature是重要的
限制:只能解决线性可分问题
2、多项式核
基本原理:依靠升维使得原本线性不可分的数据线性可分;
升维的意义:使得原本线性不可分的数据线性可分;
优点:
可解决非线性问题
可通过主观设置幂数来实现总结的预判
缺点:
对于大数量级的幂数,不太适用
比较多的参数要选择
通常只用在已经大概知道一个比较小的幂数的情况
3、高斯核
优点:
可以映射到无限维
决策边界更为多样
只有一个参数,相比多项式核容易选择
缺点:
可解释性差(无限多维的转换,无法算w)
计算速度比较慢(解一个对偶问题)
容易过拟合(参数选不好时容易overfitting)
4、Sigmoid核
采用Sigmoid函数作为核函数时,支持向量机实现的就是一种多层感知器神经网络,应用SVM方法,隐含层节点数目(它确定神经网络的结构)、隐含层节点对输入节点的权值都是在设计(训练)的过程中自动确定的。而且支持向量机的理论基础决定了它最终求得的是全局最优值而不是局部最小值,也保证了它对于未知样本的良好泛化能力而不会出现过学习现象。
在实战中更多的是:
特征维数高选择线性核
样本数量可观、特征少选择高斯核(非线性核)
样本数量非常多选择线性核(避免造成庞大的计算量)
SVM的优缺点
1、SVM算法对大规模训练样本难以实施
SVM的空间消耗主要是存储训练样本和核矩阵,由于SVM是借助二次规划来求解支持向量,而求解二次规划将涉及m阶矩阵的计算(m为样本的个数),当m数目很大时该矩阵的存储和计算将耗费大量的机器内存和运算时间。针对以上问题的主要改进有有JPlatt的SMO算法、TJoachims的SVM、CJCBurges等的PCGC、张学工的CSVM以及OLMangasarian等的SOR算法。如果数据量很大,SVM的训练时间就会比较长,如垃圾邮件的分类检测,没有使用SVM分类器,而是使用了简单的naive bayes分类器,或者是使用逻辑回归模型分类。
2、用SVM解决多分类问题存在困难
经典的支持向量机算法只给出了二类分类的算法,而在数据挖掘的实际应用中,一般要解决多类的分类问题。可以通过多个二类支持向量机的组合来解决。主要有一对多组合模式、一对一组合模式和SVM决策树;再就是通过构造多个分类器的组合来解决。主要原理是克服SVM固有的缺点,结合其他算法的优势,解决多类问题的分类精度。如:与粗集理论结合,形成一种优势互补的多类问题的组合分类器。
3、对缺失数据敏感,对参数和核函数的选择敏感
支持向量机性能的优劣主要取决于核函数的选取,所以对于一个实际问题而言,如何根据实际的数据模型选择合适的核函数从而构造SVM算法。目前比较成熟的核函数及其参数的选择都是人为的,根据经验来选取的,带有一定的随意性在不同的问题领域,核函数应当具有不同的形式和参数,所以在选取时候应该将领域知识引入进来,但是目前还没有好的方法来解决核函数的选取问题。
训练系统总体框架,由“ 训练部分”和 “ 补充部分”构成。依据系统框架,本文的训练系统可分为以下几个模块:
(1)以样本集为输入,在给定的矩形特征原型下,计算并获得矩形特征集;
(2)以特征集为输入,根据给定的弱学习算法,确定闽值,将特征与弱分类器一一对应,获得弱分类器集;
(3)以弱分类器集为输入, 在训练检出率和误判率限制下, 使用A d a B o o s t 算法
挑选最优的弱分类器构成强分类器;
(4)以强分类器集为输入,将其组合为级联分类器;
(5)以非人脸集为输入,组合强分类器为临时的级联分类器,筛选并补充
非人脸样本。
论文:
GoogLeNet/Inception-v1: Going Deeper with Convolutions
BN-Inception/Inception-v2: Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
Inception-v3: Rethinking the Inception Architecture for Computer Vision
Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning
从上图可看到VGG继承了LeNet以及AlexNet的一些框架结构,而GoogLeNet则做了更加大胆的网络结构尝试,虽然深度只有22层,但大小却比AlexNet和VGG小很多,GoogleNet参数为500万个,AlexNet参数个数是GoogleNet的12倍,VGGNet参数又是AlexNet的3倍,因此在内存或计算资源有限时,GoogleNet是比较好的选择;从模型结果来看,GoogLeNet的性能却更加优越。
一般来说, 提升网络性能 最直接的办法就是 增加网络深度和宽度 ,深度指网络层次数量、宽度指神经元数量。但这种方式存在以下问题:
(1)参数太多,如果训练数据集有限,很容易产生过拟合;
(2)网络越大、参数越多,计算复杂度越大,难以应用;
(3)网络越深,容易出现梯度弥散问题(梯度越往后穿越容易消失),难以优化模型。
解决这些问题的方法是在增加网络深度和宽度的同时减少参数,为了减少参数,自然就想到将全连接变成稀疏连接。但是在实现上,全连接变成稀疏连接后实际计算量并不会有质的提升,因为大部分硬件是针对密集矩阵计算优化的,稀疏矩阵虽然数据量少,但是计算所消耗的时间却很难减少。
大量的文献表明可以将稀疏矩阵聚类为较为密集的子矩阵来提高计算性能,就如人类的大脑是可以看做是神经元的重复堆积,因此,GoogLeNet团队提出了Inception网络结构,就是构造一种“基础神经元”结构,来搭建一个稀疏性、高计算性能的网络结构。
当不知道在卷积神经网络中该使用1 1卷积还是3 3的卷积还是5 5的卷积或者是否需要进行pooling *** 作的时候,我们就可以通过inception模块来将所有的 *** 作都做一遍,然后将得到的结果直接concat到一起, 由神经网络来决定是使用哪种方式处理 。
通过设计一个稀疏网络结构,但是能够产生稠密的数据,既能增加神经网络表现,又能保证计算资源的使用效率。谷歌提出了最原始Inception的基本结构:
该结构将CNN中常用的卷积(1x1,3x3,5x5)、池化 *** 作(3x3)堆叠在一起(卷积、池化后的尺寸相同,将通道相加),一方面增加了 网络的宽度 ,另一方面也增加了网络 对尺度的适应性 。
网络卷积层中的网络能够提取输入的每一个细节信息,同时5x5的滤波器也能够覆盖大部分接受层的的输入。还可以进行一个池化 *** 作,以减少空间大小,降低过度拟合。在这些层之上,在每一个卷积层后都要做一个ReLU *** 作,以增加网络的非线性特征。
然而这个Inception原始版本,所有的卷积核都在上一层的所有输出上来做,而那个5x5的卷积核所需的 计算量就太大 了,造成了特征图的厚度很大,为了避免这种情况,在3x3前、5x5前、max pooling后分别加上了1x1的卷积核,以起到了降低特征图厚度的作用,这也就形成了Inception v1的网络结构,如下图所示:
基于Inception构建了GoogLeNet的网络结构如下(共22层):
对上图说明如下:
(1)GoogLeNet采用了模块化的结构(Inception结构),方便增添和修改;
(2)网络最后采用了average pooling(平均池化)来代替全连接层,该想法来自NIN(Network in Network),事实证明这样可以将准确率提高06%。但是,实际在最后还是加了一个全连接层,主要是为了方便对输出进行灵活调整;
(3)虽然移除了全连接,但是网络中依然使用了Dropout ;
(4)为了避免梯度消失,网络额外增加了2个 辅助的Loss 用于向前传导梯度(辅助分类器,实际上是 “深度监督” 的策略。)。辅助分类器是将中间某一层的输出用作分类,并按一个较小的权重(03)加到最终分类结果中,这样相当于做了模型融合,同时给网络增加了反向传播的梯度信号,也提供了额外的正则化,对于整个网络的训练很有裨益。而在实际测试的时候,这两个额外的softmax会被去掉。
GoogLeNet的网络结构图细节如下:
注:上表中的“#3x3 reduce”,“#5x5 reduce”表示在3x3,5x5卷积 *** 作之前使用了1x1卷积的数量。
在V1的基础上做了两点改进:
Inception V2网络结构图细节如下:
与Inception V1有以下几点改变
[1] - 5x5 卷积层被替换为两个连续的 3x3 卷积层 网络的最大深度增加 9 个权重层 参数量增加了大约 25%,计算量增加了大约 30%
[2] - 28x28 的 Inception 模块的数量由 2 增加到了 3
[3] - Inception 模块,Ave 和 Max Pooling 层均有用到 参考表格
[4] - 两个 Inception 模块间不再使用 pooling 层;而在模块 3c 和 4e 中的 concatenation 前采用了 stride-2 conv/pooling 层
[5] - 网络结构的第一个卷积层采用了深度乘子为 8 的可分离卷积(separable convolution with depth multiplier 8),减少了计算量,但训练时增加了内存消耗
V2 V3实际上被作者放在了一篇paper里所以也没必要分得特别细。
1 分解卷积核尺寸
分解为对称的小的卷积核
2个33代替1个55 减少28%的计算量。
第一个33后接线性激活会不会比ReLU更好?(因为55是线性 *** 作,而2个33去代替的话全程应当是线性 *** 作)
实验结果表明relu更优,作者猜测是因为网络能够学习这种空间变化的增强(实验证明这是数据增强)
分解为不对称的卷积核
3 3卷积分解2个2 2节省11%计算量,而分解成1 3和3 1节省33%
理论上,任何卷积都能分解成不对称卷积,但实验发现,在低层次效果不好,在12到20层加较好。
2 辅助分类器
在第一篇论文的时候作者认为使用2个 辅助分类器,可以:
Lee等人 认为辅助分类器有助于更稳定的训练和better收敛。
但是在V3里作者又重新探讨了辅助分类器的作用:
作者认为辅助分类器的作用是正则化。作者假设:如果辅助分类器进行BN或Dropout,网络的主分类器的性能会更好。
3 改变降低特征图尺寸的方式
一般情况下,如果想让图像缩小,可以有如下两种方式:
先池化再作Inception卷积,或者先作Inception卷积再作池化。但是方法一(左图)先作pooling(池化)会导致特征表示遇到瓶颈(特征缺失),方法二(右图)是正常的缩小,但计算量很大。为了同时保持特征表示且降低计算量,将网络结构改为下图,使用两个并行化的模块来降低计算量(卷积、池化并行执行,再进行合并)
注:上表中的Figure 5指没有进化的Inception,Figure 6是指小卷积版的Inception(用3x3卷积核代替5x5卷积核),Figure 7是指不对称版的Inception(用1xn、nx1卷积核代替nxn卷积核)。
组合3个改进的Inception模块,最终的Inception-v3网络如下图12所示,较早的层采用模块A,中间层采用模块B,而后面层采用模块C
Inception-v3也像GoogLeNet那样使用了深度监督,即中间层引入loss。另外一点是Inception-v3采用了一种Label Smoothing技术来正则化模型,提升泛化能力。其主要理念是防止最大的logit远大于其它logits,因为可能会导致过拟合。
Inception-v4是对原来的版本进行了梳理。
此篇文章还提出了Inception-ResNet(在Inception模块中引入ResNet的残差结构,它共有两个版本),Inception-ResNet-v1对标Inception-v3,两者计算复杂度类似,而Inception-ResNet-v2对标Inception-v4,两者计算复杂度类似。
我认为Inception-ResNet的模块太复杂(多样化)了,没必要看的很细,这里就只贴结构图了。
Inception-ResNet-v1的Inception模块如图16所示,与原始Inception模块对比,增加shortcut结构,而且在add之前使用了线性的1x1卷积对齐维度。对于Inception-ResNet-v2模型,与v1比较类似,只是参数设置不同
小结
从最初的GoogLeNet,到最新的Inception-ResNet,Inception网络在不断的迭代中越来越好,相比其它模型,Inception网络相对来说更复杂一些,主要在于模块比较复杂,而且采用的模块也是多样化。未来的话,可能需要AutoML来设计更好的模块结构。
参考链接:
大话CNN经典模型:GoogLeNet(从Inception v1到v4的演进)
深入浅出——网络模型中Inceptionv1到 v4 的作用与结构全解析
[论文笔记] Inception V1-V4 系列以及 Xception
网络结构之 Inception V2
如果训练集很小,那么高偏差/低方差分类器(如朴素贝叶斯分类器)要优于低偏差/高方差分类器(如k近邻分类器),因为后者容易过拟合。然而,随着训练集的增大,低偏差/高方差分类器将开始胜出(它们具有较低的渐近误差),因为高偏差分类器不足以提供准确的模型。
你也可以认为这是生成模型与判别模型的区别。
一些特定算法的优点
朴素贝叶斯的优点:超级简单,你只是在做一串计算。如果朴素贝叶斯(NB)条件独立性假设成立,相比于逻辑回归这类的判别模型,朴素贝叶斯分类器将收敛得更快,所以你只需要较小的训练集。而且,即使NB假设不成立,朴素贝叶斯分类器在实践方面仍然表现很好。如果想得到简单快捷的执行效果,这将是个好的选择。它的主要缺点是,不能学习特征之间的相互作用(比如,它不能学习出:虽然你喜欢布拉德·皮特和汤姆·克鲁斯的**,但却不喜欢他们一起合作的**)。
逻辑回归的优点:有许多正则化模型的方法,你不需要像在朴素贝叶斯分类器中那样担心特征间的相互关联性。与决策树和支撑向量机不同,你还可以有一个很好的概率解释,并能容易地更新模型来吸收新数据(使用一个在线梯度下降方法)。如果你想要一个概率框架(比如,简单地调整分类阈值,说出什么时候是不太确定的,或者获得置信区间),或你期望未来接收更多想要快速并入模型中的训练数据,就选择逻辑回归。
决策树的优点:易于说明和解释(对某些人来说—我不确定自己是否属于这个阵营)。它们可以很容易地处理特征间的相互作用,并且是非参数化的,所以你不用担心异常值或者数据是否线性可分(比如,决策树可以很容易地某特征x的低端是类A,中间是类B,然后高端又是类A的情况)。一个缺点是,不支持在线学习,所以当有新样本时,你将不得不重建决策树。另一个缺点是,容易过拟合,但这也正是诸如随机森林(或提高树)之类的集成方法的切入点。另外,随机森林往往是很多分类问题的赢家(我相信通常略优于支持向量机),它们快速并且可扩展,同时你不须担心要像支持向量机那样调一堆参数,所以它们最近似乎相当受欢迎。
SVMs的优点:高准确率,为过拟合提供了好的理论保证,并且即使你的数据在基础特征空间线性不可分,只要选定一个恰当的核函数,它们仍然能够取得很好的分类效果。它们在超高维空间是常态的文本分类问题中尤其受欢迎。然而,它们内存消耗大,难于解释,运行和调参也有些烦人,因此,我认为随机森林正渐渐开始偷走它的“王冠”。
然而…
尽管如此,回忆一下,更好的数据往往打败更好的算法,设计好的特征大有裨益。并且,如果你有一个庞大数据集,这时你使用哪种分类算法在分类性能方面可能并不要紧(所以,要基于速度和易用性选择算法)。
重申我上面说的,如果你真的关心准确率,一定要尝试各种各样的分类器,并通过交叉验证选择最好的一个。或者,从Netflix Prize(和Middle Earth)中吸取教训,只使用了一个集成方法进行选择。
通过多分类器结合的方法提高分类精度的程度依赖于各分类器分类表现的独立性,当分类器用独立的特征集训练或用独立的训练数据训练时,分类器之间被认为是独立的(Xu et al,1992)。可以预见,当用多源遥感数据进行分类或用完全不同的特征(如光谱特征和各种纹理特征)参与训练分类器时,分类器具有很高的独立性;对于一般的多光谱数据而言(如Landsat TM数据),如何通过不同波段结合,既保证单个分类器一定的分类精度,又使各种波段结合方式下的特征具有较高独立性,并不是一件容易的事。
下面利用美国Lanier湖区的Landsat TM数据土地覆盖分类为例,比较抽象级的多分类器结合方法和测量级的多分类器结合方法。
一、抽象级的投票多分类器结合实验
在抽象级的投票方法进行多分类器结合分类时,参数α的选取对分类精度有很大影响。α越大,分类精度越高,但同时分类的拒绝率也越高,即更多的像元被判别为未知像元。为便于比较,我们在投票决策过程中强制将每个像元分类到已知类别,也就是说,不设定α,而将像元分类为票数最多的类别。
参与分类器结合的各分类器包括最大似然分类器(MLC),最小距离分类器(MinD)、K-NN分类器,马氏距离分类器(MaD)和多层感知器神经网络分类器(MLP)。
1相同特征集训练的多分类器抽象级结合
相同特征集训练的多分类器抽象级结合方式如图5-3所示。
图5-3 相同特征集的抽象级多分类器结合示意图
图5-3中B1,B2,…B5 表示 Landsat TM 多光谱遥感数据中的波段 1 至波段5。图5-4为参与投票的各分类器的分类结果图。表5-2是根据各分类器分类结果的误差矩阵计算的总体分类精度,生产者精度,用户精度以及条件 Kappa系数。本文第二章详细介绍了基于误差矩阵的各精度指标计算方法。可以看出,虽然各分类器的总体精度差别不大,但对各个类别的分类精度差别很大,特别是农地与草地、针叶林与阔叶林,以及城镇与裸地、裸地与云的区分方面。无论是生产者精度,用户精度、还是条件Kappa系数,每个分类器对不同类别的分类精度差别都很大。每一类别分类精度最高的分类器各不相同。
图5-5是由图5-3 所示的分类器结合方式,用相同的特征训练各分类器,用投票法进行抽象级的分类器结合生成的分类结果。表5-3是用相同特征训练的分类器在抽象级结合后的分类精度。与表5-2 中的结果比较可以看出,将多分类器结合后,对于单个类别的分类精度,无论是生产者精度、用户精度还是条件Kappa系数,都不会高于单个分类器分类精度中的最高精度,但多分类器结合后的总体分类精度和Kappa系数都高于任何单个分类器的总体分类精度和Kappa系数。总体精度比单个分类器提高 6%~9%,Kappa 系数提高 7%~10%。
图5-4 各分类器的分类结果
表5-2 分类器系统中各分类器的分类精度
图5-5 相同特征训练的多分类器抽象级结合分类结果
表5-3 相同特征训练的多分类器抽象级结合分类结果精度评价
2不同特征集训练的多分类器抽象级结合
在多分类器结合过程中,一般总希望参与结合的各分类器之间具有独立性。理论上,对于两个类别分类的情况,假设有奇数个分类器且分类精度相同,则将这奇数个分类器在抽象级结合后总的分类精度服从一个二项式分布,分类器越多,分类精度越高。这时当单个分类器精度高于50%时,单个分类器之间独立可得到更高的结合后的分类精度(Kuncheva et al,2000)。Kuncheva(2000)的实验研究表明相互不独立的多分类器结合仍然可以显著提高分类精度。
独立的分类器一般是指由独立的特征训练的分类器。因此分类器的独立性的评价常常是对分类器训练特征之间独立性的评价。对于多光谱遥感数据分类来说,不同的波段组合形成不同的训练特征,因此希望不同的波段组合形成的特征之间具有独立性。
分类器之间的独立性一般是指由独立的特征训练的分类器。因此分类器的独立性的评价常常是对分类器训练特征之间独立性的评价。对于多光谱遥感数据分类来说,不同的波段组合形成不同的训练特征,而各特征具有独立性。
我们利用不同的组合分别对最大似然分类器、最小距离分类器、多层感知器神经网络、马氏距离分类器和K-NN分类器进行训练。训练特征的波段组合为 234,345,457 三种组合方式。每个分类器分类结果通过投票决策方法结合得到最后的分类结果。不同特征集训练的多分类器抽象级结合分类过程如图5-6所示。分类结果如图5-7。
图5-6 不同特征集训练的多分类器抽象级结合示意图
表5-4为不同特征集训练的多分类器抽象级结合分类结果的精度统计。与表5-3中相同特征集训练的多分类器抽象级结合分类结果精度对比可以发现,两者的分类精度非常接近,后者的分类精度并没有高于前者,相反略低于前者。造成这种情况的原因大概有两方面:一是 TM图像各波段之间具有较高的相关性,不同的特征(波段组合)如234与345,345与457之间也有较高的相关性,因此各特征之间的独立性不高;二是为了使各分类器训练特征不同而使各特征的波段数减少,导致某些分类器的分类精度降低,因此结合后的总体分类精度虽然高于单个分类器,但并不比用相同特征训练的多分类器结合后的分类精度高。
图5-7 不同特征训练的多分类器抽象级结合分类结果
表5-4 不同特征训练的多分类器抽象级结合分类结果精度评价
二、测量级的多分类器结合实验
测量级的多分类器结合也是多分类器结合的常用方式。测量级的分类器结合方式是根据分类器各输出的一系列说明像元属于各类别的程度测量值(如后验概率),以一定方式结合各分类器,用结合后的测量值作为判别像元类别的依据。很显然,分类器在分类过程中输出的说明像元属于各类别程度的测量值,包括后验概率估计、距离测量等,正是分类不确定性度量的基础。因此,测量级的多分类器结合可以理解为以各单个分类器不确定性为基础的多分类器结合。
本实验中,我们分别用 TM遥感数据的 12345 波段对最大似然分类器、多层感知器神经网络、最小距离、马氏距离四个分类器进行训练并分类。最小距离和马氏距离分类器输出的距离像元到个类别中心的距离测量通过式(5-11)转换为“概率测量”。各分类器的测量值按照式(5-9)中的 Bayesian 平均方法结合并以式(5-10)确定最终的分类结果。图5-8给出了用 Bayesian平均方法进行测量级多分类器结合的过程示意图。图5-9为用测量级的多分类器结合方法分类的 Lanier湖区土地覆被图。表5-5 为 Bayesian平均法测量级多分类器结合分类结果精度统计。可以看出,测量级的多分类器结合的总体分类精度比单个分类器的总体分类精度提高约4%~9%,Kappa系数提高5%~8%;和抽象级的多分类器结合分类精度比较(表5-3,表5-4),测量级的多分类器结合的分类精度略低于抽象级结合的分类精度。
图5-8 Bayesian平均法进行测量级多分类器结合示意图
由于在测量级的多分类器结合分类过程中,分类器的结合是在最大似然分类和多层感知器神经网络分类的后验概率以及最小距离和马氏距离分类的距离测量等基础上进行,而这些测量正是本文第二章中像元尺度分类不确定性表达的基础,因此,在用 Bayesian平均法进行测量级的多分类器结合的过程中,经Bayesian平均后的测量就相当于最大似然分类中的后验概率。这样,就可以用本文第二章中的不确定性指标方便地在像元尺度表达测量级分类器结合分类结果的不确定性。
图5-9 测量级的 Bayesian平均法多分类器结合分类结果
表5-5 Bayesian平均法进行测量级多分类器结合的分类结果精度评价
图5-10和图5-11分别为用 Bayesian 平均法进行测量级的多分类器结合分类后分类结果的概率残差和相对概率熵。可以看出,较大的不确定性主要发生在城镇与开发用地、裸地和云之间,以及草地和农地之间。较小的不确定性主要发生在水体和阔叶林。与图4-4和图4-7 表达的最大似然分类的不确定性比较可以看出,用 Bayesian平均法进行测量级多分类器结合分类的不确定性大于最大似然的分类不确定性。因此,虽然测量级多分类器结合的分类结果用误差矩阵的统计结果评价时,精度比单个分类器分类结果高,但每个像元分类的不确定性却不一定低于每一个单个分类器分类结果的不确定性。这也证实了:基于误差矩阵的方法和基于概率矢量的方法反映不同方面的不确定性信息。将某一像元“分类正确”,并不保证将这个像元分类为该类别的确定性很高;同样,某一像元分类的不确定性很低,也并不保证该像元被“正确分类”。
图5-10 Bayesian平均法测量级多分类器结合分类结果的概率残差
图5-11 Bayesian平均法测量级多分类器结合分类结果的相对概率熵
三、不同分类器结合方法比较
从以上的分类实验可以看出,抽象级的多分类器结合与测量级的多分类器结合方法都能比较显著地提高遥感数据的分类精度,但不同结合方法各有优缺点。
抽象级多分类器结合方法的优点在于对参与结合的分类器的特性没有要求。由于结合是在最终的分类结果基础上进行,因此任何分类器,包括专家系统分类器、语义分类器等都可以参与抽象级的多分类器结合。但是对与抽象级的分类器结合,为保证投票决策过程中不发生两个或多个类别“得票”相等的局面,必须要求有奇数个分类器参与分类器结合。但是,抽象级分类器结合的分类结果的不确定性无法在像元尺度上表达。
相反,测量级的多分类器结合方法的缺点在于参与分类器结合的各分类器在分类过程必须能够进行不确定性的度量(如后验概率),因此像平行六面体分类、专家系统分类器以及各种语义分类器等不能参与测量级的多分类器结合。但测量级的分类器结合对参与结合的分类器的个数没有要求,因为测量多级分类器系统最终的分类决策根据像元属于各类别的程度的测量,而不是将像元分类为某一类别的分类器的个数进行的。测量级多分类器结合进行分类的另一个重要的优点在于其分类结果的不确定性便于在像元尺度上表达。
以上就是关于如何解决样本不均衡的问题全部的内容,包括:如何解决样本不均衡的问题、分类算法 - adaboost、SVM几种核函数的对比分析以及SVM算法的优缺点等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)