sklearn决策树和随机森林是colsample_bynode还是colsample_bytree

sklearn随机森林randomforestclassifier就是用的decisiontreeclassifer,decisiontreeclassifer是CART树,文档里面其实已经有信息说明是bynode,
“”The number of features to consider when looking for the best split“”
“”The features are always randomly permuted at each split. Therefore, the best found split may vary, even with the same training data and max_features=n_features, if the improvement of the criterion is identical for several splits enumerated during the search of the best split. To obtain a deterministic behaviour during fitting, random_state has to be fixed.“”
第一个是参数介绍,第二个是最后的NOTE,参数介绍还是有一点没说清楚,是每一次分裂colsample(bynode)一次,还是最开始就colsample(bytree),然后第二段NOTE的意思是每一次选择分裂点,特征都要重新排列,即便max_features是全部feature,如果出现两个feature有相同增益的分裂的时候,有可能选择不同,为了reproduce建树,可以使用random_state。
所以从第二段NOTE推测,机制应该是每一次分裂的时候,特征全部打乱,只按顺序考虑max_features个(如果没找到合适的,会一直找)
另外一个证据是我看了decisiontreeclassifier的源码,底层代码是cython,我只能看到一定程度,看到结构是有一个spliter,然后里面的参数有max_features,并没在build tree的时候对原始X的列进行抽样。
另外随机森林的原文机制就是colsample_bynode,详情参见

留言

熱門文章