转自:http://blog.sina.com.cn/s/blog_641289eb0101e2ld.html

Part 2总结一下一个粗略的建模过程:

  1. 首先,弄清楚问题是什么,能不能用机器学习的思路去考虑:
    1. 是否有pattern?
    2. 是否规则不明确?
    3. 是否有数据?
  2. 如果可以用,那么考虑,问题的学习目标是什么,有多少feature,有多少数据,应该用什么error measure(Learning from data 有一节专门讲这个,客户能提供吗?如果不能,我们找一个能说服自己的,或者找一个容易做的。具体参考课件)
    1. 数据和feature之间的关系,practical来说是N大于等于10倍的自由度。
    2. 这个error measure或者说performance measure是否有个baseline我们可以比较呢?
  3. 选定算法,从简单的到复杂的都要考虑:
    1. 一般来说,如果有足够多的数据,简答的算法不一定比复杂的差。
    2. 要考虑用户的需求,是否需要最后的模型能够被人理解,还是说一个黑盒子就可以了。
  4. 分割数据为Training和Testing (这一点一定要在做任何数据处理前完成!处理,只应该在train上做,确定方案后在运用到test上去)
  5. 对train数据进行清理,分析什么的(重要Update: 这里的数据清理和分析必须是和数据中的class variable没有任何联系!如果有任何联系,都请放到Single Validation或者Cross validation里面去做!一个经常出现的错误就是在这一步进行特征选择,然后在选择完成后的数据集上进行Cross Validation,这样做通常会得到over-optimistic的结果。具体文献可以参考Statistical Learning里面的Cross Validation那一个小节)。
  6. 在Training上进行建模学习:
    1. 我们有很多Model可以选择,而一个Model下面又可以有很多参数可以调试,或者feature可以选择。这就需要我们通过Single Validation或者Cross Validation来看看这些Model在不同的参数下表现如何。
    2. 这样,我们从一个Model中选出其中Eval最好的那个组合,作为该模型的代表h。
    3. 对于另一个模型,重复第二步,直到全部模型都考虑了。
    4. 对比所有的这些代表,找出其中Ecv最好的那个h对应的Model M。
    5. 用所有的训练数据(Model Selection by Best Eval--Learning from Data),用M和它的最优参数训练一得到一个g*,最为最终的选择,同时我们做一下实验得到g*的training error--Etraiin。
  7. 在Testing上用g*进行测试。完成以后和baseline进行比较。如果好过baseline,那OK。继续试试更多算法看能不能提高。如果低于Baseline,那要进行以下考虑:
    1. 如果Etesting >> Etrain, 那么我们遇到了overfitting,那么我们可能需要:
      1. 更多的训练数据
      2. 或者更小的feature set
    2. 反之,如果Etesting于Etrain差别不大,那么我们遇到了underfitting,那么我们可能需要更多的feature(获取更多,或者在现有的基础上创建新的,比如polynomial features)
  8. 调整后,重新建模,直到满足条件为止。
上面提到的Validation可以是Single Validation,也可以是Cross Validation.如果计算量允许,就用cross validation(通常是5或者10 fold)。
===============================================================================================
这里插一些Andrew Ng在斯坦福的机器学习里提到的东西:
上面的建模部分,如果一开始就用较多较复杂的算法来做,可能会耗时间比较多。建议选用一个简单的算法,先用上面的步骤试试,看看结果怎样?是有overfitting还是underfitting,这需要判断Etesting和Etrain之间的gap是不是很大。不过,多大算大呢...
 
一个方法是画一下Learning Curve,即Eval, Etrain vs Training size的曲线,具体内容可以去看课程的课件,大概就是说如果是overfitting,随着Training size的增加,Eval和Etrain之间的gap会逐渐的减小,而如果是underfitting,就不会。
 
构建learning curve的方法是,随机的从training set中抽取i个数据的subset,在上面进行建模,然后将模型用在这个subset和整个validation set上进行验证得到Etrain和Eval,这个过程重复20到50次,最后的平均作为i个数据的代表。之后测试i+1,i+2.....
 
不过,这貌似只适用于single validation,cross validation的情况下要怎么做还不清楚。不过,也许也没必要在这个问题上考虑cross validation,毕竟这只是一个dirty approach,看看大概是怎么个情况。
 
===================================================================
另一个问题,如果是需要对数据集(已经是分割过的数据集train-test split中的train)做Sampling来处理imbalanced data的情况下做cross validation,那么应该做如下的处理(假设是5 fold):
1、选出一个fold做validation set,剩下的四个set做training
2、对training做sampling的处理,训练并得到一个hypothesis
3、在validation上测试效果。
4、换一组,重复以上步骤。最后求平均。
这个东西貌似很容易就做成了错误的方法:拿着整个train数据集做了Sampling,再去做cross validation。不对哦!!!简而言之,如果是要对数据分布做变化的操作,都要小心这个问题。
 
以上。

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

  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. JavaScript基础---AJAX

    内容提纲: 1.XMLHttpRequest 2.GET与POST 3.封装Ajax  发文不易,转载请注明链接出处,谢谢! 2005年Jesse James Garrett发表了一篇文章,标题为:“ ...

  2. iOSS--生成有logo的二维码

    - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typica ...

  3. Java设计模式-责任链模式(Chain of Responsibility)

    接下来我们将要谈谈责任链模式,有多个对象,每个对象持有对下一个对象的引用,这样就会形成一条链,请求在这条链上传递,直到某一对象决定处理该请求.但是发出者并不清楚到底最终那个对象会处理该请求,所以,责任 ...

  4. Java基础-String 存储机制管理

    JVM运行的时候,将内存分为两个部分,一部分是堆,一部分是栈.堆中存放的是创建对象,而栈中存放的则是方法调用过程中的局部变量或引用.在设计JAVA字符串对象内存实现的时候,在堆中又开辟了一块很小的内存 ...

  5. [Asp.net mvc] Asp.net mvc Kendo UI Grid的使用(四)

    有段时间没写博客了,工作状态比较忙,抽空继续总结下Grid的使用,这次主要介绍模板以及其他官网介绍不详尽的使用方法.先Show出数据,然后讲解下.后台代码: public ActionResult O ...

  6. python多态

    多态是面向对象语言的一个基本特性,多态意味着变量并不知道引用的对象是什么,根据引用对象的不同表现不同的行为方式.在处理多态对象时,只需要关注它的接口即可,python中并不需要显示的编写(像Java一 ...

  7. int方法

    代码 #int内部功能 name='Kamil.Liu' age=18 num=-11 print(dir(age)) print(age.bit_length())#返回表示当前数字占用的最少位数 ...

  8. BZOJ-1607 [Usaco2008 Dec]Patting Heads 轻拍牛头 筛法+乱搞

    1607: [Usaco2008 Dec]Patting Heads 轻拍牛头 Time Limit: 3 Sec Memory Limit: 64 MB Submit: 1383 Solved: 7 ...

  9. NOIP2011 普及组 T3 洛谷P1309 瑞士轮

    今天题做太少,放道小题凑数233 题目背景 在双人对决的竞技性比赛,如乒乓球.羽毛球.国际象棋中,最常见的赛制是淘汰赛和循环赛.前者的特点是比赛场数少,每场都紧张刺激,但偶然性较高.后者的特点是较为公 ...

  10. c++实现gray code(格雷码)

    今天别人问的一道题,强调用分治法实现 =.= 百度了一下格雷码,然后写了一下. 关于格雷码大家看百度的吧,特别详细,贴个图: 代码如下(header_file.h是我自己写的一个头文件,包括常见的ve ...