Notes for Andrew Ngs ML classML AdviceSVM.docx

上传人:b****5 文档编号:4164305 上传时间:2022-11-28 格式:DOCX 页数:12 大小:854.48KB
下载 相关 举报
Notes for Andrew Ngs ML classML AdviceSVM.docx_第1页
第1页 / 共12页
Notes for Andrew Ngs ML classML AdviceSVM.docx_第2页
第2页 / 共12页
Notes for Andrew Ngs ML classML AdviceSVM.docx_第3页
第3页 / 共12页
Notes for Andrew Ngs ML classML AdviceSVM.docx_第4页
第4页 / 共12页
Notes for Andrew Ngs ML classML AdviceSVM.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

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页珍藏版)》请在冰豆网上搜索。

Notes for Andrew Ngs ML classML AdviceSVM.docx

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也不是不行,只是收敛迭代的次数会很多,在限定时候可能会达不到最优解。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1