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


    转自: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。不对哦!!!简而言之,如果是要对数据分布做变化的操作,都要小心这个问题。
     
    以上。
  • 相关阅读:
    数据库(一)数据库优点,常用数据库,创建数据库,设计创建数据表,数据类型,数据表操作,完整性约束(非空,主键,唯一,默认,外键)
    mybatis 中mapper文件 if判断 <if test="validCoupon == '1'">类似问题
    如何解决JavaScript中UUID作为方法参数在方法中无法传递而数字却正常传递的问题
    js 将子页面得到的数据返回并赋值给父页面
    在IE下面报错"缺少函数",函数明明是有的,其他浏览器下正常
    javaPOI把excel转换成html 中去掉序号列
    linux 常用命令(个人用)
    mysql 统计 group
    es 复制索引
    elasticsearch 判断某个字段是否含有大写字母
  • 原文地址:https://www.cnblogs.com/573177885qq/p/4652237.html
Copyright © 2020-2023  润新知