决策树算法如何切分特征如何选择节点、信息增益、熵值计算

决策树算法

决策树

树模型

决策树:从根节点开始一步步走到叶子节点(这一过程叫做决策的过程,叶子节点就是决策)。

所有的数据最终都会落到叶子节点,既可以做分类,也可以做回归。

例如下面的图示就是一个决策的过程。

在这里插入图片描述

根节点:第一个选择的节点。

非叶子节点与分支:中间的决策过程

叶子节点:最终的决策结果。

节点:没增加一个节点相当于在数据中切一刀,将数据分类。

决策树的训练于测试

训练阶段:从给定的训练集构造出一棵树(从根节点开始选择特征,一步一步往下分,但是如何选择出第一个第二个…的特征呢,也就是划分特征的选择,这个分类特征的选择后面会讲到,还会涉及到树的剪枝处理,包括:预剪枝和后剪枝,以及连续数据的处理,缺失值的处理。)

测试阶段:将数据放入模型根据构造的树模型从上到下流动。

如何选择切分特征呢?也就是如何选择节点?

​ 跟节点的特征选择应该用那个特征呢?接下来的第二特征,第三特征呢?这些特征如何选择呢?在一批数据中的特征显然是多样的,但是我们不能随意地选取一个特征放到任意的一个节点上,这显然是不对的,根据排列组合原理,这样随意选择一个特征随意放到一个节点上,随后得到的模型是很多的,我们当然是要得到一个最优模型。

​ 我们的目标应该是没一个节点能够最大限度的将数据分类,其中越往上的节点的分类效果越好。那么这个分类效果就是一个标准,通过建立这样一个标准,来计算不同特征进行分支选择后的分类情况,找出来最好的那个当成节点,然后在选择下面的节点的时候,继续在剩余的特征中计算每个特征进行分支选择后的分类情况,找出来分类最后的那个当成第二节点,一次类推。

那么这个衡量标准是什么呢?就是熵值

衡量标准:熵

熵:熵是表示随机变量不确定性的度量。简单说就是表示物体内部的混乱程度,例如:在一个手机批发大卖场例如华强北,那么这里面的手机种类肯定多呀,那么手机的种类就混乱呀,但是在华为专卖店里手机的种类就非常稳定了,只有华为,没有三星也没有苹果。

那么这个熵值既然是表示随机变量的不确定性的度量,那么它的计算公式如何呢?

H ( X ) = − ∑ P i l o g P i , i = 1 , 2 , 3... \begin{aligned}H(X) = -\sum P_ilogP_i,i = 1,2,3...\end{aligned} H(X)=PilogPi,i=1,2,3...,负号的原因是为了使得计算结果为正,因为 P i P_i Pi的取值范围为 [ 0 , 1 ] [0,1] [0,1],那么 l o g P i logP_i logPi的取值范围就为 [ − ∞ , 0 ] [-\infty,0] [,0],加上一个负号就会使得计算结果为正。
在这里插入图片描述
例如:集合A和集合B分别是

A = [ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 2 , 2 ] , B = [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] A = [1,1,1,1,1,1,1,2,2],B = [1,2,3,4,5,6,7,8,9] A=[1,1,1,1,1,1,1,2,2],B=[1,2,3,4,5,6,7,8,9]

显然,A,B两个集合都只有9个随机变量,但是A集合总共只有两种类别,而B集合有9种类别,所以A的熵值就会很小,B的熵值就会较大,A要相对稳定一些。

现在通过计算来看一下

选择 l o g log log的底数为2的原因是在 s k l e a r n sklearn sklearn这个库中是用 l o g 2 log_2 log2来计算的,实际上,取对数计算的时候只是影响的值的大小,但是并不影响相对大小,也可以选用其他的底数,但是本质上是一样的,而且不同底数之间也可以通过换底公式计算。

H A ( X ) = − ( 7 9 × l o g 2 7 9 + 2 9 × l o g 2 2 9 ) ≈ 0.7642 \begin{aligned}H_A(X)= -(\frac{7}{9}\times log_2\frac{7}{9}+\frac{2}{9}\times log_2\frac{2}{9})\approx 0.7642\end{aligned} HA(X)=(97×log297+92×log292)0.7642

H B ( X ) = − ( 9 × 1 9 × l o g 2 1 9 ) ≈ 3.1699 \begin{aligned}H_B(X) = -(9\times\frac{1}{9}\times log_2\frac{1}{9})\approx 3.1699\end{aligned} HB(X)=(9×91×log291)3.1699

