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可以做自我验证



猜你喜欢

转载自blog.csdn.net/f2157120/article/details/80553860