期末终于过去了,看看别人的总结: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. js的__proto__与propertype的关系

    经典的再也不能经典的一篇博客:http://www.cnblogs.com/snandy/archive/2012/09/01/2664134.html js中最propertype的一些方法的理解h ...

  2. [bzoj 2431][HAOI2009]逆序对数列(递推+连续和优化)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2431 分析: f(i,j)表示前i个数字逆序对数目为j时候的方案数 那么有f(i,j) ...

  3. ECMAScript —— 学习笔记(思维导图版)

    导图

  4. web.xml中配置固定数据

    在web.xml单个servlet中配置的数据的存取 存: <servlet> <description>This is the description of my J2EE ...

  5. 更新java对xml文件的操作

    //更新java在xml文件中操作的内容 public static void upda(Document doc) throws Exception{ //创建一个TransformerFactor ...

  6. [转]DIV+CSS和TABLE的区别

    现在全国大大小小的网站都在搞一场技术“革命”,就是所谓“网站重构”说简单点就是DIV+CSS进行网站制作.用DIV+CSS代替传统的Table制作框架和美化页面.百度搜索优化 在重构之前,肯定要了解为 ...

  7. MyEclipse 开发 Web项目发布到 Tomcat 下的Root 目录

    通常情况下,Web项目是发布到Tomcat下的webapps文件目录下的 . 例如:Web应用项目名称为:stock,则部署到tomcat后,是部署在tomcat/webapps/stock中,网址为 ...

  8. sql-char和varchar,nvarchar的区别

    数据类型的比较 char表示的是固定长度,最长n个字 varchar表示的是实际长度的数据类型 比如:如果是char类型,当你输入字符小于长度时,后补空格:而是varchar类型时,则表示你输入字符的 ...

  9. ztree点击文字勾选checkbox,radio实现方法

    ztree的复选框checkbok,单选框radio是用背景图片来模拟的,所以点击文字即使用label括起checkbox,radio文字一起,点击文字也是无法勾选checkbox. 要想点击ztre ...

  10. linux 的jdk安装

    1.1    解压上传的安装包 1.2   创建安装目录 1.3   将解压后的目录移动到安装目录 1.4    配置环境变量 修改www.qixoo.qixoo.com/etc/profile文件 ...