资讯专栏INFORMATION COLUMN

CART决策树和随机森林

DDreach / 2765人阅读

摘要:分裂规则将现有节点的数据分裂成两个子集,计算每个子集的子集的其中表示类别个数,表示分类为的样本在子集中的比例,可以理解为该子集中的数据被错误分类的期望损失分裂后的其中为分裂之前的样本数,和为分裂之后两个子集的样本数选取使得最小的特征和分裂

CART

分裂规则

将现有节点的数据分裂成两个子集,计算每个子集的gini index

子集的Gini index: $$gini_{child}=sum_{i=1}^K p_{ti} sum_{i" eq i} p_{ti"}=1-sum_{i=1}^K p_{ti}^2$$其中K表示类别个数,pti表示分类为i的样本在子集中的比例,gini index可以理解为该子集中的数据被错误分类的期望损失

分裂后的Gini index: $$gini_s= frac{N_1}{N}gini_{child_1}+frac{N_2}{N}gini_{child_2}$$其中N为分裂之前的样本数,N1和N2为分裂之后两个子集的样本数

选取使得ginis最小的特征和分裂点进行分裂

减少过拟合

设置树的最大深度(max_depth in sklearn.tree.DecisionTreeClassifier)

设置每个叶子节点的最少样本个数(min_samples_leaf in sklearn.tree.DecisionTreeClassifier)

剪枝

样本均衡问题

若样本的类别分布极不均衡,可对每个类i赋予一个权重wi, 样本较少的类赋予较大的权重(class_weight in sklearn.tree.DecisionTreeClassifier),此时算法中所有用到样本类别个数的地方均转换成类别的权重和。例如$$p_{ti}=frac{w_{i}m_i}{sum_{i=1}^K w_{i}m_i}$$其中mi为在子集中类别为i的样本数,此时分裂后的Gini index为$$gini_s=frac{weightsum(N_1)}{weightsum(N)}gini_{child_1}+frac{weightsum(N_2)}{weightsum(N)}gini_{child_2}$$

回归问题

和分类问题相似,只是分裂规则中的ginichild变为了mean squared error,即$$MSE_{child}=frac{1}{N_{child}}sum_{i in child}(y_i-ar{y}_{child})^2$$

Random Forest

随机性

在每次建立新树的时候通过bootstrap方法从N个训练样本中有放回地随机选出N个新的样本(bootstrap in sklearn.ensemble.RandomForestClassifier)

在每次分裂的时候从所有特征中随机选取部分特征进行查找(max_features in sklearn.ensemble.RandomForestClassifier)

样本均衡问题

同CART一样,样本较少的类赋予较大的权重(class_weight in sklearn.ensemble.RandomForestClassifier)

需要注意的是权重对于bootstrap的使用并没有影响,即bootstrap方法始终是等概率地从N个样本中选择,sklearn中的源码如下

if forest.bootstrap:
    n_samples = X.shape[0]
    if sample_weight is None:
        curr_sample_weight = np.ones((n_samples,), dtype=np.float64)
    else:
        curr_sample_weight = sample_weight.copy() #已经包含了class_weight设为"balanced"或dict类型时的类别权重

    indices = _generate_sample_indices(tree.random_state, n_samples) #bootstrap
    sample_counts = np.bincount(indices, minlength=n_samples)
    curr_sample_weight *= sample_counts #根据新的样本集合中每个原始样本的个数来调整样本权重
    ### 根据类别权重调整样本权重
    if class_weight == "subsample":
        with catch_warnings():
            simplefilter("ignore", DeprecationWarning)
            curr_sample_weight *= compute_sample_weight("auto", y, indices)
    elif class_weight == "balanced_subsample":
        curr_sample_weight *= compute_sample_weight("balanced", y, indices)

    tree.fit(X, y, sample_weight=curr_sample_weight, check_input=False)
else:
    tree.fit(X, y, sample_weight=sample_weight, check_input=False)  

OOB(out-of-bag estimate)

对每一个训练样本zi=(xi, yi),使用没有选中该样本的那些树构建该样本的随机森林预测

计算所有训练样本的预测准确率(oob_score_ in sklearn.ensemble.RandomForestClassifier)

很明显,只有bootstrap设为True时OOB才是有效的

特征重要性

在CART构建过程中使用某特征进行分裂导致的gini系数的总的减少越多,那么认为该特征的重要性就越大

随机森林中的特征重要性是各个决策树中的重要性总和或平均(feature_importances_ in sklearn.ensemble.RandomForestClassifier)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/18662.html

相关文章

  • python在Scikit-learn中用决策树和随机森林预测NBA获胜者

    摘要:在本文中,我们将以的决策树和随机森林预测获胜者。用决策树和随机森林预测获胜者导入数据集并解析日期导入熊猫作为。这将帮助我们查看决策树分类器的预测是否正确。混淆矩阵显示了我们决策树的正确和不正确的分类。 showImg(https://segmentfault.com/img/bVbcr26?w=750&h=383); 在本文中,我们将以Scikit-learn的决策树和随机森林预测NB...

    learning 评论0 收藏0
  • 如何在Python中从零开始实现随机森林

    摘要:在本教程中,您将了解如何在中从头开始实现随机森林算法。如何将随机森林算法应用于预测建模问题。如何在中从头开始实现随机森林图片来自,保留部分权利。这被称为随机森林算法。如何更新决策树的创建以适应随机森林过程。 欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 决策树可能会受到高度变异的影响,使得结果对所使用的特定测试数据而言变得脆弱。 根据您的测试数据样本构建多个模型(称为套袋)可...

    MasonEast 评论0 收藏0
  • 【数据科学系统学习】机器学习算法 # 西瓜书学习记录 [11] 集成学习

    摘要:事实上,如何产生并结合好而不同的个体学习器,恰是集成学习研究的核心。根据个体学习器的生成方式,目前的集成学习方法大致可分为两大类。是一族可将弱学习器提升为强学习器的算法。与随机森林是并形式集成学习方法最著名的代表。 本篇内容为西瓜书第 8 章集成学习 8.1 8.2 8.3 8.4 8.5 的内容: 8.1 个体与集成 8.2 Boosting 8.3 Bagging与随机森林 8....

    null1145 评论0 收藏0
  • (XGBoost)提升树入门介绍(Inrtoduction to Boosted Trees)

    摘要:提升树入门介绍这是一篇翻译文,翻译的内容是官网的原理介绍这篇文章。一个和决策树有些许不同,决策树的叶子结点只有决策值。对于其他的损失函数来说,得到一个好的形式很不容易。 提升树入门介绍(Inrtoduction to Boosted Trees) Author : Jasper Yang School : Bupt 这是一篇翻译文,翻译的内容是 XGBoost 官网的原理介绍 I...

    2shou 评论0 收藏0
  • 机器学习:随机森林学习笔记

    摘要:前言随机森林是一个很强大的模型,由一组决策树投票得到最后的结果。要研究清楚随机森林,首先需要研究清楚决策树,然后理解随机森林如何通过多棵树的集成提高模型效果。 前言 随机森林是一个很强大的模型,由一组决策树投票得到最后的结果。要研究清楚随机森林,首先需要研究清楚决策树,然后理解随机森林如何通过多棵树的集成提高模型效果。 本文的目的是将自己学习这个模型时有用的资料汇总在一起。 决策树基本...

    arashicage 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<