@frank-shaw
2015-08-03T18:44:04.000000Z
字数 7681
阅读 2606
网易机器学习
机器学习理论
回顾我们一开始学习的线性回归当中,我们求解具体参数的时候使用的是极大似然估计(MLE)方法,即:
假设训练集为
在公式(2)中,
在对新样本
在实际应用中,普遍选择正态分布作为
在之前的笔记中,已经分析了在线性回归模型中平方Loss与极大似然估计MLE的关系,那么MAP方法与此相对应的Loss函数该如何解释呢?
之前学的算法都是批处理算法,即在训练集上得到模型后,再去对测试集或者训练集本身进行评测,得到训练误差或测试误差。而在线学习并不是这样,而是首先有一个初始的分类器,当第一个样本到来时,对该样本进行预测,得到预测结果,然后利用该样本的信息对分类器进行更新;然后第二个样本到来时做同样的操作,以此类推。这样,我们就对m个样本都有一个预测值,只不过它们都是在训练过程中得到的。对这些预测值进行统计,就得到了在线训练误差。这就是过程上在线学习和批处理学习的不同之处。
对于感知器算法来说,如果正负样本线性可分,那么其在线学习算法也是收敛的。
为证明方便,我们使用标签
下面证明感知器算法在线学习收敛(在正负样本线性可分的条件下)。
首先,解释何为正负样本线性可分。设样本用
在这样的前提下,可证明如下收敛定理:
机器学习中有很多算法,那么在实际问题中该如何使用这些算法呢?同样的算法对同一个问题,不同的人做出的结果可能截然相反的。当算法遇到瓶颈时该朝什么样的方向来对算法加以改进?相应的建议就是为了解决这一类问题。这些建议是针对实际应用机器学习算法应用到实际问题上的,对研究新的算法并没有太大帮助。
该部分分为三个主要内容:
在对具体的内容分析之前,先介绍一个很有用的建议:避免过早优化。
在我们进行项目开发或课题研究时,往往会遇到一些问题,在没有弄清楚问题之前,即没有明确的证据说明问题确实出自某个原因之前,我们往往想当然的认为对自己认为出问题的地方进行改进或优化,运气好时能够解决问题,运气不好时则会浪费大量时间。此外,在项目开发时,过早的优化代码段(虽然代码段并不是瓶颈)。虽然该段代码被优化得很快,但对系统性能的提高的作用确实微乎其微,可以说是浪费了时间。而对研究来说,过早地去做一些不能解决问题的事情,浪费的时间可能会更多。因此我们必须找到能够判断问题关键所在的办法,这就引出了一下内容:
设想垃圾邮件过滤问题,目前的研究现状如下:
——>在5000个特征中选择了100个特征;
——>使用贝叶斯Logistic回归模型算法,用态度下降优化目标函数;
——>目前的误差率为20%。
显然,20%的误差率难以接受,那么可能的解决办法如下:
可能的办法数以百计,但我们暂时只列出这么多吧。对于上述8种改进方法,如果一一尝试的话会非常耗时。比如,第1种收集更多数据会达到好效果(通常是这样),但是对于某些实际应用来说,收集数据是非常耗时的事情。盲目行动的效果并不好
面对以上8种方法,我们如何选择呢?拼rp?当然不是。如果我们能够找到几种标准,排除上面的绝大多数,只留下一两种,那么成功的概率会高很多。
方差/偏差分析
第一个标准就是判断问题是出在高偏差还是高方差上。一般说来,高方差针对的是过拟合问题,即训练误差很小但生成误差很大。而高偏差针对的是模型本身不合适的情况,如特征数目过少等问题,表现即是训练误差和生成误差都很大。
由左上图可看到,在高偏差下,训练误差和生成误差都会大于预期的性能。这个时候,增加样本的数目是不可能解决问题的,可以看到Test Error和Train Error到最后已不再随着样本数m的增大而变化。
由右上图可以看到,在高方差下,可以比较训练误差和测试误差,如果它们之间相差很大,那么通过增加样本数目使得系统的过拟合程度减小,提高性能。(看Test Error和Train Error的差距来判断高方差or高偏差)
根据上面的分析,我们就可以对8条办法的前四条进行分类了:更多的数据、更少的特征解决的是高方差的问题;更多的特征和更好的特征可以增加模型的复杂度,提高模型在数据中的拟合程度,因而对应解决高偏差问题。
是否收敛于目标函数是否正确的判断
考虑下面的情景,仍然是针对垃圾邮件分类问题:
——>使用贝叶斯Logistic回归模型(BLR)可以达到正常邮件上2%的错误率,垃圾邮件上2%的错误率;
——>使用SVM模型可以达到正常邮件上0.01%的错误率,垃圾邮件上10%的错误率;
对于BLR来说,正常邮件上2%的错误率是不能容忍的,因为一般人一般情况下不愿意错过朋友发来的邮件或重要邮件。显然,此时SVM比BLR要好。
此时我们会有两个可能的分析:
a.贝叶斯Logistic回归模型是否收敛?
b.贝叶斯Logistic回归模型的目标函数是否选对?
这两者情况都有可能造成结果中SVM由于BLR。即如果BLR没有收敛,而SVM收敛,那么SVM效果更好;如果模型的目标函数没有找对,那么在当前的目标函数上,BLR可能逊于SVM,但BLR在正确的目标函数上却能达到更好的效果,这也是有可能的。
对于上面SVM优于BLR的问题,我们根据实际情况找到实际的需要优化的函数:
(1)
这就表明BLR的目标函数有待改进,选得不够好。原因是这样:一个不能使得
因此,我们就可以对8种解决方案中的后4种做出分类了。算法迭代次数增加与尝试牛顿方法是为了收敛性更好。调整
在ML上开始研究一般有两种做法:
第一种是仔细构造法。对问题进行深入的分析,提取正确的特征,收集需要的数据,设计正确的算法结构,这样往往能够一次就得到较好的具有可拓展性的算法。
第二种是创建-修改法。这种做法一般是先创建一个较差的系统,然后利用上面的诊断法对系统进行修改,从而得到较好的系统。这种做法比较广泛应用,因为互联网上的成功产品,往往不是最好的,而是最早的。
如果在ML上开始做解决方案的话,一个较好的建议是先对数据进行分析,比如为什么数据中的这些属性值是负的。当找出数据中的规律或者数据中的错误的时候,往往会发现系统性能差不是需要更复杂的算法,而是更加强大的预处理。
在做研究的过程中,要把注意力集中在关键问题上,不要轻易的相信某些结论对算法有用而花大量的时间在那些理论上。Ng谈到自己的经验时,说道花在设计、诊断上的时间通常都很有价值;一般来说,三分之一或者一般的时间花在诊断和设计上都是可以接受的。