线性判别函数

来源:互联网 发布:图像处理分水岭算法 编辑:程序博客网 时间:2024/04/29 17:14

线性判别函数


线性判别函数用来对线性可分的数据进行分类
判决方程:g(x)=WTx+w0
其中,x为d维列向量
判别规则:
对于二类分类,判决规则为:
g(x)>0判决为类别1:ω1
g(x)<0判决为类别2:ω2
等于0的情况为不可分。


齐次化

为了便于分析,通常将数据进行齐次化,也就是使得判决方程g(x)过原点。
具体操作:

g(x)=aTya=(w0,WT)Ty=(1,x)T

也就是说原来我们需要求解Ww0,现在只需要求解a即可

规范化

由上面判决规则可知:

aTy>0,xω1aTy<0,xω2

如果对于线性可分的数据,如果我们将ω2的数据y变成y,则对于所有的样本都有aTy>0


感知准则函数

将样本齐次化和规范化后我们可将损失函数定义为:

J=yYkaTyYkYk={y|aTy<=0}

这完全符合我们的认知,当错误样本越多J=yYkaTy越大,所以要使得J最小,即达到了我们的目的。

要使得J最小,可采用梯度下降法,对a求偏导得:
Ja=yYky
故更新a=aJa=a+ηkyYky
ηk为步长,应当大于0,一般使得ηk越来越小,其实这也符合我们的认知,在还没接近最小点时应该以较快的速度下降(即η较大),而在接近最小点时应当小心翼翼地接近最小点(即η较小)。但是实际当中η的取值在线性可分的情况时,可以越来越大,并不会影响收敛,但是当在线性不可分时则应该使之越来越小从而使得“坏样本”(线性不可分的点)对a的影响尽可能的小。
具体算法往往有如下几种:
1.可变增量批处理感知准则函数
可变指ηk可变,批处理指在更新a时考虑了多个样本:yYky
image_1b1c3tn371fin156865r1qq85hb9.png-318.3kB

其实对上述算法有个最直接的改进便是在判断错分样本时的标准严格一点,
即:原来是认为aTy<0为错分样本,现在认为aTy<b(b为一个正常数)便认为被错分。
这么做的理由可见如下分析:
当我们在求解a时,实际是寻找一个解向量a能够使得对于所有的样本满足aTy>0,即被限制在所有样本的法向量之间,几何图示为:
image_1b1c4tfji1qfa1ieq1njj11b01j3j13.png-49.1kB
a为解区内的任何一个向量,显然这样a的取值会比较宽泛,如果能够取在靠近解区中心的区域则会更加理想,所以有了采用aTy>b的措施,几何图示为:
image_1b1c57oue1qpr13tb1fhghkk1vva1g.png-220kB
具体算法只需将y错分的准则改为aTy<b即可。
(其实我想不出这线性判别函数和SVM有什么区别,感觉都是一样的思想啊,而为了取得更好的效果都增加了一个裕量b,没准等系统学习了SVM就了解了)
2.固定增量批处理感知准则函数
没什么新的,就是将ηk设为固定即可
3.固定单样本感知准则函数
之前都是先统计出所有错误的样本,而现在是发现一个错误样本便修改一次。
更新a的准则为ak+1=ak+ηkyk,yk为第k个样本
具体算法为:
image_1b1c66cpl118leug1dvsj9a1ll91t.png-112.8kB
要注意的是k是在一直累加的,是会超过样本个数n的,如果yk处的k不加修改直接使用是会报错的,所以对于yk的k要进行mod n处理,即:k=kmodn(k除以n,而后取余数)


MSE算法

之前的感知准则函数都是采用的错误样本来构建的损失函数,而MSE的是采用所有的样本进行构建损失函数。
MSE的思想为:
认为对于所有的样本yi,都会有aTyi=bi>0
Y为样本矩阵,行为样本,列为样本的特征,则可以写成:
image_1b1c6vka1bkcpjj111nf1vgbh2a.png-31.5kB
图中所画绿色圈为一个样本
则对于所有样本会有如下方程:
image_1b1c728n41i5jjkbfqvijd85j2n.png-98.3kB
则我们可以直接解出a=Y1b
但是往往n>>d易导致Y奇异,并且实际操作中不可能找到一个a使得Ya=b,肯定是会有所偏差,故而定义一个误差项e=Yab
,我们优化的目标便是使得误差最小即可。
故可定义损失函数:
J=12|e|2=|Yab|2=12(Yab)T(Yab)
同样求偏导数:
Ja=YT(Yab)
损失函数是一个凸函数(其二阶导大于0),故使的偏导数等于0便可求解a.
a=(YTY)1YTb,其中(YTY)1YTY的伪逆。
但是当y维数很高时,计算违逆的复杂度高,故而可考虑梯度下降法:
ak+1=ak+ηkYT(bYak)
具体算法为:
image_1b1ca06vlq4r1iv91dqi1bu32hp34.png-125.6kB

这里要注意的是,ηk需要让其随着k增大而减小,来保持算法收敛。


Ho-Kashyap算法

在MSE算法时,我们认为b是已知的,是自己设置的一个正数,而Ho-Kashyap算法认为b是未知的,需要自己求出来。
于是损失函数:
J=|Yab|2现在具有a,b两个参数,需要对其分别求偏导:
image_1b1cag42l1f61m4b120l15egp6g3h.png-33kB
a=Y+b,Y+Y
b采用梯度下降进行求解
bk+1=bkηkJb
但是因为b需要一直大于0,于是可以进行如下构造:
image_1b1capjnje5p1vcforpo1dp23u.png-147.3kB
故而始终保证了b大于0.
具体算法为:
image_1b1caro3pk1i1602eaqqjthfb4b.png-174.2kB


简单的实例:

有数据如下:
image_1b1f48vnt1sjb1f7snnp67s1fj89.png-29kB

采用可变增量批处理感知器进行分类:
η=0.5,ηk+1=etak0.0004(10000)a0,迭代次数为24次
得:
image_1b1f4eeg0oh31i5e1qe31unu1kv0m.png-39.9kB
还是采用可变增量批处理感知器进行分类:,只是在判断错误样本时认为aTy<30为错误样本。
迭代次数为:343次
结果会比单纯的可变增量批处理感知器好:
image_1b1f4jni61ai5v32r7j1aog1vmo13.png-36.9kB

采用H-K算法:
η0=1,ηk+1=0.9998etak,a0b1bmin=0.1b
迭代次数为:352次
image_1b1f4rkbpr0apueklbp08124r1g.png-34.7kB
损失函数收敛图为:
image_1b1f4slh0i281p3t1dg56bg1g1k1t.png-40.8kB
坐标轴取短一点则得如下图:
image_1b1f4vho9shp1rja1kr51ura11122a.png-32kB

0 0
原创粉丝点击