机器学习-决策树

决策树

1. 决策树算法核心解决的2个问题

1.1 如何选择最优划分的属性

使用不纯度划分。衡量纯度可以分信息熵和基尼值。

1.1.1 信息熵

信息熵(information entropy)是度量不纯度最常用指标。

不纯度计算是基于节点来结算,树中的每个节点都会有不纯度。

1.1 假设当前节点t中第k类样本所含比例为 p k p_k pk,则信息熵定义为:

E n t ( t ) = − ∑ k = 1 c p k l o g 2 p k Ent(t) = -\sum_{k=1}^cp_klog_2{p_k} Ent(t)=k=1cpklog2pk

ps: c表示当前节点中总共有分了c类。

  • Ent(t)值越小,纯度越高。
  • Ent(t)最小值是0,最大值是 l o g 2 c log_2^c log2c,如果是二分类最大值则是1。
  • Ent(t)越接小(接近0),表示样本分类不平衡;越大,表示样本分类平衡
1> 信息增益 ID3

假定样本集合D,其中属性a有V个可能的取值{ a 1 , a 2 . . . a v a^1,a^2...a^v a1,a2...av},其中第V个分支节点包含了集合D在属性a上取值为 a v a^v av的样本,记为 D v D^v Dv,根据上式可以计算出 D v D^v Dv的信息熵;
同时考虑到各分支节点包含的样本量不同,给予分支节点权重 ∣ D v ∣ / ∣ D ∣ |D^v|/|D| Dv/D,于是可以算出属性a对样本集D进行划分所获得的信息增益,

G a i n ( D , a ) = E n t ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ E n t ( D v ) Gain(D,a) = Ent(D)-\sum_{v=1}^V\frac{|D^v|}{|D|}Ent(D^v) Gain(D,a)=Ent(D)v=1VDDvEnt(Dv)

  • 信息增益越大,则使用属性a划分获得的“纯度提升”越大;故使用信息增益最大的属性进行划分。
  • 如果有多个属性均得到了最大的信息增益,则可任选其中之一。
    2)优缺点
  • 不能处理连续型变量
  • 对可取值数目多的属性有所偏好
2> 增益率 C4.5

为解决信息增益对可取数目较多属性的偏好,使用“增益率”

G a i n   r a t i o ( D , a ) = G a i n ( D , a ) I V ( a ) Gain~ratio(D,a) = \frac{Gain(D,a)}{IV(a)} Gain ratio(D,a)=IV(a)Gain(D,a)
分 支 度 I V ( a ) = − ∑ v = 1 v ∣ D v ∣ ∣ D ∣ l o g 2 ∣ D v ∣ ∣ D ∣ 分支度 IV(a) = -\sum_{v=1}^v\frac{|D^v|}{|D|}log_2\frac{|D^v|}{|D|} IV(a)=v=1vDDvlog2DDv

  • 通常属性a的取值数目越多,IV(a)值越大。

  • 注意:增益率对可取数目较少的属性有所偏好

  • 处理连续值:使用二分法;针对连续变量每个间隔划分为两类,分别计算gain_ratio,找出最大的gain_ratio。

故C4.5算法并不是直接选信息增益率最大的属性,而是一个启发式:先找出信息增益(Gain)高于平均水平的属性,在从中选择增益率(Gain_ratio)最高的

1.1.2 基尼值

基尼值:也是针对每个节点计算

G i n i ( t ) = ∑ k = 1 c p k ( 1 − p k ) = 1 − ∑ k = 1 c p k 2 Gini(t) = \sum_{k=1}^cp_k(1-p_k) = 1-\sum_{k=1}^cp_k^2 Gini(t)=k=1cpk(1pk)=1k=1cpk2

  • 基尼值反映从数据集中随机抽取两个样本,其类别标记不一致的概率。
  • 因此,基尼值越小,数据集纯度越高。
  • 一般基尼值介于0-0.5,接近与0表明样本越不平衡;越接近0.5,样本越平衡。
1>基尼指数 CART 二叉树

G i n i   i n d e x ( D , a ) = ∑ k = 1 v ∣ D v ∣ ∣ D ∣ G i n i ( D v ) Gini~index(D,a) = \sum_{k=1}^v\frac{|D_v|}{|D|}Gini(D^v) Gini index(D,a)=k=1vDDvGini(Dv)

所以,选择基尼指数最小的那个属性进行划分。

1.1.3 回归树最优属性划分衡量指标

以上均是针对分类树,对于回归树(预测值为连续型变量):

  1. CART可用于回归树,针对每个叶子节点使用均值作为预测值,使用方差作为不纯度衡量指标
  2. M5-Quinlan,提出针对每个叶子节点使用线性回归预测,使用标准差做为不纯度衡量指标
    方差理解:

