决策树是一种非参数的有监督学习方法。本质上是从训练数据集中归纳出一组决策规则,用来解决分类和回 归问题,规则由:根结点、内部结点、叶子结点(标签)组成的树状图来呈现。
1、如何从数据表中找出最佳节点和最佳分枝?
1)“不纯度”是决策树特征选择的依据,通常用基尼系数或者信息熵(信息增益)来计算,基尼系数的取值在[0,0.5],信息熵的取值在[0,1]
2)我们需要知道:信息熵对不纯度更加敏感,信息熵作为指标时,计算速度缓慢一些,并且决策树生长的更加“精细”。如果有高维度数据和噪声数据,信息熵更容易过拟合,此时我们应选择基尼系数;反之,如果模型拟合程度低,在训练集和测试集上得分都较低时,我们应选择信息熵。
不过也并非绝对,机器学习的参数选择还是应由具体数据而定。
2、如何让决策树停止生长,防止过拟合?
1)限制树的深度;
2)限制在分支后每个子节点的样本量大小;
3)限制每个节点在分支前必须包含的样本量;
4)限制分支是考虑的特征个数:方法比较简单粗暴、有失严谨可能导致决策树学习不足,一般采用PCA等方式来降维;
随机森林是非常具有代表性的Bagging集成算法,它的所有基评估器都是单棵决策树。其中分类树集成的的一片森林就叫做随机森林分类器,回归树所集成的一片森林就叫做随机森林回归器。Bagging装袋法的核心思想是构建多个相互独立的评估器,然后对其预测进行平均或者多次表决原则来决定集成评估器的结果,袋装法的代表模型就是随机森林。
1、随机森林(袋装法)的前提是基分类器如何相互独立,如何做到?
1)随机森林自带随机性,生成的树天生不一样,由random_state 来控制,用法与决策树一致,当固定下来时,会控制生产一片固定的森林,而非让一片森林中只有一颗树
2)袋装法的有放回随机抽样来形成不同的训练集,由不同训练集得到的不同的基分类器自然也就不同了。
2、随机森林的结果一定比单个基分类器好么?
1)图中横轴:单个分类器的错误率;纵轴:随机森林的错误率,
2)图中的直线是森林中的每一颗树都相同,即对应的错误率都相同时的情况;图中的曲线是森林中的每一颗树都不相同,即错误率都不相同时的情况
3)可以从图像上看出,当单个分类器的误差率小于0.5,即准确率大于0.5时,集成的效果是比基分类器要好的。相反,当基分类器的误差率大于0.5,袋装的集成算法就很不理想。所以在使用随机森林之前,一定要检查,用来组成随机森林的单个分类树是否都有至少50%的预测正确率。
criterion: 确定不纯度的方法,默认值为“gini”,为基尼系数。也可选择:“entropy” random_state: 用来设置分支中的随机模式的参数,默人为None,可以输入任意数值,让决策树稳定,一直生长同一棵树 splitter: 控制决策树中分支的随机选项,“best”决策树在分支时虽然随机,但是会选择更重要的特征进行分支,“random”决策树在分支时会更加随机 max_depth: 限制树的最大深度,超过设定深度的树枝会被全部剪掉,可从=3开始尝试 min_samples_split: 一个中间节点所需要的最小样本量,默认 = 2,小于该参数的设定值分支不会发生 min_samples_leaf: 分支后每个子节点所需要的最小样本量,默认 = 1,可输入整数或者浮点数,小于该参数的设定值分支不会发生 max_features:在做最佳分支时,考虑的特征个数 min_impurity_decrease: 限制不纯度降低的大小,默认 = 0,若不纯度的降低>= 该参数设定值,则保留,否则决策树不会继续生长 class_weight: 调节样本均衡的参数,可输入字典、“balanced”、“None”
注: 回归树的常用参数和分类数相同,不同为以下两点: 1、criterion: 衡量分支质量的指标,“mse”、“friedman_mse”、“mae”,常用“mse”,为均方误差,本质是样本真实数据和回归结果的差异,我们希望mse的结果越接近0越好 2、不需要class_weight,因为在回归树种,没有标签分布是否均衡的问题
n_eatimators: 不影响模型复杂度,大就是好,但是达到一定程度之后,会在某个值的上下波动。该参数太大,会造成大的计算量,我们渴望在训练时间和模型效果之间取得平衡,常常利用交叉验证+循环的方式以较大的循环步长粗略确定范围,在以更精确的步长来进一步锁定最优效果所对应的参数值。 criterion: 确定不纯度的方法,默认值为“gini”,为基尼系数。也可选择:“entropy” random_state: 随机森林自带随机性的原因,当该参数固定下来时,会控制生产一片固定的森林,而非让一片森林中只有一颗树 bootstrap: 默认为True,代表采用有放回的随机抽样技术 oof_score: 使用袋装法会让会有1-0.632 的比例的数据落出袋外,可以用来做测试集,使用接口oob_score_查看袋外数据上测试的结果 max_depth: 限制树的最大深度,超过设定深度的树枝会被全部剪掉,可从=3开始尝试 min_samples_split: 一个中间节点所需要的最小样本量,默认 = 2,小于该参数的设定值分支不会发生 min_samples_leaf: 分支后每个子节点所需要的最小样本量,默认 = 1,可输入整数或者浮点数,小于该参数的设定值分支不会发生 max_features:在做最佳分支时,考虑的特征个数 min_impurity_decrease: 限制不纯度降低的大小,默认 = 0,若不纯度的降低>= 该参数设定值,则保留,否则决策树不会继续生长
注: 所有的常用参数全部和随机森林分类器一致。仅有的不同就是回归树与分类树的不同,不纯度的指标,参数Criterion不一致。 criterion: 衡量分支质量的指标,“mse”、“friedman_mse”、“mae”,常用“mse”,为均方误差,本质是样本真实数据和回归结果的差异,我们希望mse的结果越接近0越好
注:学习机器学习算法有一段时间了,喜欢看讲解+实践操练(码一遍)的方式学习,看过不同老师的视频讲解,觉得【菜菜的sklearn】讲的尤其清楚,供大家参考,b站可以搜到。学习的路上一位好的老师很重要,分享出来,希望一同学习的小伙伴可以少走弯路,提升ROI!!哈哈