可以看到,A的熵值低于B的熵值,这也证明了集合A比集合B稳定的多。

熵:不确定性越大,也就是混乱程度越大,得到的熵值也就越大,当 P = 0 P=0 P=0或者 P = 1 P=1 P=1时, H ( P ) = 0 H(P)=0 H(P)=0,此时随机变量完全没有不确定性,因为该事件为不可能事件或者必然事件。当 P = 0.5 P=0.5 P=0.5时候, H ( P ) = 1 H(P)=1 H(P)=1,此时随机变量的不确定性最大。
在这里插入图片描述

那么如何决定第一个点的选择呢?

这就引出了信息增益这一概念

信息增益:表示特征X使得类Y的不确定性减少的程度,也就是分类后的专一性,希望分类后的结果是越多的同类在一起,那么这时的混乱程度就降低了也就是熵值降低了,这个降低的程度越大,那么信息增益的程度就越大。

举个栗子:下面是十四天的打球情况

在这里插入图片描述

数据:14天的打球情况

特征:4种环境变化Outlook,Temperature,Humidity,Windy,Play

目标:构造决策树

划分的方式有四种如下

  • 基于天气的划分

在这里插入图片描述

#查看每种天气对应的天数
weathers = ['sunny','overcast','rainy']
days_by_weather = {}
for this_weather in weathers:
    num = np.count_nonzero(data['Outlook'] == this_weather)
    days_by_weather[this_weather] = num
days_by_weather
{'sunny': 5, 'overcast': 4, 'rainy': 5}
  • 基于温度的划分

在这里插入图片描述

Temperatures = ['hot','cool','mild']
days_by_temperature = {}
for this_Temperature in Temperatures:
    num = np.count_nonzero(data['Temperature'] == this_Temperature)
    days_by_temperature[this_Temperature] = num
days_by_temperature
{'hot': 4, 'cool': 4, 'mild': 6}
  • 基于湿度的划分

在这里插入图片描述

humidities = {'high','normal'}
days_by_humidity = {}
for this_humidity in humidities:
    num = np.count_nonzero(data['Humidity'] == this_humidity)
    days_by_humidity[this_humidity] = num
days_by_humidity
{'high': 7, 'normal': 7}
  • 基于有风的划分

在这里插入图片描述

windies = ['NO','YES']
days_by_windies = {}
for this_windy in windies:
    num = np.count_nonzero(data['Windy'] == this_windy)
    days_by_windies[this_windy] = num
days_by_windies
{'NO': 8, 'YES': 6}

在历史数据中查看打球与不打球的天数

plays = ['NO','YES']
days_by_play = {}
for this_play in plays:
    num = np.count_nonzero(data['Play'] == this_play)
    days_by_play[this_play] = num
days_by_play
{'NO': 5, 'YES': 9}

那么此时的熵值为

− 9 14 l o g 2 9 14 − 5 14 l o g 2 5 14 = 0.940 \begin{aligned}-\frac{9}{14}log_2\frac{9}{14}-\frac{5}{14}log_2\frac{5}{14} = 0.940\end{aligned} 149log2149145log2145=0.940

然后将上述4个特征注意分析,先从Outlook开始

Outlook = sunny时,计算熵值为 − 3 5 l o g 2 3 5 − 2 5 l o g 2 2 5 = 0.971 \begin{aligned}-\frac{3}{5}log_2\frac{3}{5}-\frac{2}{5}log_2\frac{2}{5}\end{aligned} = 0.971 53log25352log252=0.971

Outlook=overcast时,熵值为0

Outlook = rainy时,熵值为0.971

其余特征分类后的每个子类的熵值计算也是类似

根据统计Outlook取值分别为sunny,overcast,rainy的概率分别为 5 14 , 4 14 , 5 14 \begin{aligned}\frac{5}{14},\frac{4}{14},\frac{5}{14}\end{aligned} 145,144,145

那么整体分类后的熵值为,就是分类后的加权熵值为

5 14 × 0.971 + 4 14 × 0 + 5 14 = 0.693 \begin{aligned}\frac{5}{14}\times0.971+\frac{4}{14}\times0+\frac{5}{14}\end{aligned} = 0.693 145×0.971+144×0+145=0.693

信息增益:系统的熵值从0.940下降到了0.693,增益为0.247

然后此时来计算信息熵值下降,根据天气、温度、适度,是否有风分类获得的信息增益分别为 0.247 , 0.029 , 0.152 , 0.693 0.247,0.029,0.152,0.693 0.247,0.029,0.152,0.693

