Sklearn源码阅读(2):随机森林

Sklearn源码阅读(1):随机森林

    • 决策树的集合
    • 并行计算
    • 基于学习器的多样性

决策树的集合

随机森林原理上就是多颗决策树表决结果。RandomForestClassifier在初始化的时候直接使用了DecisionTreeClassifier来初始化自己的分类器。这里RandomForestClassifier其实也是BaseEnsemble的一个子类,通过对已有的分类器来做各种组合。
在这里插入图片描述
然后通过复制n个(n_estimators,默认10个)决策树对象来构造森林。
Sklearn源码阅读(2):随机森林_第1张图片

并行计算

通过Parallel类来对所有决策树并行计算。Parallel是sklearn中封装的并行方法,支持进程和线程选择。这个模块计划在将来独立做一个阅读。这里基本的使用方法就是 Parallel:设置并行参数,delayed:设置运行函数以及公共参数, for … in …:迭代每个线程需要的主参数
Sklearn源码阅读(2):随机森林_第2张图片

基于学习器的多样性

西瓜书中的一段讲解,通过样本扰动+属性扰动来提高泛化性能:
在这里插入图片描述
这里样本扰动指通过自助采样使每棵树的输入样本产生区别,属性扰动指在选择特征进行切分时,从一部分特征中进行选择。属性扰动这部分从DecisionTreeClassifier就已经做了选择,通过max_features来决定每次选择的特征数量。
Sklearn源码阅读(2):随机森林_第3张图片
提供的参数中页包括了书中介绍的常用的 log2。而对于样本扰动,代码中则使用了调整样本权重的方式来实现。

  • 首先,通过构造分类器时的boostrap参数来确定是否要进行自助采样。如果要进行自助采样,则获取sample_weight参数作为样本权重,sample_weight不存在则权重置1Sklearn源码阅读(2):随机森林_第4张图片
  • 构造一个随机数组,随机数的大小为0-样本数目,数组大小为样本数目Sklearn源码阅读(2):随机森林_第5张图片
  • 对随机数组进行bincount操作, 即:
    • 获取数组中的范围 min, max
    • 新数组大小为max-min+1,每一位表示从min 到 max 中所有整数出现的数量
    • 对随机数组中的数进行计数,放到新数组中
  • 这样便产生了大小为n_sample的权重数组,如果权重为0,则表示该样本没有被抽取,如果权重为n,则表示该样本在有放回的抽样中被抽取到了N次。在这里插入图片描述

你可能感兴趣的:(机器学习)