【Sklearn-驯化】sklearn中决策树cart的用法,看这篇就够了

【Sklearn-驯化】sklearn中决策树cart的用法,看这篇就够了

 
本次修炼方法请往下查看
在这里插入图片描述

🌈 欢迎莅临我的个人主页 👈这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合,智慧小天地!
🎇 免费获取相关内容文档关注:微信公众号,发送 pandas 即可获取
🎇 相关内容视频讲解 B站

🎓 博主简介:AI算法驯化师,混迹多个大厂搜索、推荐、广告、数据分析、数据挖掘岗位 个人申请专利40+,熟练掌握机器、深度学习等各类应用算法原理和项目实战经验

🔧 技术专长: 在机器学习、搜索、广告、推荐、CV、NLP、多模态、数据分析等算法相关领域有丰富的项目实战经验。已累计为求职、科研、学习等需求提供近千次有偿|无偿定制化服务,助力多位小伙伴在学习、求职、工作上少走弯路、提高效率,近一年好评率100%

📝 博客风采: 积极分享关于机器学习、深度学习、数据分析、NLP、PyTorch、Python、Linux、工作、项目总结相关的实用内容。

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 


下滑查看解决方法

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

  

🎯 1. 基本介绍

  决策树(Decision Tree)是一种常用的机器学习算法,可以用于分类和回归问题。它使用树状结构来表示决策规则,并通过一系列条件进行判断和决策。
  在训练决策树时,通常采用自顶向下的递归方法,通过选择能够使数据集的纯度提高最大的特征,将数据集分割成更小的子集。纯度是指数据集中同一类别数据的占比或误差的度量,常用的纯度衡量指标有基尼系数、信息熵等。
  决策树可以根据数据集的特点进行灵活的分类和回归预测,且易于理解和解释。它具有可解释性强、处理缺失值和离散特征能力强等优点。然而,决策树在处理高维数据和过拟合问题上有一定的限制,因此通常需要结合其他方法进行优化和改进,如随机森林、梯度提升树等。
  在scikit-learn(简称sklearn)库中,决策树模型通过DecisionTreeClassifier和DecisionTreeRegressor类实现。

💡 2. 原理介绍

  决策树的构建基于以下准则:

2.1 信息增益

  用于分类问题,衡量数据集的不确定性减少量。具体的公式如下所示,其中,d为样本集,a为离散属性,v为为类别属性a的种类个数, ∣ d ∣ |d| d为所以样本个数, ∣ d v ∣ |d^v| dv为a属性中某个类别的样本个数,后面这一项相关于一个权重,相当于类别样本越多权重越大。:
G a i n ( d , a ) = E ( d ) − ∑ v = 1 v ∣ d v ∣ ∣ d ∣ E ( d v ) Gain(d,a)=E(d)-\sum_{v=1}^{v}\frac{|d^v|}{|d|}E(d^v) Gain(d,a)=E(d)v=1vddvE(dv)
  其中E(d)为信息熵用来描述事物的混乱情况,熵越大越混乱,具体的数学表达如下,其中d为样本集合,k为样本中的类别, p k p_k pk为第k类样本说占的比例。:
E ( d ) = − ∑ k = 1 ∣ y ∣ p k l o g 2 p k E(d) = -\sum_{k=1}^{|y|}p_klog_2p_k E(d)=k=1ypklog2pk
  缺点: 1. 这个评价标准有一个不好的地方在于,对于某个类别,如果划分的种类越多,那么该类别的重要性就越高,这很明显不错,比如给每个样本进行一个标号,那么这个特征肯定重要性会很高,但是这样训练处理的模型泛化能力不佳。2. 该指标是全局的特征选择,不能具体寻找出这个属性在具体哪个值最优。3.而且只能处理离散值,不能处理连续值(如非要处理:可以通过对连续值进行大小排序取中位数,其实就是一种离散化的处理方法)
  优点: 1.计算了所有样例的统计信息,对噪声不敏感。2.简单容易计算

2.2 基尼指数

  和信息增益一样同样是用来评价划分后的效果的一种指标,基尼指数也是一种评估分裂效果的指标,该指标可以选出哪个特征并且哪个值是最优的,具体的数学表达如下所示:
G i n i ( d ) = 1 − ∑ k = 1 ∣ y ∣ p k 2 Gini(d)=1-\sum_{k=1}^{|y|}p_k^2 Gini(d)=1k=1ypk2
G i n i ( d , a ) = ∑ v = 1 v ∣ d v ∣ d G i n i ( d v ) Gini(d,a)=\sum_{v=1}^{v}\frac{|d^v|}{d}Gini(d^v) Gini(d,a)=v=1vddvGini(dv)
  其中,d为样本集,a为离散属性,v为为类别属性a的种类个数,为所以样本个数,为a属性中某个类别的样本个数。

