Notes for Andrew Ngs ML classML AdviceSVM.docx
- 文档编号:4164305
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:12
- 大小:854.48KB
Notes for Andrew Ngs ML classML AdviceSVM.docx
《Notes for Andrew Ngs ML classML AdviceSVM.docx》由会员分享,可在线阅读,更多相关《Notes for Andrew Ngs ML classML AdviceSVM.docx(12页珍藏版)》请在冰豆网上搜索。
NotesforAndrewNgsMLclassMLAdviceSVM
目录
模型选择,训练/验证/测试数据集1
bias&variance2
学习曲线5
ErrorAnalysis6
SVM7
模型选择,训练/验证/测试数据集
过拟合样例
一旦参数
,
…,都确定(根据训练集),那么这些参数基于训练集的error极可能比真实的泛化error要低。
如果我们有多个模型:
实际上,越高阶的模型,最终带来的trainingerror越小,但是其泛化能力一般而言则是较弱的(即在新的testset上的error会较大)。
然而,低阶的模型可能很难对问题进行建模。
那么如何选择一个适当的模型则显得比较重要了。
在当前的这个样例中,模型的选择实际上就是模型度(degree)的选择,我们完全可以基于一个测试集来选择一个testerror最小的。
比如,对于一个新的测试机,degree=5的模型表现最优,那么我们最终选择degree=5的模型作为我们的模型。
然而,我们如何描述degree=5的这个模型的泛化能力呢?
直接使用testerror来描述即可么?
这是不可以的,因为当我们选择degree=5的时候就是基于这个testerror的,因此这个test集合实际上是我们确定参数时使用的,即它是和参数degree耦合的。
故,我们应该再拿一个新的测试集合来计算一个新的error,并将之作为模型的泛化能力。
如此,我们实际上应当将数据划分为三份数据集:
训练集(trainingset)、交叉验证集(crossvalidationset)、测试集(testset)。
其中:
训练集(60%)用于训练模型;
交叉验证集(20%)用于选择模型;
测试集(20%)用于描述模型的泛化能力。
不过,如果不需要进行模型选择,那么就没有必要额外划分出一个交叉验证集。
bias&variance
bias用于描述有偏性,variance用于描述不稳定性。
在机器学习中,bias高一般意味着模型没有很好地描述训练集,而高variance则意味着过拟合,如下图:
本质上,随着阶的上升,模型在测试集上的error逐步降低,但是在交叉验证集/测试集上的error则不是单调的,如下图:
在这个sample中,当degree大于2时,模型在cv集合、测试集上的error不断上升,说明模型的泛化能力变得太弱了。
当模型的效果没有达到预期,我们首先应当看看当前的模型是因为高bias导致的,还是高variance导致的。
从degree~error图形上可以分辨:
这个例子还是很简单的:
多项式拟合。
在生产环境中,一般很少使用特别高阶的特征,此时,可以将横轴变为numberoffeatures。
不过如果feature太多的话,会造成很严重的计算负担。
当我们没有把握来确定哪些feature应当使用,哪些feature不应当使用,我们可以使用regularization技术来帮助学习。
以线性回归为例,我们可以在lossfunctions中额外增加一项:
这样,在J(θ)最小化时,regularization项作为一个限定条件要求尽量少地使用feature。
然而此时就必须小心地选择λ的取值了:
当λ太大时,正则化项主宰了整个lossfunction,导致学习算法的主要目标在于最小化正则想,导致高bias。
而当λ太小时,正则化项几乎不起作用,仍然会出现过拟合(高variance)现象。
于是,λ实际上就是我们模型中新增的一个额外需要确定的参数。
注意到,由于我们有了正则化项,就不再需要degree作为一个参数了,因此就可以套用模型选择的那一套做法:
我们需要设定一系列的λ值以得到一系列的模型,并使用cv集合来选择一个表现最好的模型(即确定λ的具体取值)。
在Andrew的slide中,他说一般他使用0.01,0.02,0.04,0.08,…,10.24共12个值。
那么λ~error的曲线即如下图:
随着λ越来越大,正则化项的作用越来越大,导致训练集上的error不断增大。
而在cv集合上,则应该显示出一个curve,取最小值即可。
学习曲线
在进行训练时,如果学习算法出现了highbias,那么即使得到了再多的训练样本也是无济于事的。
因为模型假设本身就有问题:
而如果学习算法受到了highvariance的影响,那么获取更多的数据则有可能有帮助,但是这并不是绝对的。
当算法表现不尽如人意时,可以使用下面的方法来调节:
1.获取更多的训练样本——highvariance
2.使用更少的feature——highvariance
3.获取更多额外的feature——highbias
4.增加多项式项(x12,x22,x1x2…)——highbias
5.降低λ——highbias
6.增加λ——highvariance
ErrorAnalysis
在面对一个新的问题时,首先应当快速实现一个算法,然后以之为基础找到问题的本质(找到适当地feature)。
特别是,要仔细分析error,以分类问题为例,对于错分的样本应当细致地进行分析,常常可以找到需要哪些新的feature来帮助进行更加准确的分类。
另外,也可以发现当前模型是否不足(如是否出现了highbias或者highvariance),以帮助进行下一步的工作(获取更多特征?
获取更多训练样本?
尝试高阶特征?
)。
总之,实现一个quick&dirty的模型,然后基于它可以对问题进行非常多的分析,也可以非常有效地帮助我们合理地安排下一步的工作。
SVM
Andrew引出SVM的方法很有趣,通过logisticregression的lossfunction,稍加修改后得到SVM的lossfunction,然后来说这个新的lossfunction的含义是啥,进而得出SVM。
这个方法很容易将logisticregression和SVM联系起来,但是很难说它是一个推导过程。
那么还是首先看一下logisticregression:
它的lossfunction是:
那么,如果y=1,我们就希望
:
如果y=0,我们就希望
:
可以看到,logisticregression的cost相对于z而言是比较柔和的,处处可导。
对于这个cost,稍加修改,对于y=1时,z>=1时,令cost(z)=0;对于y=0时,z<=-1时,令cost(z)=0。
其他时候cost是一个线性函数。
我们分别称上述两个cost为cost0(z)和cost1(z)。
logisticregression的lossfunction是:
而SVM的lossfunction是:
可以看到,SVM的lossfunction和logisticregression有如下区别:
1.没有了m(这个对最终得到的θ其实没有什么影响,一个常数而已),去掉主要还是为了后面求解的时候更加方便。
当初在logisticregression的lossfunction里面加了m也是为了求解的时候导数能够约掉。
2.λ消失了,但在第一项增加了一个C,实际上C相当于是1/λ。
这个其实也是为了后面计算的时候方便。
3.单个样本的cost变化了。
这个变化是很重要的一个变化,一会儿解释SVM本质的时候,可以看到它究竟是啥。
好,现在我们来看SVM的本质。
基本思想很简单,就是分类的时候,要求分类边界距离两边的类别sample尽量地大,即所谓的largemargin。
回顾一下SVM的lossfunction和基本的cost图形:
在logisticregression中,如果θTx>=0,则将之分类为1,但它仍然会带来一些loss,因为永远不会为0.而在SVM中,我们的cost在z>=1时就为0了,于是要求θTx>=1,这样就可以带来最小的cost。
如果将C设置得较大,那么其效果就要求cost1和cost0就应该很小,即应当是0.于是SVM的lossfunction又可以写成:
不过,如果C太大,那么最终可能会导致过拟合,因为lossfunction要求几乎每一个trainingsample都要被正确分类。
现在继续看看它们意味着什么。
先介绍一些向量内积。
向量内积计算很简单,即对应维度相乘然后加在一起即可:
而它本质上是一个向量A在另一个向量B上的投影长度乘以B的长度。
那么前面的
实际上就是x(i)在θ上的投影与||θ||的乘积。
而θ本身实际上是决策界面的法向量。
由于目标要求θ越小越好,因此需要x在θ上的投影越长越好,才能满足约束条件。
这样就表现为要求分类间距最大化。
以上就是SVM的基本阐述,就是一个线性的分类器。
请记住,SVM在任何情况下都是线性分类器,它在应用中之所以可以进行非线性分类,是因为可以使用核函数将sample映射到更高维空间中并使之线性可分(至于是否真的线性可分要看数据本身)。
因此,核函数(kernelfunctions)对于SVM是至关重要的。
对于非线性的决策边界(decisionboundary),之前说的都是增加高阶多项式项(如x12,x1x2),但是问题在于如果基础feature较多的情况下,多项式feature是指数增长的。
kernel的思想实际上也是增加更多的feature,但它的思想和增加高阶多项式项则完全不同:
对于一个给定的samplex,使用和landmark的近似程度来计算新的feature。
上图中,有3个landmark,那么对于一个samplex,就可以定义出三个新的feature,分别是和那三个landmark的相似度。
这里使用了高斯核(一种RBF)。
注意到,如果samplex和某一个landmark较近的话,那么计算得到的某一个feature就接近1,而和其他相距较远的landmark的相似度就接近0。
而在高斯核中的σ则控制着相似度变化率:
由上图,可以看出,如果σ过小可能会出现过拟合,而σ过大则可能出现underfit(高bias)。
那么现在的问题就是如何选择landmark了。
在SVM中,选择landmark的方式很简单——所有的训练样本都是landmark。
这个可能会出现一个问题:
如果训练数据较多,对于每一个sample都计算出了一个组新的feature,而该组feature的数量就是训练集合的大小,可能会造成计算上的高复杂度。
不过在SVM中,求解算法可以做一些numerictricks来解决这种问题。
到现在为止,SVM基本就说完了,就是两部分:
1.最大化分类margin
2.使用landmark将sample映射到更高维空间
而对于使用高斯核的SVM来说有两个参数需要调整:
1.C,控制cost
越大,fit程度越高,但可能出现overfit
越小,fit程度越低,可能出现underfit
2.σ,控制平滑程度(如果不适用核函数,可以不指定)
越大,fit程度越低,可能出现underfit
越小,fit程度越高,可能出现overfit
从上面看,kenerl实际上并不是SVM的必然产物,它的思想和SVM没什么特别的关系,看上去也可以放到logisticregression等分类器中去使用。
最多的用法是不使用kernel(线性kenerl)或者高斯kernel。
也有其他的核,但是Andrew说他基本都不会用到。
实际上,logisticregression和SVM都是线性分类器,那么在实际使用的时候如何选择它们呢?
额外,我自己的一点认为是:
如果问题本身线性不可分,那么可能就需要使用SVM(withaGaussiankernel)了。
另外,Andrew也说具体算法其实问题并不特别大,主要还是要看feature、数据等。
最后还有一点比较重要的就是,在使用SVM的时候,一定要做feature的normalization,否则效果很差。
其实不做normalization也不是不行,只是收敛迭代的次数会很多,在限定时候可能会达不到最优解。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Notes for Andrew Ngs ML classML Advice SVM
![提示](https://static.bdocx.com/images/bang_tan.gif)