决策在kaggle上的利器(一)

01-目录大纲

决策树

  1. 决策树的直观理解
  2. 分类树
  3. 回归树
02-决策树的直观理解

02 分类树-信息熵
2-1 信息熵

信息熵是用来衡量信息不确定性的指标,不确定性是一个事出现不同结果的可能性。计算方法如下所示
H ( x ) = − ∑ i = 1 n P ( X = i ) log ⁡ 2 P ( X = i ) H(x)=-\sum_{i=1}^nP(X=i)\log_2P(X=i) H(x)=i=1nP(X=i)log2P(X=i)
其中: P ( X = i ) P (X=i) P(X=i为随机变量ⅹ取值为 i 的概率

硬币P
正面0.5
反面0.5

E n t r o p y = − 0.5 ∗ log ⁡ 0.5 − 0.5 ∗ log ⁡ 0.5 = 1 Entropy=-0.5*\log 0.5-0.5*\log 0.5=1 Entropy=0.5log0.50.5log0.5=1

硬币P
正面0.99
反面0.01

E n t r o p y = − 0.99 ∗ log ⁡ 0.99 − 0.01 ∗ log ⁡ 0.01 = 0.08 Entropy=-0.99*\log 0.99-0.01*\log 0.01=0.08 Entropy=0.99log0.990.01log0.01=0.08

条件熵:在给定随机变量 Y 的条件下,随机变量 X 的不确定性

H ( X ∣ Y = v ) = − ∑ i = 1 n P ( X = i ∣ Y = v ) log ⁡ 2 P ( X = i ∣ Y = v ) H(X|Y=v)=-\sum_{i=1}^nP(X=i|Y=v)\log_2P(X=i|Y=v) H(XY=v)=i=1nP(X=iY=v)log2P(X=iY=v)
信息增益:熵-条件熵,代表了在一个条件下,信息不确定性减少的程度

I ( X , Y ) = H ( X − H ( X ∣ Y ) I(X,Y)=H(X-H(X|Y) I(X,Y)=H(XH(XY)

2-2 计算信息增益(举例)

父节点熵 − ( 14 30 log ⁡ 14 30 ) − ( 16 30 log ⁡ 16 30 ) = 0.996 -(\frac{14}{30}\log \frac{14}{30})-(\frac{16}{30}\log \frac{16}{30})=0.996 (3014log3014)(3016log3016)=0.996

子节点熵 − ( 13 17 log ⁡ 13 17 ) − ( 4 17 log ⁡ 4 17 ) = 0.787 -(\frac{13}{17}\log \frac{13}{17})-(\frac{4}{17}\log \frac{4}{17})=0.787 (1713log1713)(174log174)=0.787

子节点熵 − ( 1 13 log ⁡ 1 13 ) − ( 12 13 log ⁡ 12 13 ) = 0.391 -(\frac{1}{13}\log \frac{1}{13})-(\frac{12}{13}\log \frac{12}{13})=0.391 (131log131)(1312log1312)=0.391

条件熵:子节点加权熵 ( 17 30 ⋅ 0.787 ) + ( 13 30 ⋅ 0.391 ) = 0.615 (\frac{17}{30}·0.787)+(\frac{13}{30}·0.391)=0.615 (30170.787)+(30130.391)=0.615

信息增益=父节点熵-子节点加权熵=0.996-0.615

假设高尔夫球场拥有不同天气下某个客户的打高尔夫球的历史记录,如下图所示

我们无法单纯的通过 Yes 和 No 的历史频率判断用户明天会不会打高尔夫因此我们需要借助天气信息减少不确定性

首先是构建根节点,我们先看下 Play Golfl 的熵

Play GolfFrequencyPEntropy
No50.36-0.531
Yes90.64-0.410
140.940

H ( X ) = − ∑ i = 1 n P ( X = i ) log ⁡ 2 P ( X = i ) H(X)=-\sum_{i=1}^nP(X=i)\log_2P(X=i) H(X)=i=1nP(X=i)log2P(X=i)

在 14 条历史数据中,打球的概率为 0.64, 不打球的概率为 0.36, 熵值为 0.94。接下来我们寻找晴朗与否,湿度,风力和温度四种状况与是否打高尔夫相关性最高的一个,进行决策树的构建。

晴朗程度 Outlook 的条件熵与信息增益

OutlookYesNoFrequencyP
Rainy2350.36
Overcast4040.29
Sunny3250.36
141

构建熵如下

OutlookYesNoEntropy
E(Rainy)0.400.600.971
E(Overcast)1.000.000.000
E(Cool)0.600.400.971

使用 Outlook 的条件熵 0.36 ∗ 0.971 + 0.29 ∗ 0 + 0.36 ∗ 0.971 = 0.69 0.36*0.971+0.29*0+0.36*0.971=0.69 0.360.971+0.290+0.360.971=0.69信息增益: 0.940 − 0.69 = 0.25 0.940-0.69=0.25 0.9400.69=0.25(最佳分隔特征)

使用 Temp 分隔的熵 0.29 ∗ 1 + 0.43 ∗ 0.918 + 0.29 ∗ 0.811 = 0.92 0.29*1+0.43*0.918+0.29*0.811=0.92 0.291+0.430.918+0.290.811=0.92信息增益: 0.940 − 0.92 = 0.02 0.940-0.92=0.02 0.9400.92=0.02

使用 Humidity。分隔的熵 0.5 ∗ 0.985 + 0.5 ∗ 0.592 = 0.79 0.5*0.985+0.5*0.592=0.79 0.50.985+0.50.592=0.79 信息增益: 0.940 − 0.79 = 0.15 0.940-0.79=0.15 0.9400.79=0.15

使用 Wind 分隔的熵 0.57 ∗ 0.811 + 0.43 ∗ 1 = 0.89 0.57*0.811+0.43*1=0.89 0.570.811+0.431=0.89, 信息增益: 0.940 − 0.89 = 0.05 0.940-0.89=0.05 0.9400.89=0.05

根节点分割结果

03 分类树-基尼指数
3-1 基尼指数

基尼指数(Gini 不纯度)表示在样本集合中一个随机选中的样本被分错的概率

Gini 指数越小表示集合中被选中的样本被分错的概率越小,也就是说集合的纯度越高,反之,集合越不纯。当集合中所有样本为个类时,基尼指数为 0 基尼指数的计算方法

G i n i ( p ) = ∑ k = 1 K p k ( 1 − p k ) = 1 − ∑ k = 1 K p k 2 Gini(p)=\sum_{k=1}^Kp_k(1-p_k)=1-\sum_{k=1}^Kp_{k}^2 Gini(p)=k=1Kpk(1pk)=1k=1Kpk2

其中,pk 表示选中的样本属于第 k 个类别的概率

根据天气状况预测是否打高尔夫球,首先计算根节点的基尼指数:

原始数据的基尼不纯度计算:共 14 条数据

5次No,概率$p1=5/14 $

9次Yes,概率 p 2 = 9 / 14 p2=9/14 p2=9/14
G i n i = 1 − ∑ i = 1 3 p i 2 = 1 − ( 5 14 ) 2 − ( 9 14 ) 2 = 0.459 Gini=1-\sum_{i=1}^3p_i^2=1-(\frac{5}{14})^2-(\frac{9}{14})^2=0.459 Gini=1i=13pi2=1(145)2(149)2=0.459
睛朗程度 outlookl 的 Gini 指数

OutlookYesNoFrequencyP
Rainy2350.36
Overcast4040.29
Sunny3250.36
14

outlookl 加权的基尼不纯度:

( 5 / 14 ) g i n i ( 2 , 3 ) + ( 4 / 14 ) g i n i ( 4 , 0 ) + ( 5 / 14 ) g i n i ( 3 , 2 ) = 5 / 14 ∗ ( 1 − ( 2 / 5 ) 2 − ( 3 / 5 ) 2 + 4 / 14 ∗ ( 1 − ( 4 / 4 ) 2 − ( 0 / 4 ) 2 ) + 5 / 14 ∗ ( 1 ( 3 / 5 ) 2 − ( 2 / 5 ) 2 ) = 0.342 \begin{aligned} &(5/14)gini(2,3)+(4/14)gini(4,0)+(5/14)gini(3,2) \\ &=5/14*(1-(2/5)^2-(3/5)^2 +4/14*(1-(4/4)^2-(0/4)^2)+\\ &5/14*(1(3/5)^2-(2/5)^2)=0.342 \end{aligned} (5/14)gini(2,3)+(4/14)gini(4,0)+(5/14)gini(3,2)=5/14(1(2/5)2(3/5)2+4/14(1(4/4)2(0/4)2)+5/14(1(3/5)2(2/5)2)=0.342
那么Gin增益: 0.459 − 0.342 = 0.117 0.459-0.342=0.117 0.4590.342=0.117

湿度 Humidity加权的基尼不纯度
( 7 / 14 ) g i n i ( 3 , 4 ) + ( 7 / 14 ) g i n i ( 6 , 1 ) 7 / 14 ∗ ( 1 − ( 3 / 7 ) 2 − ( 4 / 7 ) 2 + 7 / 14 ∗ ( 1 − ( 6 / 7 ) 2 − ( 1 / 7 ) 2 ) = 0.3674 \begin{aligned} &(7/14)gini(3,4)+(7/14)gini(6,1)\\ &7/14*(1-(3/7)^2-(4/7)^2 \\ &+7/14*(1-(6/7)^2-(1/7)^2)=0.3674 \end{aligned} (7/14)gini(3,4)+(7/14)gini(6,1)7/14(1(3/7)2(4/7)2+7/14(1(6/7)2(1/7)2)=0.3674
Gini 増益: 0.459 − 0.3674 = 0.0916 0.459-0.3674=0.0916 0.4590.3674=0.0916

风力 wind加权的基尼不纯度
( 8 / 14 ) g i n i ( 6 , 2 ) + ( 6 / 14 ) g i n i ( 3 , 3 ) = 8 / 14 ∗ ( 1 − ( 6 / 8 ) 2 − ( 2 / 8 ) 2 ) + 6 / 14 ∗ ( 1 − ( 3 / 6 ) 2 − ( 3 / 6 ) 2 ) = 0.4286 \begin{aligned} &(8/14)gini(6,2)+(6/14)gini(3,3) \\ &=8/14*(1-(6/8)^2-(2/8)^2) \\ &+6/14*(1-(3/6)^2-(3/6)^2)=0.4286 \end{aligned} (8/14)gini(6,2)+(6/14)gini(3,3)=8/14(1(6/8)2(2/8)2)+6/14(1(3/6)2(3/6)2)=0.4286
Gini 増益:$0.459-0.4286=0.0304$

CART 树是二叉树,对于一个具有多个取值(超过 2 个)的特征,需要计算以每一个取值作为划分点,对样本 D 划分之后子集的纯度 Gini (D, Ai)然后从所有的可能划分的 Gini (D, Ai)中找出 Gini 指数最小的划分,这个划分的划分点,便是使用特征 A 对样本集合 D 进行划分的最佳划分点

使用 Outlook 分隔的 Gini 增益:0.117(最佳分隔特征)

使用 Temp 分隔的 Gini 增益:0.0185

使用 Humidity 分隔的 Gini 增益:0.0916

使用 Wind 分隔的 Gini 增益:0.0304

Outlook 是最优的分割特征,揭下来计算 rainy, overcast,和 sunny 的基尼指数,选择最小的作为分割节点即可

04 回归树

回归树(regression tree),就是用树模型做回归问题,每一片叶子都输出一个预测值。预测值一般是叶子节点所含训练集元素输出的均值。

回归树的分支标准:标准方差(Standard Deviation)。回归树使用某特征将原集合分为多个子集,用标准方差衡量子集中的元素是否相近越小表示越相近。首先计算根节点的标准方差

C o u n t = n = 14 Count=n=14 Count=n=14; Count:数据集的元素个数

A v e r a g e = x ˉ = ∑ x n = 39.8 Average=\bar x=\frac{\sum x}{n}=39.8 Average=xˉ=nx=39.8; Average:数据集的均值,如果为叶子节点,那么就是预测值

S t a n d a r d D e v i a t i o n = S = ∑ ( x − x ˉ ) 2 n = 9.32 Standard Deviation=S=\sqrt{\frac{\sum(x-\bar x)^2}{n}}=9.32 StandardDeviation=S=n(xxˉ)2 =9.32; 标准方差衡量集合中元素的相似度

C o e f f i c i e n t o f V a r i a t i o n = C v = S x ˉ ∗ 100 % = 23 % Coefficient of Variation=Cv=\frac{S}{\bar x}*100\%=23\% CoefficientofVariation=Cv=xˉS100%=23%变化系数用于決定是否停止进一分叉

使用标准方差来确定分支,以计算 Outlook 分支后的标准差为例
S ( T T , X ) = ∑ c ∈ X P ( c ) S ( c ) S(TT,X)=\sum_{c\in X}P(c)S(c) S(TT,X)=cXP(c)S(c)


S ( H o u r e s , O u t l o o k ) = P ( S u n n y ) ∗ S ( S u n n y ) + P ( O v e r c a s t ) ∗ S ( O v e r c a s t ) + P ( R a i n y ) ∗ S ( R a i n y ) = ( 4 / 14 ) ∗ 3.49 + ( 5 / 14 ) ∗ 7.78 + ( 5 / 14 ) ∗ 10.87 = 7.66 \begin{aligned} &S(Houres, Outlook)=\\ &P(Sunny)*S(Sunny)+P(Overcast)*S(Overcast)+P(Rainy)*S(Rainy)\\ &=(4/14)*3.49+(5/14)*7.78+(5/14)*10.87\\ &=7.66 \end{aligned} S(Houres,Outlook)=P(Sunny)S(Sunny)+P(Overcast)S(Overcast)+P(Rainy)S(Rainy)=(4/14)3.49+(5/14)7.78+(5/14)10.87=7.66
所以可以如下写法:
S ( T , X ) = ∑ c ∈ X P ( c ) S ( c ) S(T,X)=\sum_{c\in X}P(c)S(c) S(T,X)=cXP(c)S(c)

标准差降低最多的特征是 Outlook,利用其进行分支。
S D R ( H o u r s , O u t l o o k ) = S ( H o u r s ) − S ( H o u r s , O u t l o o k ) = 0.932 − 7.66 = 1.66 SDR(Hours, Outlook)=S(Hours)-S(Hours, Outlook)=0.932-7.66=1.66 SDR(Hours,Outlook)=S(Hours)S(Hours,Outlook)=0.9327.66=1.66
image-20200625200813376

接下来,重复这个过程,使用标准方差降低最多的特征进行分支直到满足某个停止条件,如:

  • 当某个分支的变化系数小于某个值

  • 当前节点包含的元素个数小于某个值

使用“outlook“分支以后,值为“Overcast“”的分支的变化系数(coefficient of variation)太小(8%)小于我们设置的最小值(10%),停止继续在“Overcast“对应的分支上继续分支,生成一个叶子节点
image-20200625201509658

这里是本人打比赛开始接触的bagging和boosting的集成学习方法,作为一个深度学习工程师,第一次感受到机器学习算法在各大比赛上的优势。

让我们一起分享,共同成长,分享使我们在编程路上并不孤独。快来扫描微信二维码,与博主一起快乐学习吧!
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值