0. 前言
上一节课中讲讲解了线性模型分类的几个问题,包括随机梯度下降、多分类问题的解决方法等。
但是之前讨论均是在数据线性可分的假设下,假如数据不是线性可分的怎么办?这一节我们讨论非线性问题。
1. 二次假设:Quadratic Hypotheses
- 之前在处理二分问题时,假设函数为:
h(x)=sign(wTx) h ( x ) = s i g n ( w T x )
当属性数量为2时:
h(x)=sign(w0+w1x1+w2x2) h ( x ) = s i g n ( w 0 + w 1 x 1 + w 2 x 2 )
但是当样本不能线性分割,但是可以用一个圆形分类器进行分割时,如图:
此时分类器的假设函数为:
h(x)=sign(w0+w1x21+w2x22) h ( x ) = s i g n ( w 0 + w 1 x 1 2 + w 2 x 2 2 )
我们可以做一个简单的处理,把它转化成线性的形式:另 z1=x21 z 1 = x 1 2 , z2=x22 z 2 = x 2 2 (特征转换)。为了区别开 w w ,我们使用来替代 w w ,最后得到的结果为:
得到的结果即是一个线性分类器了:
也就是说,将左图的分类器转变成右图的分类器。我们只需要找到右图中线性分类器,相应的左图分类器也能知道了。
2. Good Quadratic Hypothesis
上一部分我们定义了什么了二次hypothesis,那么这部分将介绍如何设计一个好的二次hypothesis来达到良好的分类效果。那么目标就是在z域中设计一个最佳的分类线。
其实问题很简单,在对特征进行映射后,x区域的样本在z区域内的相对坐标也就知道了,我们只需要将z区域这些样本进行分好类就可以了。
通过特征映射,可以将之前使用过得一些算法:PLA、Pocket等运用到多维数据上。
3. Computation/Storage Price
- 当存在多个特征时,在特征转换时会存在多个二次项
比如当特征维度d=2,阶数为2时,一共有 (x1,x2,x21,x22,x1x2,1) ( x 1 , x 2 , x 1 2 , x 2 2 , x 1 x 2 , 1 ) 六种。在维度更高时,假设阶数为 Q≤d Q ≤ d ,此时特征数量为:
由上式可以看出,计算z域特征维度个数的时间复杂度是Q的d次方,随着Q和d的增大,计算量会变得很大。同时,空间复杂度也大。也就是说,这种特征变换的一个代价是计算的时间、空间复杂度都比较大。相应的,二次多项式的增多导致z区域中自由度的增大,这导致了VC维的增大,导致模型泛化能力变弱。
像这么一组数据:
右图的分类器结果更加精确,但是我们不能说右图就是好的,因为我们不仅要保证 Ein(g) E i n ( g ) 尽量小,同时还要保证 Ein≈Eout E i n ≈ E o u t 。
那我们什么时候选择合适的z域维度呢?一般情况下,为了尽量减少特征自由度,我们会根据训练样本的分布情况,人为地减少、省略一些项。但是,这种人为地删减特征会带来一些“自我分析”代价,虽然对训练样本分类效果好,但是对训练样本外的样本,不一定效果好。所以,一般情况下,还是要保存所有的多项式特征,避免对训练样本的人为选择。
4. Polynomial Transform Revisited
- 当维度d固定时,不同的阶数Q的结果为:
可以看到随着阶数Q的增多,二次项数量是不断增多的。 - 随着阶数Q的增大,VC维越来越大,模型变得越来越复杂,此时可以不断地减小
Ein
E
i
n
,但是泛化能力通常很差,这并不是我们想要的结果。所以,一般最合适的做法是先从低阶开始,如先选择一阶hypothesis,看看
Ein
E
i
n
是否足够满意,如果
Ein
E
i
n
足够小的话就选择一阶,如果
Ein
E
i
n
不能满意的化,再逐渐增加阶数,直到满足要求为止。也就是说,我们通过不断地增大阶数Q来得到我们需要的结果。
5. 总结
这一节课中我们主要讲解了高阶向低阶转变的线性变换。这样处理能够得到非线性的分类器,从而能把数据分的很好,得到的错误率也会很低。但是这么处理会提升VC维,导致结果泛华能力不足。因此,我们正确的做法是不断的提升数据的阶数(在这一过程中错误率不断地减小),直到达到满意的错误率。