sklearn随机森林--参数详解

sklearn-forests of randomized trees

学习器

  • RandomForest: 采取自主采样法构造多个基学习器,并且在学习基学习器时,不是使用全部的特征来选择最优切分点,而是先随机选取一个特征子集随后在特征子集里挑选最优特征进行切分;这种做法会使得各个基学习器的偏差略微提升,但在整体上降低了集成模型的方差,所以会得到整体上不错的模型
    • RandomForestClassifier
    • RandomForestRegressor

Notes:

  • 不同于原始的模型实现(让各个基学习器对样本的分类进行投票),sklearn里随机森林的实现是通过将各个基学习器的预测概率值取平均来得到最终分类
  • 随机森林的行采样(bagging)和列采样(feature bagging)都是为了减小模型之间的相关性使基学习器变得不同从而减小集成模型的方差

  • Extra-Trees(extremely randomized trees):相较于rf进一步增强了随机性,rf是对各个基学习器随机挑选了部分特征来做维特征子集从中挑选最佳的特征切分,而Extra-Trees更进一步,在特征子集里挑选最佳特征时不是选择最有区分度的特征值,而是随机选择这一划分的阈值(该阈值在子特征集里的特征对应的采样后的样本取值范围里随机选取),而不同的随机阈值下的特征中表现最佳的作为划分特征,这样其实增强了随机性,更进一步整大了基学习器的偏差但降低了整体的方差

    • ExtraTreesClassifier
    • ExtraTreesRegressor

调参

  • 最重要的两个参数
    • n_estimators:森林中树的数量,初始越多越好,但是会增加训练时间,到达一定数量后模型的表现不会再有显著的提升
    • max_features:各个基学习器进行切分时随机挑选的特征子集中的特征数目,数目越小模型整体的方差会越小,但是单模型的偏差也会上升,经验性的设置回归问题的max_features为整体特征数目,而分类问题则设为整体特征数目开方的结果
  • 其他参数
    • max_depth:树的最大深度,经验性的设置为None(即不设限,完全生长)
    • min_samples_split,节点最小分割的样本数,表示当前树节点还可以被进一步切割的含有的最少样本数;经验性的设置为1,原因同上
    • bootstrap,rf里默认是True也就是采取自助采样,而Extra-Trees则是默认关闭的,是用整个数据集的样本,当bootstrap开启时,同样可以设置oob_score为True进行包外估计测试模型的泛化能力
    • n_jobs,并行化,可以在机器的多个核上并行的构造树以及计算预测值,不过受限于通信成本,可能效率并不会说分为k个线程就得到k倍的提升,不过整体而言相对需要构造大量的树或者构建一棵复杂的树而言还是高效的
    • criterion:切分策略:gini或者entropy,默认是gini,与树相关
    • min_impurity_split–>min_impurity_decrease:用来进行早停止的参数,判断树是否进一步分支,原先是比较不纯度是否仍高于某一阈值,0.19后是判断不纯度的降低是否超过某一阈值
    • warm_start:若设为True则可以再次使用训练好的模型并向其中添加更多的基学习器
    • class_weight:设置数据集中不同类别样本的权重,默认为None,也就是所有类别的样本权重均为1,数据类型为字典或者字典列表(多类别)
      • balanced:根据数据集中的类别的占比来按照比例进行权重设置n_samples/(n_classes*np.bincount(y))
      • balanced_subsamples:类似balanced,不过权重是根据自助采样后的样本来计算

方法

  • predict(X):返回输入样本的预测类别,返回类别为各个树预测概率均值的最大值
  • predict_log_proba(X):
  • predict_proba(X):返回输入样本X属于某一类别的概率,通过计算随机森林中各树对于输入样本的平均预测概率得到,每棵树输出的概率由叶节点中类别的占比得到
  • score(X,y):返回预测的平均准确率

特征选择

特征重要性评估:一棵树中的特征的排序(比如深度)可以用来作为特征相对重要性的一个评估,居于树顶端的特征相对而言对于最终样本的划分贡献最大(经过该特征划分所涉及的样本比重最大),这样可以通过对比各个特征所划分的样本比重的一个期望值来评估特征的相对重要性,而在随机森林中,通过对于不同树的特征的期望取一个平均可以减小评估结果的方差,以供特征选择;在sklearn中这些评估最后被保存在训练好的模型的参数featureimportances里,是各个特征的重要性值经过归一化的结果,越高代表特征越匹配预测函数

Notes:

  • 此外sklearn还有一种RandomTreesEmbedding的实现,不是很清楚有何特殊用途

你可能感兴趣的:(sklearn随机森林--参数详解)