未 分 组 样 本 方 差 : s 2 = ∑ i − 1 n ( x − x ˉ ) n − 1 未分组样本方差: s^2 = \frac{\sum_{i-1}^n(x-\bar{x})}{n-1} s2=n1i1n(xxˉ)
分 组 样 本 方 差 : s 2 = ∑ i − 1 k ( M i − x ˉ 2 ) f i n − 1 分组样本方差: s^2 = \frac{\sum_{i-1}^k(M_i-\bar{x}^2)f_i}{n-1} s2=n1i1k(Mixˉ2)fi

  • 在根节点处是全部数据集,求全部的数据的均值,再用每个原数据减去均值求方差
  • 当有分支时,相当于分组数据,针对每个组计算均值 x ˉ \bar{x} xˉ,每个组数据 M i M_i Mi减去其对应组的 x ˉ \bar{x} xˉ,再乘以其所在组数据所占比重 f i f_i fi
  • 选用方差下降做多的属性做划分。

sklearn中使用如下:

  1. mse 均方误差,叶节点使用均值预测

M S E = 1 N ∑ i = 1 n ( f i − y i ) 2 MSE = \frac{1}{N}\sum_{i=1}^n(f_i-y_i)^2 MSE=N1i=1n(fiyi)2

  1. friedman_mse
  2. mae 平均绝对误差,叶节点使用中位数预测。

M A E = 1 N ∑ i = 1 n ∣ f i − y i ∣ MAE = \frac{1}{N}\sum_{i=1}^n|f_i-y_i| MAE=N1i=1nfiyi

均选根据父节点与子节点额差额最大的属性作为最佳划分属性。

1.2 如何让树停止生长,防止过拟合

剪枝处理

1> 预剪枝
  • 原理:指在决策树生长过程中,对每个节点在划分前进行估计,若当前节的划分不能使泛化能力提升,则停止划分并将当前节点标记为叶节点。(用验证集验证泛化能力)
  • 优点:显著减少决策树的训练时间和测试时间开销,降低了过拟合风险。
  • 缺点:但也有欠拟合的风险。(当前划分可能不能提高返还能力,但在其基础上进行的后续划分却有可能导致性能显著提高)
2> 后剪枝
  • 原理:指先从训练集中生成一颗完整的决策树,然后自底向上地对非叶节点进行考察,如果该节点对应的子树替换为叶节点能带来泛化能力的提升,则将该子树替换成叶节点。(用验证集验证泛化能力)
  • 优点:后剪枝通常比预剪枝保留更多的分支,欠拟合风险很小,有效降低过拟合风险,泛化能力优于预剪枝。
  • 缺点:时间开销比预剪枝大的多。

2. 决策树在sklearn中实现

from sklearn.tree import DecisionTreeClassfier   # 分类决策树
from sklearn.tree import DecisionTreeRegressor   # 回归决策树
#分类树与回归树参数一致,只是分类树比回归树多了一个class_weight参数。
DecisionTreeClassifier(criterion='gini', splitter='best', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, class_weight=None, presort='deprecated', ccp_alpha=0.0)

DecisionTreeRegressor(criterion='mse', splitter='best', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, presort='deprecated', ccp_alpha=0.0)

【参考资料】
1.西瓜书
2.菜菜的sklern课堂
3.CDA数据培训

决策树算法是机器学习中常用的一种算法,它通过构建一棵树形结构来进行分类或回归任务。决策树算法有多种不同的变体,其中包括ID3算法、C4.5算法和基本决策树算法。 ID3算法是最早提出的一种决策树算法,它的核心思想是通过计算信息增益来选择最佳的特征进行节点的划分。具体步骤是:从根节点开始,计算每个特征的信息增益,选择信息增益最大的特征作为当前节点的划分特征,然后根据该特征的不同取值建立子节点,再对子节点递归地应用以上步骤,直到所有的特征信息增益很小或没有特征可选为止。 C4.5算法是对ID3算法的改进,它引入了信息增益率(比)来选择特征,解决了ID3算法对于取值较多的特征有偏好的问题。与ID3算法相似,C4.5算法也使用递归的方式构建决策树,但在选择划分特征时,使用信息增益率作为选择的依据。 基本决策树算法是决策树算法的一种简化版,它没有引入信息增益或信息增益率,而是通过计算基尼指数来选择最佳的划分特征。基尼指数衡量了一个特征的不纯度,选择基尼指数最小的特征进行划分。基本决策树算法相对于ID3算法和C4.5算法更简单直观,但在某些情况下可能会有一定的性能损失。 总的来说,决策树算法通过构建一棵树形结构来进行分类或回归任务,其中ID3算法、C4.5算法和基本决策树算法是其中的三种常见变体。每种算法都有其特点和优缺点,选择适合具体问题的算法可以提高算法的性能和准确性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [机器学习算法(3)之决策树算法](https://blog.csdn.net/qq_20412595/article/details/82048795)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值