01、决策树

1、 决策树

  • 关键概念:节点
    根节点:没有进边,有出边。包含最初的,针对特征的提问。
    中间节点:既有进边也有出边,进边只有一条,出边可以有很多条。都是针对特征的提问。
    叶子节点:有进边,没有出边,每个叶子节点都是一个类别标签
    子节点和父节点:在两个相连的节点中,更接近根节点的是父节点,另一个是子节点。

  • 决策树算法的核心是要解决两个问题:
    1)如何从数据表中找出最佳节点和最佳分枝?
    2)如何让决策树停止生长,防止过拟合?

1.2 sklearn中的决策树

在这里插入图片描述

2、分类树

八个参数:Criterion,两个随机性相关的参数(random_state,splitter),五个剪枝参数(max_depth,
min_samples_split,min_samples_leaf,max_feature,min_impurity_decrease)
一个属性:feature_importances_
四个接口:fit,score,apply,predict

2.1 重要参数

1、criterion

在这里插入图片描述
在这里插入图片描述

2、random_state & splitter

  • random_state用来设置分枝中的随机模式的参数,默认None,在高维度时随机性会表现更明显,低维度的数据(比如鸢尾花数据集),随机性几乎不会显现。输入任意整数,会一直长出同一棵树,让模型稳定下来。

  • splitter也是用来控制决策树中的随机选项的,有两种输入值,输入”best",决策树在分枝时虽然随机,但是还是会优先选择更重要的特征进行分枝(重要性可以通过属性feature_importances_查看),输入“random",决策树在分枝时会更加随机,树会因为含有更多的不必要信息而更深更大,并因这些不必要信息而降低对训练集的拟合。这
    也是防止过拟合的一种方式。

3、剪枝参数

在不加限制的情况下,一棵决策树会生长到衡量不纯度的指标最优,或者没有更多的特征可用为止。这样的决策树
往往会过拟合,这就是说,它会在训练集上表现很好,在测试集上却表现糟糕。

剪枝策略对决策树的影响巨大,正确的剪枝策略是优化决策树算法的核心。

1、max_depth

限制树的最大深度,超过设定深度的树枝全部剪掉

实际使用时,建议从=3开始尝试,看看拟合的效果再决定是否增加设定深度。

2、min_samples_leaf

min_samples_leaf限定,一个节点在分枝后的每个子节点都必须包含至少min_samples_leaf个训练样本,否则分
枝就不会发生,或者,分枝会朝着满足每个子节点都包含min_samples_leaf个样本的方向去发生

这个参数的数量设置得太小会引起过拟合,设置得太大就会阻止模型学习数据**。一般来说,建议从=5开始使用。**

3、min_samples_split

min_samples_split限定,一个节点必须要包含至少min_samples_split个训练样本这个节点才允许被分枝,否则分枝就不会发生。

4、max_features & min_impurity_decrease

一般max_depth使用,用作树的”精修

  • max_features限制分枝时考虑的特征个数,超过限制个数的特征都会被舍弃。
    max_features是用来限制高维度数据的过拟合的剪枝参数,但其方法比较暴力,是直接限制可以使用的特征数量
    而强行使决策树停下的参数,在不知道决策树中的各个特征的重要性的情况下,强行设定这个参数可能会导致模型
    学习不足。如果希望通过降维的方式防止过拟合,建议使用PCA,ICA或者特征选择模块中的降维算法。

  • min_impurity_decrease限制信息增益的大小,信息增益小于设定数值的分枝不会发生。这是在0.19版本中更新的
    功能,在0.19版本之前时使用min_impurity_split。

确认最优的剪枝参数

在我们建好的决策树里,我们的模型度量指标就是score。

4、目标权重参数

1、class_weight & min_weight_fraction_leaf

