Noise
这讲主要说资料有noise的状况。
噪声数据是指数据中存在着错误或异常(偏离期望值)的数据
针对银行给顾客信用卡,举几种noise:
(1)noise 在y:
一个顾客本来应该给信用卡,但是没给;
两个相同资料的顾客,一个给了,一个没给;
(2)noise在x:
输入顾客资料时,输错了。
所以,现在的问题就是,在有noise的状况下,VC bound还能不能用?
试想一下,noise到底会影响些什么?
我们前面讲过,f是映射x—>y的关系。如果有noise的话,会怎么样?会影响正确的映射关系。数据是按照f产生的,如(x1,y1),(x2,y2)……没有noise时,按照f,给的x是正确的概率为p(x)=1,产生的y是正确的概率是p(y|x)=1。如果有noise,按照f产生x与y的关系,但是有可能是(x1,y1’)或者是(x1’,y1),当然也有可能是(x1,y1)。总之,给的x是正确的概率会下降p(x)≠1,产生y也正确的概率就会下降,p(y|x)≠1。所以,可以看出,噪声增加了不确定性。有noise让我们感觉像是说“x与y有p的概率是f的关系”。
如:
给顾客资料x之后,输出是+1(o)有0.7的概率,输出-1(x)是0.3的概率。虽然最后还是认为,应该输出+1。但是在没有noise之前,给了顾客资料x之后确定是输出+1,不可能输出-1。所以现在输出-1的0.3机会是因为noise干扰了。
但是noise的干扰是全程的,如果整个机器学习的过程都考虑噪声,产生训练数据的时候,按照p(x)产生x,按照p(y|x)产生y,测试的时候也是这样的方式。f受到干扰,g也受到相同的干扰。在Ein里常使用的点,p(x)很大,那么它在Eout里也肯定有很大的p(x)。所以,VC bound还可以继续使用。这个就好像考试完了以后,全部的同学都减10分一样,不影响排名。因为受干扰,g没有那么对了,但是发现f受到了一样的干扰,也没那么对了,但是它们还是接近的。在有noise的情况下,求的也不是f了,而是p(y|x)目标分布。因为数据是按照f+noise产生的,即按照p(y|x)分布产生的。
Error Measure
接下去,我们要说说,求了g之后,如何评估它。
最先想到的就是,用Eout。
但是Eout我们不知道,所以可以用下面方式给g打分数:
(1)在还没看过的或者未来的资料上面测试
(2)每一个x都看一下g的表现,最后做个平均
(3)对于分类的话,我们可以看结果对不对
现在就用pointwise error measure即每个点上的错误衡量,最后求平均。用err表示每一个点上的错误。一般,只要抽一些点看看平均错误就可以了。
有哪些pointwise 的方式呢?
这和Machine Learning(Andrew)Week3(上)成本函数(Cost function) 那里一样。
0/1error是说对不对。squared是预测接近程度。对错误的衡量会影响到目标分布。
看一题例子:
如果h说是ý=1,分别求0/1error和squared error
ý=1则y=2 和y=3是错的
0/1error =0.7+0.1 =0.8
squared error = (2-1)^2*0.7+(3-1)^2*0.1=1.1
error是放在求出了g之后的
Choice of Error Measure
有两类错误:
False reject本来你是对的,结果说你错了
False accept本来你是错的,结果说你对了
0/1error对两类错误的惩罚是一样的,但是在实际应用中两类错误产生的后果不一样
例1:超市系统:会员到超市购物刷指纹可以打折。但是
所以,成本表可能是:对于超市而言,很明显第一种错误要严重,所有系统出现那类的错误,应该受到更严重的惩罚。
例2:CIA(美国中情局)安全系统:员工进行身份识别后可以看到机密资料
所以,成本表可能是:对于CIA而言,很明显第二种错误更严重
所以,对于不同的application,应该用不同的错误衡量的方式。但是,就像超市系统一样,我们对第一种错误要惩罚,惩罚10倍还是20倍或者1000倍,使用者也没法说出标准或者代价。或者他们心里有想法,但是我们也不知道该如何数字化呈现。
所以,我们只能用替代的错误衡量方式:
0/1error( minimum ‘flipping noise’)和squared error( minimum Gaussian noise)
但是更友善的是我们希望设计算法大概可以说清楚使用者心中所想:一个易求解的方式或者在凸最小化的函数(这里是说,如果用户不知道用什么,我们总是要以这种优化为目标,找到错误衡量的替代方式)
err是application的目标,但算法实际实现的是
Weighted Classification
还是CIA的例子,第二类错误更严重,我们就让犯第二种错误收到更严重的惩罚。
这时,我们给了一个成本矩阵是:
那么对于Ein和Eout来说
在Eout时,y=1时错了,罚1;y=-1时,错了罚1000
这种就叫做weighted Classification,就是说对于不同的类别错误,惩罚是不一样的。
可是,当这样改了之后,Ein就变了。
对于PLA算法没差,因为只要线性可分,它总是会找到那个g
而对于pocket算法就不一样了。我们之前讲过,pocket算法只在计算前后两条线的犯错的情况后,才决定换不换。对错误的权重不一样,一定影响到了“换不换”这个决定。
所以,要修改pocket算法,使它在weighted Classification时做的和之前一样好。
我们把weighted Classification的Ein称为,之前的称为。我们要修改pocket算法,使这两个Ein有关系。
如:
就是说,当我们一拿到训练数据,不管三七二十一,先把y=-1的(x,y)复制1000倍。所以,如果g在一个y=-1的点x2上犯错误了,它说这个点是+1,那么g在复制的其他999个x2上也都会犯错误。所以,在新的资料上,犯错的点也还是收1的惩罚,但是点的累积就相当于收了1000倍的惩罚。那么,在新的资料上做的0/1error,就和前面的惩罚的是一样的了。同时,pocket算法在右边那个问题上,是可以用的,和之前的完全一样。也就相当于这个算法在weighted Classification中可以用。
实际上,上面的复制,也并不是真的做了。因为真的复制还是要花存储空间、计算时间的。用的是“virtual copying”,即:
对那些y=-1的点要比之前高1000倍的概率访问。(就是对y=-1的点要常看有没有错)
换h的时候用换
综上,要选择合适的err,且选择err小的h。