随机森林 - 分类森林
基础实现
建立森林
画出随机森林和决策树在一组交叉验证下的效果对比
重要参数
n_estimators
默认值为 10,表示森林中树木的数量,一般来说 n_estimators 越大,模型的效果往往越好但相应的,任何模型都有决策边界,n_estimators 达到一定的程度之后,随机森林的精确性往往不在上升或开始波动,并且 n_estimators 越大,需要的计算量和内存也越大,训练的时间也会越来越长因此我们要找到训练难度和模型效果之间的平衡
n_estimators 在现有版本的默认值是 10,在即将更新的 0.22 版本中将会被修正为 100
random_state
随机森林中其实也有 random_state,用法和分类树中相似,只不过在分类树中,一个 random_state 只控制生成一棵树,而随机森林中的 random_state 控制的是生成森林的模式
注意我们这里的 random_state 是随机森林的,不是每个决策树的,随机森林的 random_state 决定每一棵树的 random_state,前者固定,后者随之固定,如果固定了随机森林的 random_state 那么里面每棵决策树的 random_state 也会固定,但不一定是 0
这里补充一点无论是 DataFrame、Series 还是 ndarray,其中的每个元素不是数值型,就是字符串类型,没有自定义类型,如果用 rfc.estimators_生成一个 Series,那么本来的 DecisionTreeClassifier 对象就会变成一个字符串,无法调用方法和属性等
不同的决策树 random_state 不一样体现了用“随机挑选特征进行分枝“的方法得到的随机性。并且我们可以证明,当这种随机性越大的时候,袋装法的效果一般会越来越好。用袋装法集成时,基分类器应当是相互独立的,是不相同的。
但这种做法的局限性是很强的,当我们需要成千上万棵树的时候,数据不一定能够提供成千上万的特征来让我们构筑尽量多尽量不同的树。因此,除了 random_state。我们还需要其他的随机性。
貌似决策树的 random_state 并不影响根节点以外节点的特征选择,这里以后会验证一下
boostrap
默认 True,接收布尔值,在建立森林的时候,是否使用构建自助集的方式,一般用于 n 和 n_estimators 足够大的时候(前面有解释)一般不会改,就使用默认 True
oob_score
默认 False,在建立森林的时候,是否采用袋外样本来测试模型的准确性。指定为 True 并在模型实例化训练完后,可以用 oob_score_来查看袋外数据上测试的准确性,且这种方法需划分训练集和测试集,直接使用袋外数据即可
重要属性
之前用到了.estimators_和.oob_score 作为树模型的集成算法,随机森林还有.feature_importances_这个属性
重要接口
与决策树相同,有 apply、fit、predic、score,还多一个 predict_proba,这个接口返回每个测试样本对应的被分到每一类标签的概率,有几个标签就返回几个概率。返回对象的 shape 是
使用 Bagging 的另一个必要条件
之前说过,使用袋装法要求基评估器尽量独立。其实还有另一个必要条件:基分类器的判断准确率至少超过随机分类器,也就是说,基分类器的判断准确率至少要超过 50%
绘制基分类器误差率为的随机森林和决策树的误差率
从图像中可以看出,当基分类器的误差率小于 0.5,即准确率大于 0.5 时,集成的效果比基分类器要好。相反,当基分类器的误差率大于 0.5,袋装集成算法就失效了所以在使用随机森林之前,一定要检查, 用来组成随机森林的分类树们是否都有至少 50%的预测准确率
回归森林和分类森林基本一样,在后面的例子中会进行补充,不再单独写一节
视频作者:菜菜TsaiTsai链接:【技术干货】菜菜的机器学习sklearn【全85集】Python进阶_哔哩哔哩_bilibili
版权声明: 本文为 InfoQ 作者【烧灯续昼2002】的原创文章。
原文链接:【http://xie.infoq.cn/article/3b06cc4a14dddefdd04b33d7d】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论