台大《机器学习基石》课程感受和总结---Part 1(转)

期末终于过去了,看看别人的总结:http://blog.sina.com.cn/s/blog_641289eb0101dynu.html

接触机器学习也有几年了,不过仍然只是个菜鸟,当初接触的时候英文不好,听不懂课,什么东西都一知半解。断断续续的自学了一些公开课和书以后,开始逐渐理解一些概念。据说,心得要写下来才记得住。据说,心得要与人分享。这里是自己一点非常粗浅的感想或者遇到的问题,不一定对,请自带滤镜。有大牛的看到了请指出错误,求轻拍,求指导。

先说说台大这门课,总体来说偏理论一些。本来是抱着学学实际应用就行的心态去听的,后来还是感觉到不能只知其然不知其所以然。耐着性子听完后,真的有融会贯通的感觉,比如...之前我连regularization大概是个什么意思,里面的lambda和C又是个什么关系都弄不清楚...现在也算清楚了,虽然不一定用到。讲课的林老师备课非常好,也很负责的亲自回答同学的问题,推荐大家听一听。可惜有两个作业没完成,证书拿不到(因为...中间回老家结婚,你没看错,这种flag我都敢插),不过学习到东西才是最重要的嘛,至少和各种专业词汇混个脸熟,再听别的课程或者阅读书籍的时候不至于茫然。

下面就总结一下从这门课里学习到的一点东西(东西比较杂)。

能够应用机器学习的情况要满足以下几个特点:

  1. 有pattern,比如银行如何决定是不是给用户发信用卡。
  2. 这个pattern说不太清楚,没有明确的公式或者过程(要有了就直接用,还学个什么劲儿)
  3. 要有数据,没数据从哪里学...

机器学习要做的事情就是通过使用Learning Algorithm,基于训练数据(数据由目标函数target function),去假设集合H当中找到一个最合适的假设h,用h来近似target function。target function就是那个神奇的东西,产生了各种数据。

 

机器学习的模型Model = Learning Algorithm + Hypothesis Set (算法 + 假设集合)

============================================================================================

这门课前半部分都在讲学习是否是可能的,具体怎么做的,就不写了(必须可以啊,不然后面还讲什么呢)。Take away message就是说,要想学习成为可能,就需要Eout(Test)和Ein(Training)之间的差别不能太大。有一个叫做霍夫定不等式的东西,说明了Eout,Ein和假设集合H复杂度之间的关系:

  • H复杂度越高,Ein越小,但是Eout有可能就很大。(Overfit)
  • 反过来H复杂度不够,Ein可能较大,但是Ein和Eout之间的差别可能不大。(Underfit)

 

从数据量N的角度来看,要想学习成为可能,理论上N需要是dvc的10000倍;不过实际中,一般来说10倍就OK了。dvc是对假设集合H的复杂度的衡量(值越大,能力越强,越能fit复杂的数据)。在实际应用中,dvc的值大概等于自由度(但并不总是这样;比如你有100个feature,自由度99,那你至少需要1000条数据)。

 

对于feature,有以下几个种类:

Concrete具体型:有较清晰的物理意义且与问题相关(领域知识)

Raw初级型:只有一些较为简单的物理意义

abstract抽象型:没什么物理意义

...

================================================================================

PLA,Linear Regression, Logistic Regression.三个其实都可以拿来做分类,各有各的优缺点。具体见课件11.

在做PLA,Logistic Regression之前,先用Linear Regression找到一个w,作为初始值。

线性不可分的数据,pocket PLA和Linear Regression,我们在实际中更倾向于使用后者。

Logistic Regression输出值是0到1之间,属于linear classification的一种。这不就和分类概率一样咩。

 

================================================================================

有时候,我们的model因为underfit表现不好,我们需要加入更多的feature,这可以是其他feature或者是已有feature的transformation,比如加入多项式的feature。但是,如果我们加的过猛,可能就会overfit。

比如target function是由50次的多项式产生的,你用10次的多项式去建模,那就可能overfit了。实际上,即使是target function就是10次多项式产生的,你用10次多项式,还是会overfit。课件中,使用二次多项式建模反而效果更好。

这其实感觉更像一个哲学问题:天之道,损有余而补不足。是故虚胜实,不足胜有余。 --- 《九阴真经》。俗话说,过犹不及,也是这个道理。所以在尝试模型的时候,从最简单的线性模型linear model开始,即使要加入多项式项,也请从低次方项开始加。

Overfitting出现有三个条件:

  1. 数据集太小,没几个点可以学。
  2. 数据的noise太大(stochastic noise,随机噪声)
  3. 使用的模型太复杂(这也是一种noise,叫做deterministic noise)
  4. 模型相对数据来说太复杂(叫做excessive power,这一点可以和第三点合二为一)

============================================================================================