显然这样的计算得到是第一特征,也就是根节点为天气的时候信息增益最大。

计算信息增益时候的算法叫做ID3算法。但是ID3算法存在一定的问题。今天时间不早了先更新到这里。

  • 14
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 基于信息进行划分选择决策树算法,是一种常用的机器学习算法。其主要思想是通过计算每个特征的信息,来选择最优的特征进行划分,从而构建决策树模型。具体实现过程包括以下步骤: 1. 计算数据集的信息,作为初始的。 2. 对于每个特征计算信息增益,即数据集的减去该特征划分后的。 3. 选择信息增益最大的特征作为划分特征,将数据集划分为多个子集。 4. 对于每个子集,重复步骤1-3,直到所有子集都属于同一类别或者无法再进行划分。 5. 构建决策树模型,将每个特征作为节点,每个子集作为分支,最终得到一个完整的决策树。 该算法的优点是能够处理多分类问题,同时具有较好的可解释性和泛化能力。但是在处理大规模数据时,计算信息信息增益的复杂度较高,需要进行优化。 ### 回答2: 决策树算法是一种基于树形结构的分类和回归分析方法。在分类问题中,决策树算法将训练数据集划分成多个子集,每个子集对应于一个节点。每个节点代表一个属性判断,根据该属性的取将数据集划分为不同类别。通过递归地划分数据集并生成树形结构,最终形成一个决策树模型。在预测时,利用决策树模型对新数据进行分类。 基于信息进行划分选择决策树算法,其主要思想是选择能够最大地减少不确定性的属性作为划分属性。具体流程如下: 1. 计算数据集的信息,公式为:$H(T) = -\sum_{i=1}^{n}p_i\log_2p_i$,其中 $p_i$ 为类别 $i$ 在数据集中的比例。 2. 对每个属性 $A_i$,计算其对数据集的条件 $H(T|A_i)$,公式为:$H(T|A_i) = \sum_{j=1}^{m}\frac{\left| T_{ij} \right|}{\left| T \right|}\cdot H(T_{ij})$,其中 $m$ 为属性 $A_i$ 的取个数,$T_{ij}$ 为属性 $A_i$ 取为第 $j$ 种时的子集。 3. 计算信息增益 $Gain(A_i)$,公式为:$Gain(A_i) = H(T) - H(T|A_i)$。 4. 选择信息增益最大的属性作为划分属性。 5. 根据划分属性建立新的节点,并将数据集划分为多个子集。 6. 对每个子集递归地进行上述步骤,直到所有叶子节点的样本都属于同一类别或者达到预设条件。 编程实现时,需要先定义数据结构和算法步骤。数据结构包括节点类、树类和数据集类等。节点类中包含属性名、属性、子节点、样本类别等属性;树类中包含根节点、叶子节点、决策过程等属性;数据集类中包含数据列表、属性列表、类别列表等属性。算法步骤则按照上述流程实现,需要注意递归调用和预设条件限制等问题,以避免出现过拟合或欠拟合等情况。 基于信息进行划分选择决策树算法具有较好的分类效果和解释性,且能够处理离散型和连续型属性,适用于各种规模的数据集。但是也存在一些问题,例如容易受随机性和异常影响,可能会出现过拟合和欠拟合等情况,需要结合实际情况进行改进和优化。 ### 回答3: 决策树是一种典型的分类与回归分析方法。基于信息进行划分选择决策树算法是一种决策树算法,通过计算每个可能划分带来的信息增益选择信息增益最大的划分作为当前节点的划分。 算法主要步骤如下: 1. 基于初始的训练数据集,计算数据集的信息(Entropy)。 2. 针对数据集中的每个特征,基于该特征的取,将数据集划分成若干个子集。 3. 针对每个子集,计算其信息,然后根据所有子集信息的加权平均数(加权平均数为各子集样本数与总样本数的比例),计算特征信息增益,最终获得该特征信息增益。 4. 针对所有特征计算所有特征信息增益。 5. 选择信息增益最大的特征作为当前节点的划分。 6. 对每个子集递归执行步骤2至步骤5,直到数据集中的所有样本均属于同一种类别。 7. 最终得到一棵决策树,该树用于分类的过程中,将样本依据特征的取逐步划分到各个叶子节点中,最终划分到的叶子节点对应的类别即为该样本的类别。 该算法实现基本的思路是,每次选择信息增益最大的特征作为划分的依据,从而尽可能的降低划分之后样本集合的信息,提高模型的分类精度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值