完成样本标签平衡的参数。样本不平衡是指在一组数据集中,标签的一类天生占有很大的比例。比如说,在银行要
判断“一个办了信用卡的人是否会违约”,就是是vs否(1%:99%)的比例。这种分类状况下,即便模型什么也不
做,全把结果预测成“否”,正确率也能有99%。因此我们要使用class_weight参数对样本标签进行一定的均衡,给
少量的标签更多的权重,让模型更偏向少数类,向捕获少数类的方向建模。该参数默认None,此模式表示自动给
与数据集中的所有标签相同的权重。

有了权重之后,样本量就不再是单纯地记录数目,而是受输入的权重影响了,因此这时候剪枝,就需要搭配min_
weight_fraction_leaf这个基于权重的剪枝参数来使用。另请注意,基于权重的剪枝参数(例如min_weight_
fraction_leaf)将比不知道样本权重的标准(比如min_samples_leaf)更少偏向主导类。如果样本是加权的,则使
用基于权重的预修剪标准来更容易优化树结构,这确保叶节点至少包含样本权重的总和的一小部分。

2.2 重要属性和接口

1.属性

属性是在模型训练之后,能够调用查看的模型的各种性质。对决策树来说,最重要的是feature_importances_,能
够查看各个特征对模型的重要性。

2.接口

1、训练的 fit.() 和 准确度 score.()
# 模型实例化
#不加,random_state=30,每刷新最终预测准确度score会一直变,因为模型一直在变;加上后模型就不变了
clf = tree.DecisionTreeClassifier(criterion="entropy"
                                  ,random_state=30       #random_state=可以是任意数
                                  ,splitter="random"   #准确率变高了,保留,变低了可以注释掉
                                  ,max_depth=3           #树的最大深度
#                                   ,min_samples_leaf=10    #分支后这两个子节点都必须有10及以上个样本,否则这两个子节点都被砍掉,(一个够10个,另一个不够,也得都砍掉)
#                                   ,min_samples_split=10   #每个节点必须有10个样本才能往下分,否则不能再分
                                 ) 

#模型训练
clf = clf.fit(Xtrain, Ytrain)

 #返回预测的准确度
score = clf.score(Xtest, Ytest)
score
2、apply和predict
#apply返回每个测试样本所在的叶子节点的索引
clf.apply(Xtest)

#predict返回每个测试样本的分类/回归结果
clf.predict(Xtest)

3.代码

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、回归树

几乎所有参数,属性及接口都和分类树一模一样。需要注意的是,在回归树种,没有标签分布是否均衡的问题,因此没有class_weight这样的参数。

3.1 重要参数,属性及接口

1、参数:criterion

在回归树中,MSE不只是我们的分枝质量衡量指标,也是我们最常用的衡
量回归树回归质量的指标,当我们在使用交叉验证,或者其他方式获取回归树的结果时,我们往往选择均方误差作
为我们的评估(在分类树中这个指标是score代表的预测准确率)。
在这里插入图片描述
在回归中,我们追求的是,MSE越小越好。然而,回归树的接口score返回的是R平方,并不是MSE。

虽然均方误差永远为正,但是sklearn当中使用均方误差作为评判标准时,却是计算”负均方误差“(neg_mean_squared_error) 。这是因为sklearn在计算模型评估指标的时候,会考虑指标本身的性质,均
方误差本身是一种误差,所以被sklearn划分为模型的一种损失(loss),因此在sklearn当中,都以负数表示。真正的
均方误差MSE的数值,其实就是neg_mean_squared_error去掉负号的数字。

2、属性:feature_importances_,

3、接口依然是apply, fit, predict, score最核心

4、简单看看回归树是怎样工作的

from sklearn.datasets import load_boston
from sklearn.model_selection import cross_val_score
from sklearn.tree import DecisionTreeRegressor
boston = load_boston()
regressor = DecisionTreeRegressor(random_state=0)   #实例化

#10次交叉验证的结果
cross_val_score(regressor, boston.data, boston.target, cv=10, 
                scoring = "neg_mean_squared_error")   #boston.data 全部数据,不用划分测试集,训练集
#交叉验证cross_val_score的用法

在这里插入图片描述

代码

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、实例:泰坦尼克号幸存者的预测

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值