期末终于过去了,看看别人的总结: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就这样吧。

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

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

    最近在跟台大的这个课程,觉得不错,想把学习笔记发出来跟大家分享下,有错误希望大家指正. 一机器学习是什么? 感觉和 Tom M. Mitchell的定义几乎一致, A computer program ...

  2. Coursera台大机器学习基础课程学习笔记2 -- 机器学习的分类

    总体思路: 各种类型的机器学习分类 按照输出空间类型分Y 按照数据标记类型分yn 按照不同目标函数类型分f 按照不同的输入空间类型分X 按照输出空间类型Y,可以分为二元分类,多元分类,回归分析以及结构 ...

  3. Coursera台大机器学习基础课程1

    Coursera台大机器学习基础课程学习笔记 -- 1 最近在跟台大的这个课程,觉得不错,想把学习笔记发出来跟大家分享下,有错误希望大家指正. 一 机器学习是什么? 感觉和 Tom M. Mitche ...

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

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

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

    将Radial Basis Function与Network相结合.实际上衡量两个点的相似性:距离越近,值越大. 将神经元换为与距离有关的函数,就是RBF Network: 可以用kernel和RBF ...

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

    这一节讲的是核化的SVM,Andrew Ng的那篇讲义也讲过,讲的也不错. 首先讲的是kernel trick,为了简化将低维特征映射高维特征后的计算,使用了核技巧.讲义中还讲了核函数的判定,即什么样 ...

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

    将Adaboost和decision tree相结合,需要注意的地主是,训练时adaboost需要改变资料的权重,如何将有权重的资 料和decision tree相结合呢?方法很类似于前面讲过的bag ...

  8. Coursera台大机器学习技法课程笔记10-Random forest

    随机森林就是要将这我们之前学的两个算法进行结合:bagging能减少variance(通过g们投票),而decision tree的variance很大,资料不同,生成的树也不同. 为了得到不同的g, ...

  9. Coursera台大机器学习技法课程笔记04-Soft-Margin Support Vector Machine

    之前的SVM非常的hard,要求每个点都要被正确的划分,这就有可能overfit,为此引入了Soft SVM,即允许存在被错分的点,将犯的错放在目 标函数中进行优化,非常类似于正则化. 将Soft S ...

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

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

随机推荐

  1. Unity Networking API文档翻译(二):The High Level API

    高级API (HLAPI) 是用来提供给Unity 创建多人在线游戏的组件.它是在底层传输层的基础上构建的, 对多人在线游戏提供了很多通用的功能.当传输层支持各种网络拓扑结构的时候,HLAPI是一个功 ...

  2. [USACO2005][POJ2228]Naptime(对特殊环状DP的处理)

    题目:http://poj.org/problem?id=2228 题意:将一天分为N小时,每小时都有一个价值w,有一头牛要睡觉,而它的睡觉是连续的,且第一小时不能算价值,即如果你睡了[a,b],则你 ...

  3. 练习一_使用Git进行代码管理的心得

    2015年9月19日,第一次软工实践课.助教给我们介绍了git,GitHub.显而易见,我并没有听懂.所以整个上午都在找教程,一个字一个字对着敲,然后敲着敲着就出错,回宿舍,继续敲,也是一样的... ...

  4. opencv笔记1:opencv的基本模块,以及环境搭建

    opencv笔记1:opencv的基本模块,以及环境搭建 安装系统 使用fedora22-workstation-x86_64 安装opencv sudo dnf install opencv-dev ...

  5. BZOJ1207 [HNOI2004]打鼹鼠

    Description 鼹鼠是一种很喜欢挖洞的动物,但每过一定的时间,它还是喜欢 把头探出到地面上来透透气的.根据这个特点阿Q编写了一个打鼹鼠的游戏:在一个n*n的网格中,在某些时刻鼹鼠会在某一个网格 ...

  6. BZOJ 1066 POJ 2711 [SCOI2007]蜥蜴

    与POJ 1815 Friendship类似,该题之前也做过 目前处于TLE状态.样例已经通过 1066: [SCOI2007]蜥蜴 Time Limit: 1 Sec  Memory Limit:  ...

  7. groovy-真值

    Boolean expressions Groovy支持标准的条件运算符的布尔表达式: 1 def a = true 2 def b = true 3 def c = false 4 assert a ...

  8. android anr分析方法

    目录(?)[+] 案例1关键词ContentResolver in AsyncTask onPostExecute high iowait 案例2关键词在UI线程进行网络数据的读写   一:什么是AN ...

  9. 用 AIML 开发人工智能聊天机器人

    借助 Python 的 AIML 包,我们很容易实现人工智能聊天机器人.AIML 指的是 Artificial Intelligence Markup Language (人工智能标记语言),它不过是 ...

  10. view视图文件中的input等输入框必须含有name属性,不然控制器里的动作formCollection是没有值的

    view视图文件中的input等输入框必须含有name属性,不然控制器里的动作formCollection是没有值的,就是没有name属性,后台获取不到值