【机器学习】使用scikitLearn进行决策树分类与回归:DecisionTreeClassifier及DecisionTreeRegressor

36 篇文章 5 订阅
27 篇文章 3 订阅

集成学习导航:决策树与随机森林
【机器学习】集成学习:使用scikitLearn中的VotingClassifier综合多个不同模型进行软硬投票
【机器学习】集成学习:使用scikitLearn中的BaggingClassifier实现bagging和pasting策略
【机器学习】集成学习:使用scikitLearn中的RandomForestClassifier及RandomForestRegressor实现随机森林
【机器学习】集成学习:scikitLearn实现AdaBoost及梯度提升GradientBoosting,及XGBT库

决策树是一种无参数模型,事先不知道参数的个数,如果不对决策树进行正则化处理,则决策树很容易对数据过拟合。
1.决策树生成示例

from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier

iris = load_iris()
X = iris.data[:, 2:] # petal length and width
y = iris.target
#定义了决策树的最大深度
tree_clf = DecisionTreeClassifier(max_depth=2, random_state=42)
tree_clf.fit(X, y)

2.将生成的决策树模型转化为图片

from graphviz import Source
from sklearn.tree import export_graphviz

export_graphviz(
        tree_clf,
        #dot所在路径
        out_file=os.path.join(IMAGES_PATH, "iris_tree.dot"),
        #特征名
        feature_names=iris.feature_names[2:],
        #目标名
        class_names=iris.target_names,
        rounded=True,
        filled=True
    )
Source.from_file(os.path.join(IMAGES_PATH, "iris_tree.dot"))

在这里插入图片描述
上图中gini是不纯度,用1减去各类别在本节点占比的平方之和得到。
在这里插入图片描述
也可以使用熵来计算不纯度,公式为:
在这里插入图片描述
熵值越小越纯,两者区别是熵倾向于产生平衡树,任意节点对应的两颗子树高度差越小,则越平衡。

samples是到达此节点训练的样本数,values代表每个类别训练的实例数。。
scikitlearn中使用CART算法,Classification And Regression Tree ,即分类回归树算法。其特点是只生成2叉树。

3.输出类别的概率
决策树可以输出样本类别的概率,当一个实例样本到达底层的叶节点时,按照实例比例输出最终的概率,其代码如下:

#预测样本的概率
tree_clf.predict_proba([[5, 1.5]])
#输出值为array([[0.        , 0.90740741, 0.09259259]])
#预测样本的类别
tree_clf.predict([[5, 1.5]])
#输出值为array([1])

4.决策树分类时的训练过程:
其成本函数为:
m为样本数,是按左右分支样本数的比例进行不纯度加权。
在这里插入图片描述
寻找最优树的过程的时间复杂度是指数级的,故很难寻找到一颗最优树,所以算法可以理解为一种贪心算法,不追求全局最优,要确保每个树的节点其不纯度最优,再依次向下分裂。

5.正则化手段
除了max_depth参数外,
min_samples_split(分裂前节点必须有的最小样本数)、min_samples_leaf(叶节点必须有的最小样本数量)、min_weight_fraction_leaf(与min_samples_leaf一样,但表现为加权实例总数的占比)、max_leaf_nodes(最大叶节点数量),以及max_features(分裂每个节点评估的最大特征数量)。增大超参数min_或减小max_,起到平衡作用,将使模型正则化。

6.使用决策树进行回归操作:

from sklearn.tree import DecisionTreeRegressor

tree_reg = DecisionTreeRegressor(max_depth=2, random_state=42)
tree_reg.fit(X, y)

在这里插入图片描述
算法最终预测实例值,是该实例所在叶节点所有实例的平均值。

6.回归时的成本函数:
成本函数由不纯度调整为了均方误函数:
在这里插入图片描述

7.决策树的特点:
(1)决策树的突出特点是基本无需对数据进行预处理工作
(2)它是一种白盒模型,易于对分类的结果进行解释。
(3)决策树在预测时,预测需要从根到叶遍历决策树,由于本文是二叉树,m个样本共O(log2(m))个节点,每节点检查一个特征值,故其时间复杂度为:O(log2(m)),,与特征数无关,在大样本集时也预测较快。其训练时的时间复杂度为O (nmlogm) =每层n个特征,m个值,及树的深度
对于小训练集(少于几千个实例),Scikit-Learn可以通过对数据进行预排序(设置presort=True)来加快训练速度,但是这样做会大大降低大训练集的训练速度。
注意,这里的特征数n指每个样本的坐标分量的个数。
(4)决策树喜欢正交的决策边界,其决策边界总垂直于坐标轴,因此对数据的旋转敏感。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

颢师傅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值