当然,如果我们就是想用复杂一点的模型,也不是不可以,那就要加入regularization。这样既可以享受复杂模型的能力,又可以保证让模型的能力不太过头。

 

Regularization的作用在于step back from complex hypothesis to simple ones (for example from H10 to H2)。H10和H2的关系(从w0开始考虑):

  1. H2 = H10从3次方开始系数都是0 (这看上去貌似是多次一举);
  2. 放宽条件-> H10任意3个系数不是0,其余是0;
  3. 继续放宽条件->H10的系数的平方和小于C(wTw <= C)(这样,既可以享受H10的能力/复杂度,又不会太过)。

虽然我们选用比较复杂的模型H10,但是可以通过设定lambda来加入Regularization。记住,从很小开始加。a little regularization goes a long way. 加多了可能underfit(具体参考课件)。

============================================================================================

很多时候,我们尝试了不止一种模型,而是由很多种。那么怎么才能做出选择呢?这里需要用到的就是Validation。记住,我们要做的是Model Selection,而Model = Algorithm + 对应的Hypothesis Set.

要做Validation:

  1. 我们需要将数据分成三个部分(训练,检验,和测试三个数据集)。各个模型在训练数据上进行训练,会从自己的Hypothesis set中选出一个最佳的假设g作为这个假设集合的代表。
  2. 然后,各位代表再到检验数据上试一下效果如何,最后我们选择在检验数据上表现最好的g所对应的那个模型M。
  3. 再将训练和检验数据合并起来,让M在这个合并的数据上再去得到一个最终的假设g*,作为最终用来近似target function的结果。
  4. 那么这个g*到底表现怎样,我们可以在测试数据上测一下,作为g*能力的评判。

这里有一个问题,之前纠结了一下。在第二步中我们选出了表现最好的g以及其对应的模型M。可是第三步,又把训练和检验数据合并起来,重新用M得到了一个g*。问题是,有没有可能在合并的数据集上,其他模型表现反而更好呢?

这个其实是个陷阱。你想知道其他模型在合并的数据上是不是更好,那我们就需要另外再找一个检验集合去衡量,可是我们没有(测试数据是绝对不能动的哦!),而我们又不能用训练数据上的表现来衡量(因为这一个过度乐观的估计)。如果我们能找到新的检验数据,那这个过程就可以没完没了的进行下去,我们永远都可以想是不是合并后别的模型效果更好...

所以,我们没办法知道上面那个问题的答案。而理论上来说,g*因为是从更大数据中学习出来的,它的效果理论上来讲会比g更好一些。

============================================================================================

最后三点指导思想:

1、simple is good. 大道至简。

2、小心Sampling Bias, class matches exam. 你的训练数据和测试数据要是从同一分布得来的。要思考一下,真的是吗?比如说银行信用卡问题:银行的数据是那些银行给了信用卡的人,他们是否有乱花钱。但是我们不知道被我们拒绝的人,如果真要是给了,他们会不会乱花钱。所以这个数据是已经被筛选过了的。而真正实际应用的时候,可不会有这样的区分的,所以有bias(怎么解决没讲,查查文献吧)。那就是说,我们还要考虑,一个问题它面向的数据应该包括哪些方面,现有的数据是不是biased。

3、不要Data Snooping,你这是在把自己脑子里的complexity加到模型中。还有,人们习惯性的把数据集拿到后就做一下exploratory data analysis,看看统计数据什么的。但是如果这个分析过程使用的数据包含了你的test data,那其实就有可能间接的data snooping了。简言之,不管你做什么处理,请你先把数据集分割成train和test以后再做,并且只在train上做。再确定方案后,再将同样的方案apply到test上(比如在train上选定了特征或者做了什么变换)。

============================================================================================

Part 1就这样吧。

时间: 2024-12-20 21:24:17

台大《机器学习基石》课程感受和总结---Part 1(转)的相关文章

台大机器学习基石课程之机器学习基本原理和概念

前段时间在网上看到了coursera公开课台大机器学习基石课程,比较全面而且清晰地将机器学习所需的基本知识.理论基础给与了讲解.foundation中有几个比较重要的概念和思想,先进行一下回顾,然后开启对后续技法课程的学习和总结. 1. VC dimension(VC维,非常重要的概念) 能够shutter 二分类问题的上限.也是衡量模型复杂度的工具(类似自由度的概念).之所以这个概念比较重要是它能够解释为什么机器能够学习. 1),以概率统计中常用的手段:用sample来估计整体,机器学习也是如

Coursera台大机器学习基础课程学习笔记1 -- 机器学习定义及PLA算法

这学期学了机器学习这门课,想趁期末看看台大的这门课再把课程梳理一遍. 笔记可以参考这位博主,写得还不错:http://www.cnblogs.com/HappyAngel/p/3456762.html 其中证明PLA算法确实能够越来越接近最完美的感知机以及PLA算法最后一定能停下来那部分非常的精彩. 最后对那些线性不可分的数据,提出了一个Pocket PLA算法,实质就是PLA算法,只不过稍有不同,但也能满足一定的要求.

