随机森林模型
如下图所示,随机森林模型会在原始数据集中随机抽样,构成n个不同的样本数据集,然后根据这些数据集搭建n个不同的决策树模型,最后根据这些决策树模型的平均值(针对回归模型)或者投票(针对分类模型)情况来获取最终结果。举例来说,有1000个原始数据,有放回的抽取1000次,构成一组新的数据(因为是有放回抽取,有些数据可能被选中多次,有些数据可能不被选上),作为某一个决策树的数据来进行模型的训练。随机森林是
文章共3,227字 · 阅读需要大约11分钟
一键AI生成摘要,助你高效阅读
问答
·
随机森林(Random Forest)是一种经典的Bagging模型,其弱学习器为决策树模型。如下图所示,随机森林模型会在原始数据集中随机抽样,构成n个不同的样本数据集,然后根据这些数据集搭建n个不同的决策树模型,最后根据这些决策树模型的平均值(针对回归模型)或者投票(针对分类模型)情况来获取最终结果。
为了保证模型的泛化能力(或者说通用能力),随机森林在建立每棵树的时候,往往会遵循两个基本原则:数据随机和特征随机。
1.数据随机:随机地从所有数据当中有放回地抽取数据作为其中一棵决策树的数据进行训练。举例来说,有1000个原始数据,有放回的抽取1000次,构成一组新的数据(因为是有放回抽取,有些数据可能被选中多次,有些数据可能不被选上),作为某一个决策树的数据来进行模型的训练。
2.特征随机:如果每个样本的特征维度为M,指定一个常数k<M,随机地从M个特征中选取k个特征,在使用Python构造随机森林模型时,默认取特征的个数k是M的平方根:
随机森林在 bagging 的基础上,再次对特征做了一次随机选择,比如对于自助采样后的每一个子数据集(总共 m 个子数据集),
我们并不会像决策数那样用到所有的特征,随机森林会从所有的特征中随机选择一个包含 k(k<n) 个特征的子集。当有一条新数据进来,在随机森林的 m 棵树会各自给出一个答案,如果是分类任务,我们就选择投票法,如果是回归任务则一般选择平均值作为输出。
不像决策树,越靠近根节点的特征重要性越高,在随机森林中,在每个特征都是有可能成为 “主角” 的,也不容易出现过拟合的问题。
class sklearn.ensemble.RandomForestClassifier(n_estimators=100, *, criterion='gini', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features='auto', max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, bootstrap=True, oob_score=False, n_jobs=None, random_state=None, verbose=0, warm_start=False, class_weight=None, ccp_alpha=0.0, max_samples=None)
随机森林是一种元估计器,它在数据集的不同子样本上匹配许多决策树分类器,并使用平均来提高预测精度和控制过拟合。如果bootstrap=True
(默认),则使用max_samples
参数控制子样本的大小,否则将使用整个数据集来构建每棵树。
参数 | 说明 |
---|---|
n_estimators | int, default=100 森林中树木的数量。 在版本0.22中更改:默认值 n_estimators 在0.22中从10更改为100。 |
criterion | {“gini”, “entropy”}, default=”gini” 衡量分割质量的功能。支持对基尼杂质进行评价的"gini系数"和衡量信息增益的“熵” 注:这个参数是树特有的。 |
max_depth | int, default=None 树的最大深度。如果为None,则将节点展开,直到所有叶子都是纯净的,或者直到所有叶子都包含少于min_samples_split个样本。 |
min_samples_split | int or float, default=2 拆分内部节点所需的最少样本数: - 如果为int,则认为 min_samples_split 是最小值。- 如果为float, min_samples_split 则为分数, 是每个拆分的最小样本数。ceil(min_samples_split * n_samples) 在版本0.18中更改:添加了分数的浮点值。 |
min_samples_leaf | int or float, default=1 在叶节点处需要的最小样本数。仅在任何深度的分裂点在 min_samples_leaf 左分支和右分支中的每个分支上至少留下训练样本时才会被考虑。同时,这种情况可能具有平滑模型的效果,尤其是在回归中。- 如果为int,则认为 min_samples_leaf 是最小值。- 如果为float, min_samples_leaf 则为分数, 是每个节点的最小样本数。ceil(min_samples_leaf * n_samples) 在版本0.18中更改:添加了分数的浮点值。 |
min_weight_fraction_leaf | float, default=0.0 一个叶节点上所需的(所有输入样本的)总权重的最小加权分数。如果未提供sample_weight,则样本的权重相等。 |
max_features | {“auto”, “sqrt”, “log2”}, int or float, default=”auto” 寻找最佳分割时要考虑的功能数量: - 如果为int,则 max_features 在每个分割处考虑特征。- 如果为float, max_features 则为小数,并 在每次拆分时考虑要素。- 如果为auto,则为 max_features=sqrt(n_features) 。- 如果是sqrt,则 max_features=sqrt(n_features) 。- 如果为log2,则为 max_features=log2(n_features) 。- 如果为None,则 max_features=n_features 。注意:直到找到至少一个有效的节点样本分区,分割的搜索才会停止,即使它需要有效检查多于 max_features 个数的要素也是如此。 |
max_leaf_nodes | int, default=Nonemax_leaf_nodes 以最好的方式进行“种树”。杂质的相对减少的节点被当作最佳节点。如果为None,则叶节点数不受限制。 |
min_impurity_decrease | float, default=0.0 如果节点分裂会导致杂质的减少大于或等于该值,则该节点将被分裂。 加权减少杂质的方程式如下: N_t / N * (impurity - N_t_R / N_t * right_impurity - N_t_L / N_t * left_impurity) 其中, N 是样本总数,N_t 是当前节点上N_t_L 的样本数,是左子节点中的样本N_t_R 数,是右子节点中的样本数。N ,N_t ,N_t_R 并且N_t_L 都指的是加权和,如果sample_weight 获得通过。版本0.19中的新功能。 |
min_impurity_split | float, default=None 树提升提前停止的阈值。如果节点的杂质高于阈值,则该节点将分裂,否则为叶。 - 从版本0.19 min_impurity_split 开始不推荐使用:在版本0.19中不再推荐使用 min_impurity_decrease 。的默认值 min_impurity_split 在0.23中从1e-7更改为0,并将在0.25中删除。使用min_impurity_decrease 代替。 |
bootstrap | bool, default=False 创建树时是否使用引导程序样本。如果为False,则将整个数据集用于构建每棵树。 |
oob_score | bool, default=False 是否使用袋外样本估计泛化精度。 |
n_jobs | int, default=None 要并行运行的作业的数量。 fit , predict , decision_path 和 apply 都在树中并行化。除非在一个joblib.parallel_backend的内容中,否则None 在joblib 中的表示是1。-1表示使用所有处理器。有关更多详细信息,请参见Glossary。 |
random_state | int, RandomState, default=None 控制3个随机性来源: - 构建树木时使用的示例的引导程序(如果 bootstrap=True )- 在每个节点上寻找最佳分割时要考虑的特征采样(如果 max_features < n_features )- 绘制每个 max_features 的分割有关更多详细信息,请参见Glossary。 |
verbose | int, default=0 在拟合和预测时控制冗余程度。 |
warm_start | bool, default=False 当设置为True时,重用前面调用的解决方案来适应并向集成添加更多的评估器,否则,只会拟合完整的新森林。有关更多详细信息,请参见Glossary。 |
class_weight | {“balanced”, “balanced_subsample”}, dict or list of dicts, default=None 以 {class_label: weight} 的形式与类关联的权重。如果没有给出,所有类的权重都应该是1。对于多输出问题,可以按照y的列的顺序提供一个dict列表。multioutput注意(包括multilabel)权重的每一列应该为每个类定义自己的东西。例如,对于四级multilabel分类权重应该({0,1,1:1},{0,1,1:5},{0,1,1:1},{0:1,1:1}]不是[{1:1},{2:5},{3},{1})。 “平衡”模式使用y的值自动调整输入数据中与类频率成反比的权重,如 n_samples / (n_classes * np.bincount(y)) 。“balanced_subsample”模式与“balanced”模式相同,只是权重是基于自举样本为每棵生长的树计算的。 对于多输出,将y的每一列的权重相乘。 注意,如果指定了sample_weight,那么这些权重将与sample_weight相乘(通过fit方法传递)。 |
ccp_alpha | non-negative float, default=0.0 复杂度参数用于最小代价复杂度剪枝。将选择代价复杂度最大且小于ccp_alpha的子树。默认情况下,不执行修剪。 有关更多详细信息,请参见Minimal Cost-Complexity Pruning。 0.22版中的新功能。 |
max_samples | int or float, default=None 如果bootstrap为真,则需要从X中抽取样本来训练每个基估计量。 - 如果为 None (默认),则绘制X.shape[0] 样本。- 如果为 int ,则绘制 max_samples 样本。- 如果为 float , 则绘制 max_samples * X.shape[0] 样本。因此,max_samples应该在区间(0,1)内。0.22版本新增功能 |
属性 | 说明 |
---|---|
base_estimator_ | ExtraTreesClassifier 子估计器模板,用于创建适合的子估计器的集合。 |
estimators_ | list of DecisionTreeClassifier 拟合的次估计值的集合。 |
classes_ | ndarray of shape (n_classes,) or a list of such arrays 类标签(单一输出问题)或类标签数组列表(多输出问题)。 |
n_classes_ | int or list 类的数量(单个输出问题),或包含每个输出的类数量的列表(多输出问题)。 |
feature_importances_ | ndarray of shape (n_features,) 基于杂质的特性重要性。 |
n_features_ | int 执行 fit 时的特征数。 |
n_outputs_ | int 执行 fit 时输出的数量。 |
oob_score_ | float 使用袋外估计获得的训练数据集的得分。该属性仅在 oob_score 为True 时存在。 |
oob_decision_function_ | ndarray of shape (n_samples, n_classes) 决策函数是通过训练集的袋外估计计算出来的。如果 n_estimators 很小,可能在bootstrap 过程中没有遗漏一个数据点。在这种情况下,oob_decision_function_ 可能包含NaN。该属性仅在oob_score 为True 时存在。 |
更多推荐
已为社区贡献1条内容
所有评论(0)