林轩田之机器学习课程笔记(why can machines learn之noise and error)(32之8)

欢迎转载,可以关注博客:http://blog.csdn.net/cqy_chen

概要

上节课主要讲的是VC维,这是机器学习中很重要的概念。
本节课重要讲的是存在噪音和错误的数据的时候,机器学习会如何表现。

目标函数是一个概率分布(有噪音)

这里写图片描述
我们在前面的假设就是资料来源是一个完美的target。就是我们收集的信息有造影。比如在信用卡欺诈中,用户的信息可能是存在噪音的,也可能存在本来不应该给一个用户发卡但是发了。标签也可能存在噪音。同样的用户可能会贴上不同的标签。
那么这个时候我们以前推导的公式还是否可行呢?

回到推导vc维的最开始的地方。假设这里存在一个变色龙弹珠,就是在抽取的时候,这些弹珠在不断变来变去,就相当于有噪音本来是+1,但是有部分概率是-1。
这种情况下,我们可以假定在抽取的瞬间,记录好手中弹珠的比例。整个推导过程就和以前的一模一样了。所以这样vc维还是work的。

这里写图片描述

这里其实就是没有噪音的时候是ok的,有噪音的时候,那么我们成这个目标为一个分布,因为y可能会变来变去的。给定同样的x,y的取值可能不一样,但是在一个分布内.如下图所示:
这里写图片描述
这个时候其实我们就是想要在正常情况下去预测经常出现的概率。
那么新的机器学习流程如下:
这里写图片描述
差异的地方就是target的产生是一个分布函数,而不是简单的一个函数。
我们大致的说明了下vc维还是正常工作的。

损失函数

机器学习的目的是 f(x)g(x) 接近。我们怎么来衡量这种接近程度呢?这里用损失函数来表示 err(f,g)
对于大多数问题我们都是采用逐个的计算每个点的误差,然后通过平均或者其他方式来衡量,比如在PLA中。

Eout=ϵ(XP)err(f,g)Ein=1Nn=1Nerr(f,g)

因为我们的目的后面就是要使得损失函数最小,这样才能使得 fg 更接近。
不同的损失函数,其实会影响我们的算法去选择不同的假设空间
损失函数可以参考kaggle上的一些例子

https://www.kaggle.com/wiki/Metrics

大家如果有兴趣可以多多参加kaggle上的竞赛,还是有很多帮助的。一般情况有两类,一种是分类问题,一种是回归问题
这里写图片描述

那么不同的损失函数是怎么来影响我们选择假设空间呢?
如下图所示:
这里写图片描述
如果是采用了0/1错误,那么我们会猜的 y˜=2 ,因为这个时候,我们的损失函数达到最小:0.3。
如果采用了平方的错误,那我们会猜 y˜=1.9
所以我们看到不同的损失函数,是会影响我们的演算法去选择不同的假设空间的。

这里顺便说一下:不管是在竞赛还是在实际工作的时候,一定要考虑损失函数是什么。比如在使用XGB的时候,是可以自定义损失函数,结合不同的场景,改写相关的损失函数,而不是一味的成为一个调包侠,调参员。

那么机器学习的流程就变成了
这里写图片描述

算法的损失函数

那么为什么会有这么多不同的损失函数呢?举个简单例子,指纹识别:
这里写图片描述
这里有两种错误:
1)本来是正确的,但是被判为了-1。那就是错误的拒绝了。
2)本来是错误的,但是被判做了+1。那么错误的接受了。
对应统计学的第一类错误和第二类错误。这里类错误详细的解释可以参考:http://blog.csdn.net/gdp12315_gu/article/details/49976139
上面的图片中的情况我们是每个样本点都是同样的权重,假如超市进行了促销,一个该打折的顾客却被判断为不打折,那这样就会带来不好的影响,同时呢可能顾客就会不来了。但是一个不该打折的顾客却打折了,无非是少赚点钱,并没有带来多少不良影响。
所以这个时候我们通常是要设置不同的权重的。
这里写图片描述
反应在错误衡量还是那个就是我们应该多关注是正确的却被拒绝的样本。增加权重。
同时在实验室指纹识别中,却是相反的情况,如果不是实验室人员却进来了,那这样就出大问题了,但是如果是实验室人员,不让进,无非是用户体验问题嘛。

这里再插播下,在实际的工作中经常会遇到类别不平衡的问题,一种解决办法就是赋予不同的权重,让算法能够多考虑类别少的样本。

虽然损失函数严格来说是很难确定的,是要根据不同的业务场景来定义,但是我们一般采用常用的损失函数来替代。
这里写图片描述
对于我们来说,比如0/1损失函数,或者平方函数。
但是0/1损失函数我们在PLA中已经说明这是一个NP难问题,演算法就很难再假设空间中选择算法。所以这里采用更加友好的算法,比如有闭式解或者图集。这个时候可以采用诸如SGD之类的算法来求解。

带权重的分类

上面中我们学习到了损失函数不同可能导致我们的演算法去选择不同的假设。比如上面提到的,采用PLA。
这里写图片描述
在f犯不同的错误的时候,使用不同的权重。就是在未来的样本中应该是这样计算的:
这里写图片描述

为了保证 Ein Eout 接近。我们应该在 Ein 也采用同样的衡量方式:
这里写图片描述
这样在模型训练的时候,样本的权重是不同的。
我们把这个损失函数重新定义下;
这里写图片描述
那么怎么来修改我们的演算法使得 Ewin(h) 达到最小呢?
当然我们可以使用pocket PLA ,每次进行比较的时候,重新比较这个损失函数。同时也可以通过增加-1的量。
这里写图片描述
这样的话,其实我们不用修改演算法,直接复制1000倍的-1的量。
但是这样会带来另外的问题,就是存储空间的大小喽。
再从另外的角度想想,我们计算了1000次,其实就是1000倍的概率去拜访了-1这些点,能不能设计成采用原来的资料,但是在抽取的时候,是不同概率的去抽取-1的点,是不是就ok了么?
这样就成了带权重的pocket PLA
这里写图片描述

欢迎转载,可以关注博客:http://blog.csdn.net/cqy_chen

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值