Coursera台大机器学习技法课程笔记01-linear hard SVM

极其淡腾的一学期终于过去了,暑假打算学下台大的这门机器学习技法. 第一课是对SVM的介绍,虽然之前也学过,但听了一次感觉还是很有收获的.这位博主总结了个大概,具体细节还是 要听课:http://www.cnblogs.com/bourneli/p/4198839.html 这位博主总结的很详细:http://www.cnblogs.com/xbf9xbf/p/4617120.html

Coursera台大机器学习技法课程笔记11-Gradient Boosted Decision Tree

将Adaboost和decision tree相结合,需要注意的地主是,训练时adaboost需要改变资料的权重,如何将有权重的资 料和decision tree相结合呢?方法很类似于前面讲过的bagging,通过采样资料来使资料获得不同的权重. 一棵完全的树的权值会无限大,可能出现过拟合.因此需要得到一棵弱分类的树,方法如下: 接下来比较深入的分析adaboost.经过代换,出现了如下惊人的结果: 某个资料的权重正比于投票分数 联系到之前学习的SVM,发现了一个秘密:投票的分数就是某个点到分隔

Coursera台大机器学习技法课程笔记03-Kernel Support Vector Machine

这一节讲的是核化的SVM,Andrew Ng的那篇讲义也讲过,讲的也不错. 首先讲的是kernel trick,为了简化将低维特征映射高维特征后的计算,使用了核技巧.讲义中还讲了核函数的判定,即什么样的函数K能使用kernel trick. 此外,核函数还可以衡量两个特征的相似度,值越大,越相似. 接着讲的是Polynomial Kernel,需要注意的是核函数的系数和常量,这会影响到最终的margin. 再接着讲了高斯Kernel,它能将原始数据映射到无限维!但是如果参数选的不好就会出现过拟合

Coursera台大机器学习技法课程笔记14-Radial Basis Function Network

将Radial Basis Function与Network相结合.实际上衡量两个点的相似性:距离越近,值越大. 将神经元换为与距离有关的函数,就是RBF Network: 可以用kernel和RBF来衡量相似性: 那么如何选中心点呢,一种方法是把所有看过的资料都当做中心点,这就是 FULL NETWORK: 用所有的点作中心太麻烦,可以选择某几个点来投票,这就是KNN: 之前投票的y就是资料的标签,如果每笔资料都不同的话,可以得到一个简洁的贝塔: 减少中心点(相当于选了几个代表)可以做regu

Coursera台大机器学习技法课程笔记09-Decision Tree

这是我们已经学到的(除Decision Tree外) 下面是一个典型的decision tree算法,有四个地方需要我们选择: 接着介绍了一个CART算法:通过decision stump分成两类,衡量子树的标准是,将数据分成两类后,这两类数据的纯度(purifying). 下面是不纯度的衡量: 最后是什么时候停下来: decision tree可能overfitting,需减小Ein和叶子的数目(表示树的复杂度) 如果缺少某一特征的话,可找一替代特征: 将CART和Adaboost进行对比:A

Coursera台大机器学习技法课程笔记13-Deep Learning

深度学习面临的问题和现在解决的办法: 简要来说,分两步使用DL:初始化时一层一层的选择权重,而后再进行训练: 那么怎么做pre-training,即怎么选择权重呢?好的权重能够不改变原有资料的信息,即编码过后信息够解码过后仍能保持 用类神经网络做如下: 这样做的原因就是,能找到一个好的特征转换:找到隐藏的资料结构,学到数据典型的表现形式 在层与层的autoencoder过程中,不需要标签信息: 下面介绍了一个regularization方法:在资料中加入artifical noise(很疯狂的想

Coursera台大机器学习技法课程笔记02-Dual Support Vector Machine

这节课讲的是SVM的对偶问题,比较精彩的部分:为何要使用拉格朗日乘子以及如何进行对偶变换. 参考:http://www.cnblogs.com/bourneli/p/4199990.html http://www.cnblogs.com/xbf9xbf/p/4619866.html

Coursera台大机器学习技法课程笔记12-Neural Network

由perceptron线性组成的一个神经网络: 通过赋予g不同的权值,来实现不同的切分功能: 但有的切分只通过一次特征转换是不够的,需要多次转换,如下: Neural Network Hypothesis:为了便于优化,将sign(离散)变成tanh,这个函数相当于regression的拉伸与平移: 然后给了一个物理解释:衡量x与权值向量在模式上的的相似程度 那么怎么得到权值w呢:可以在最后的错误上对各个权值求偏微分,得到权值变化的方向: 直接求微分不好求,可先求最后一个: 给了一个算法: 这样