栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

01、决策树

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

01、决策树

文章目录

1、 决策树

1.2 sklearn中的决策树 2、分类树

2.1 重要参数

1、criterion2、random_state & splitter3、剪枝参数

1、max_depth2、min_samples_leaf3、min_samples_split4、max_features & min_impurity_decrease确认最优的剪枝参数 4、目标权重参数

1、class_weight & min_weight_fraction_leaf 2.2 重要属性和接口

1.属性2.接口

1、训练的 fit.() 和 准确度 score.()2、apply和predict 3.代码 3、回归树

3.1 重要参数,属性及接口

1、参数:criterion2、属性:feature_importances_,3、接口依然是apply, fit, predict, score最核心4、简单看看回归树是怎样工作的 代码 3、实例:泰坦尼克号幸存者的预测

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、实例:泰坦尼克号幸存者的预测








转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/768241.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号