2.3 CART树的原理推导

  • 分类树(每颗子树都是二叉树):
  1. 设置结点的训练数据集d, 计算所以特征对数据集d的基尼指数,并对每一个特征A,对其可能取的每一个值a,根据A是否等于a,将数据集d划分为 d 1 d_1 d1(等于a)和 d 2 d_2 d2(不等于a)两部分,利用上式的公式计算A=a时的基尼指数。
  2. 在所以可能的特征以及其每个值中,选择基尼指数最小的特征及其对应的最优特征与最优切分点,从该节点生成两个子节点,并将数据集d依据特征分配到两个子节点中去。
  3. 对生成的两个子节点重复调用1,2,直到满足停止条件
  4. 输出决策树(CART)
  • 回归树: 其原理和分类树基本一致,只是每次进行树划分时选择的评价指标不一致,分类树是根据基尼指数来进行最优特征最优值,而回归树采样均方差最小来选择最优特征和最优值,因此,下面就介绍回归树的最优值选择方法:

e r r d = ∑ i = 1 ∣ d ∣ ( y i − y ‾ ) 2 err_d=\sum_{i=1}^{|d|}(y_i-\overline{y})^2 errd=i=1d(yiy)2
e r r a l l = e r r ( d 1 ) + e r r ( d 2 ) err_{all} = err(d_1) + err(d2) errall=err(d1)+err(d2)

  • 其中, e r r d err_d errd为数据集d的均方差, y ‾ \overline{y} y是数据集d的均值,因此,回归树就是遍历所以的特征以及该特征下的每个值,以此值将数据划分为 d 1 d_1 d1 d 2 d_2 d2,然后再计算该划分下的误差和 e r r a l l err_{all} errall,选择误差和最小的最优特征最优值,然后接着重复分类树的节点分裂方法。

🔍 3. 代码实践

3.1 sklearn代码实践

  下面通过读取sklearn中自带的分类数据集来实践决策树的处理过程,具体的代码如下所示:

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score

# 加载iris数据集
iris = load_iris()
X, y = iris.data, iris.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 创建决策树分类器实例
tree_clf = DecisionTreeClassifier()

# 训练模型
tree_clf.fit(X_train, y_train)

# 在测试集上进行预测
y_pred = tree_clf.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"准确率: {accuracy:.2f}")

3.2 高阶用法

  DecisionTreeClassifier是scikit-learn中用于分类任务的决策树模型。下面是一些常用的参数介绍:

  • criterion: 选择划分特征的衡量指标。可选的值包括"gini"和"entropy",默认为"gini"。基尼系数(gini)和信息熵(entropy)都是用来衡量划分的纯度,选择哪个衡量指标取决于具体问题。
  • max_depth: 决策树的最大深度。用于控制决策树的复杂度和防止过拟合。默认为None,表示不限制决策树的深度。
  • min_samples_split: 拆分内部节点所需的最小样本数。如果某个内部节点的样本数小于该值,则不会再划分。默认为2。
  • min_samples_leaf: 叶节点所需的最小样本数。如果某个叶节点的样本数小于该值,则该叶节点会被剪枝,合并到其他叶节点上。默认为1。
  • max_features: 寻找最佳划分特征时要考虑的特征数量。可以是整数(表示考虑的特征数量)或浮点数(表示考虑特征比例)。默认为"auto",表示考虑所有特征。
  • random_state: 随机种子。用于控制每次训练结果的随机性。默认为None。

🔍 4. 注意事项

  • 决策树容易过拟合,特别是当树很深时。可以通过设置max_depth参数来限制树的最大深度。
  • 特征选择和剪枝技术可以用来提高模型的泛化能力。
  • 决策树对数据中的小变化非常敏感,因此对噪声和异常值敏感。

🔍 5. 总结

  决策树是一种强大的模型,能够捕捉数据中的非线性关系。scikit-learn提供了易于使用的决策树实现,适用于分类和回归任务。通过本博客的代码示例,我们学习了如何创建决策树模型,进行训练、预测和评估。希望这篇博客能够帮助你更好地理解决策树模型,并将其应用于实际的机器学习问题中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

算法驯化师

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

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

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

打赏作者

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

抵扣说明:

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

余额充值