Machine Learning Techniques 笔记:2-10 Random Forest
Decision Tree: 想办法找到递归的方法,将data切分开。不同情况,使用不同的g
Bagging:通过bootstrap的方式得到不一样的资料,把这些不一样的资料送到某一base algrithm里面,然后得到不同的g,最后由不同的g进行投票。bagging的特点:演算法稳定性很大,通过投票会降低variance
Decision Tree:拿到不同的data后,想办法建一颗不同的树,根分支的条件结合起来。decision tree的特点:一点点切割,资料一点点变化就会导致切下去的地方有所变化,对不同的资料比较敏感,variance变化很大,资料变化一点点,variance会很大。特别是完全长成的树。
能不能将两者结合在一起呢?用bagging的方式将一堆decision tree合起来?
首先,想办法用bootstrap的方式得到大量的data,然后送到decision tree里面的到不同的树,然后将它们公平的投票,得到G。这样,原来CART variance的问题,会被bagging得到缓和。
除了在data做抽取,还可以在festure端做随机抽取,这样得到的分类更加随机,得到的树更不同
这样,festure降低,可能会更有效率
每次看一个随机的子空间,可以看成原来的树(特征)乘以一个投影矩阵,投影矩阵的的每一行就是一个natural basis,平常单位各自的方向。如果投影到任意的方向,看起来要比固定投影到某个方向来的更复杂,更有能力一些
一样一个投影矩阵,投影的方向不再是某个固定方向,而是随机方向,投影过后是若干原有feature合成
Random Forest通常考虑low-dimension的投影,投影过去之后只有若干个比较少的非零项
random-subspace:投影子空间由原来空间转换而来,每次投影都生成独立的子空间
每次投影时,会做一次加权分数的动作,这一perceptioon相同
最后切割是用decision 做决定。
Random Forest的核心之一是bagging
bootstrap:每一轮选择不一样的data,生成不一样的g
没被选择进去的data为out-of-bag data
每次没有抽到的概率为(1-1/N),N次都没有被抽到的概率为(1-1/N)^N
当N--inf,大概由1/3的data不会被抽取到。
红色的作为验证资料,蓝色的data作为training set
Bagging/random forest的目的是得到G,而不是验证g
重点:让未被选中的OOB data,validation set没有被污染。
Eoob:OOB error的表现。
原来Validation的做法:有一堆不同的演算法,送到比较小的data上去,得到g-,再用validation set做选择。
RF:将所有的资料全部丢下去做random forest,顺便算一下OOB错误到底是多少,通过OOBerror来选择在random forest中最适合的模型。没必要切成两个部分,一部分训练,一部分验证,最后在做一个大大整个大大的训练,两次的训练可以合在一起。
移除冗余资料(比如输入出生年月日的栏位与年龄),或与结果无关的data,比如 有没有投保与是否得癌症
从10000维,如何选出300维?比较复杂,也可能选出的300维不是最优,只得到关联关系,得不到因果关系
Decision Tree:每一步都在做feature selection
Feature Selection:组合爆炸的问题
理想状况:每个feature打分,只选择得分最高的若干维度
线性模型容易实现,透过w,非线性模型较难打分
如果有noise加进去,效果就会变差
通过计算原来的效果与加noise之后的效果差
通过乱洗牌,将第i个维度的data污染一下
permutation:随机排序
随机排序过程,无论怎么选举,都会宣导5566,两个差距为0
左边:利用feature组合的方式,随机切割
中间:选出一半data,用bagging的方式切割,得到的结果可能的样子。大的 ooxx是被bootstrap选到的,小的ooxx是没有被选到的,资料更少,可能会犯错。
只有一棵树,故右边的选举结果与中间相同
如果将树的数目增加,右边为不同的树选举产生
中间,bagging得到不同的边界
如果更多,200棵树,右边的边界会更为平滑一些
更加平滑
400棵树
500棵树
600棵树
700棵树
100棵树,边界恰好通过ooxx的中间,更加平滑
左边:bagging,右边:RF
RF更加robust 通过投票的方式,会消除部分杂讯
RF的缺点:会受到随机过程的影响,通常建议G在树的增减一点,performance会不会变化很大,如果很大,则建议选择更多的树。
bagging里面做decision tree。更随机一点,里面在做random forest。
OOB可以做自我验证