首页 > 代码库 > 加州理工学院公开课:机器学习与数据挖掘_误差和噪声(第四课)
加州理工学院公开课:机器学习与数据挖掘_误差和噪声(第四课)
这一课的主题是:误差分析与噪声处理。
该课时的主要内容如下:
1、Nonlinear Transformation(Continue)(非线性转换(续))
2、Error Measure (误差度量)(重点)
3、Noisy Targets(噪声指标)(重点)
4、Preamble to the Theory(理论热身)
1、Nonlinear Transformation:
在上一节课的最后,作者举了一个关于非线性转换的例子。通过该例子我们可以直观的看到非线性的数据可以被转化成线性的数据并且利用线性模型进行处理,但是我们缺乏理论的指导,在这节课中,作者补充上了理论的指导,主要回答的问题是转换什么?
首先我们观察转换的流程:
首先我们通过观察原始数据,找到转换函数,然后对原始数据进行转换,接着对转换后的数据应用线性模型进行求解,得到 W 然后通过求逆就可以得到原始数据的模型,如下:
2、Error Measure
什么是误差度量?
误差度量就是要找出衡量 h(假设集)与 f(目标函数)之间的差距,即找到度量 h 与 f 之间距离的方法。定义为:E(h,f)。
由于真实的 f 我们无法知道,但是我们手上有一些数据,这些数据是 f 的一部分,因此我们在度量误差的时候就利用我们已经拥有的这些数据进行度量。这些数据都是离散的,我们必须得一个点一个点的经行度量,然后求这些点的距离平均值,把该平均值作为 E(h,f)的结果。所以定义 e(h(xn),f(xn)) 为现实中某个点的误差。所以我们有:
其中 Ein 为样本内误差,Eout 为样本外误差(未知),Ex 表示求期望值。
所以现在问题变为如何度量:e(h(xn),f(xn)) ?
在上一节课中我们求解线性回归的误差的时候用到的方法是:平方差:(h(xn)-f(xn))^2.。
然而,现实中并没有这么容易就可以得到误差的度量方法,有时候你的误差度量方法可以决定你的结果的好坏!
在提出理论性的解答之前,我们先看一个例子:
假设现在要开发一款指纹仪,那么我们需要考虑四种情况:
a、理论上你应该被成功识别(+1),事实上你被成功识别(+1)
b、理论上你不应该被识别(-1),事实上你没有被成功识别(+1)
c、理论上你应该被成功识别(+1),事实上你没有被成功识别(-1)(误拒绝)
d、理论上你不应该被识别(-1),事实上你被成功识别(+1)(误接受)
a、b 的行为跟预测一致,是我们需要的,现在误差出现在 c、d 中。理论上,c、d 都是失败的例子,它们的代价应该是一致的吧?因此它们产生的误差应该是一致的吧?
考虑把该指纹仪投放在市场里面使用,会员通过指纹仪确定身份,从而享受优惠,而非会员不享有该优惠。这时如果误拒绝了一个会员,他按了几次指纹都没有识别成功,他因此感到很尴尬,很气愤,并且决定以后不再到这里购物了,该商场因此损失了一名顾客。相反,如果一个大胆的家伙冒充会员进行指纹识别,很意外的他尽然被误接受了,于是他这次购物享有优惠价。这对于商场来说,损失并不大,而且这种大胆的家伙也不多!在这种情况下,我们可能会认为误拒绝的损失比误接受要大,所以我们给误拒绝一个更大的误差,期望能够减少误拒绝的发生。
此外,如果考虑把指纹仪用在美国中情局中情况会是怎样的呢?情况可能要反过来了,这时认为误接受是非常大的损失,相反误拒绝则不会损失什么,那些雇员顶多就抱怨一下,然后多按几次手指而已罢了,毕竟他们是在上班,不是在购物。这时候你可能定义误接受的误差值要大于误拒绝。
因此,结论是:误差测量应该由用户决定。可问题是并不是任何问题都能由用户提供一个误差度量方法,这个时候我们可以有以下的折中方案(记住,以下方案是第二选择,任何时候,如果有用户提供的误差测量,都应该取用用户的!)
a)还算合理的方案,比如:线性回归中的方差
b)比较友好的方案,比如:closed-form solution(闭合解也叫解析解,对应的是数值解)
其中 b 方案是为了使计算更加方便而已。
3、Noisy Targets
理想是丰满的,但现实是骨感的!我们的第一手资料不可能全部都是有用的,其中包括很多的噪声,因此我们需要对噪声进行处理,否则学习的结果将是不可靠的!
之前我们的目标是从假设集中找到一个能最好逼近目标函数的函数,然而,目标函数并不是真正意义上的函数,根据数学的定义,函数是一个自变量只能对应一个因变量,而在我们的目标函数中,一个自变量却可以对应多个因变量。比如:银行贷款时间中,我们的输入数据是年薪,即我们根据用户的年薪决定是否进行贷款。但是现实中可能会出现两个用户他们的年薪相同,但是其中一人拖欠贷款,另一个人没有。所以我们认为这里面出现噪声,如果不对这些噪声进行处理则可能会带来不可靠的结果!
为了处理噪声,我们将要改变目标函数,使得 f(x) = E(y*P(y|x)),即我们取的是一个数学期望值。考虑到样本数据也会影响学习的结果,我们最后修改 f = E( P(x)*y*P(y|x) )。我不是很理解为什么要加入 P(x),可能是因为当我们的的数据集都比较集中,比如都是高薪人群,而其中有小部分是低薪人群时,那么得到的结果更应该有更多的关注点在高薪人群这里,所以给高薪人群一个较高的权值(P(x)).
(注:在作者的 PPT 中, f(x) = E(y|x) ,不知道是不是像我上面那样理解,还望指教! )
然后作者得出:Noisy Targets = { f(x)再加上噪声;y - f(x) }。
最后作者说到 f(x) 是一个特殊的噪声目标,除了 y = f(x) ,其它时候都有 P(y|x) = 0。这里十分不明白!
原文:
下面是无监督学习的流程图:
4、Preamble to the Theory
这部分主要是介绍接下来两周的课程安排,作为一个热身运动。
回顾历史,才能展望未来。我们之前学习过机器学习的可行性。
我们有 Ein ~ Eout(~ 表示约等于)
我们的目标是 Eout ~ 0
我们能做的是尽力使 Ein ~ 0
然而在现实中有些东西是不可预测的,比如股市,你无法使你的 Eout ~ 0 ,因为环境因素太复杂,我们没办法进行很好地预测。当我们的 Ein 在 47% 的时候就已经很了不起了,这时你就应该出手了。反而,如果我们的 Ein ~ 0,则你应该谨慎,因为这个可能是一个虚伪的数据!!!这时你会发现 Ein 已经不能代表 Eout 了,它们的差距已经非常大了!这也是我们接下来将要学习的理论知识:描述有限假设集下学习的可能性
根据上图可知,当模型的复杂度不断增大的时候,我们的输入参数也相应的变多,当参数变多的同时,我们得到的结果的可能性也会变大,因此 Ein 更容易出现接近 0 的结果,同时,Ein 与 Eout 的差距也变大了。
复杂度上升 ----> Ein 下降
复杂度上升------> Ein - Eout 上升
面对真实的问题,复杂度一般都很大,不然也不会用到机器学习了,这是不是说明机器学习不能胜任了?
非也!在接下来的课程里面我们将会学到很多的技巧来解决上面的矛盾,比如正规化。因此机器学习能胜任!
结论:
该课时主要讲解了非线性转换的目标问题、如何计算误差(由用户决定)、如何处理噪声的问题(数学期望值)及对将要学到的理论知识做了个热身运动。是一们承上启下的课时。期待下一课时!
如有理解不到位的地方还望指教!
加州理工学院公开课:机器学习与数据挖掘_误差和噪声(第四课)