【机器学习】【决策树】用样本集详解:条件熵H(Y|X)的计算过程

时间:2021-08-12 22:46:05
【转载】此文章文转载地址:https://blog.csdn.net/u012421852/article/details/79786694
            文档下载地址:https://download.csdn.net/download/u012421852/10322178

1. 样本数据集

样本集简介:

    样本集有8个example样本

    每个样本有3个特征(身高,房子,性格),1个分类结果refuse或者agree

    身高取值范围={high, low}

    房子取值范围={no, yes}

    性格取值范围={good, bad}

    分类标签=相亲结果={refuse,agree}

样本号

X=身高

X=房子

X=性格

Y=相亲结果

1

high

no

good

refuse

2

high

no

good

refuse

3

high

yes

good

agree

4

low

yes

good

agree

5

low

yes

good

agree

6

low

yes

bad

refuse

7

low

yes

bad

refuse

8

low

Yes

Bad

refuse

2.分类样本空间Y=相亲结果

样本变量

refuse

agree

 

样本分布

refuse=5

agree=3

 

概率分布

P(y=refuse)=5/8

P(y=agree)=3/8

 

 

3.样本空间 X=身高

3.1条件样本空间 X=身高

样本变量身高特征

样本分布(cnt=8)

概率分布

high

3

P(身高=high)=3/8

low

5

P(身高=low)=5/8

 

 

 

 

 

样本变量Y|X=high

样本分布(cnt=3)

概率分布

Y=refuse|X=high

refuse|high = 2

p(refuse|high)=2/3

Y=agree|X=high

agree|high = 1

p(agree|high) = 1/3

H(Y|身高=high)

-2/3log(2/3)  -1/3log(1/3)

样本变量 Y|X=low

样本分布(cnt=5)

概率分布

Y=refuse|X=low

refuse|low = 3

p(refuse|low)=3/5

Y=agree|X=low

agree|low = 2

p(agree|low)=2/5

H(Y|身高=low)
-3/5log(3/5) -2/5log(2/5)

 

3.2计算条件熵H(Y=相亲结果| X=身高)

有了上面的统计后,我们可以计算条件熵了。

我们想要求出当已知身高的条件下的分类样本空间Y的条件熵。

而条件熵是一个变量Y熵对X(条件)的期望:

[plain]   view plain  copy
  1. H(Y={refuse,agree}|X=身高)  
  2.   
  3. = p(身高=high) * H(Y|身高=high) + p(身高=low) * H(Y|身高=low)  
  4.   
  5. =(3/8) * {-2/3log(2/3)  -1/3log(1/3)}  +  (5/8)* {-3/5log(3/5) -2/5log(2/5)}  

Python计算如下:

(3/8) * (-2/3*math.log2(2/3)  -1/3*math.log2(1/3))  +  (5/8) * (-3/5*math.log2(3/5) -2/5*math.log2(2/5))

Out[60]: 0.9512050593046015

 

4.样本空间 X=房子

4.1条件样本空间 X=房子

样本变量房子

样本分布(cnt=8)

概率分布

No

2

P(房子=no)=2/8

Yes

6

P(房子=yes)=6/8

 

 

 

 

 

样本变量Y|X房子=no

样本分布(cnt=2)

概率分布

Y=refuse|X房子=no

refuse|no = 2

p(refuse|no)=2/2

Y=agree|X房子=no

agree|no = 0

p(agree|no) = 0

H(Y|X房子=no)

-2/2log(2/3)  -0/2log(0/2)

样本变量 Y|X房子=yes

样本分布(cnt=6)

概率分布

Y=refuse|X房子=yes

refuse|yes = 3

p(refuse|low)=3/6

Y=agree|X房子=yes

agree|yes = 3

p(agree|low)=3/6

H(Y|X房子=yes)
-3/6log(3/6) -3/6log(3/6)

4.2计算条件熵H(Y=相亲结果|X=房子)

有了上面的统计后,我们可以计算条件熵了。

我们想要求出当已知是否有房子的条件下的分类样本空间Y的条件熵。

而条件熵是一个变量Y熵对X(条件)的期望:

[plain]   view plain  copy
  1. H(Y={refuse,agree}|X=房子)  
  2.   
  3. = p(X房子=no) * H(Y|X房子=no) + p(房子=yes) * H(Y|X房子=yes)  
  4.   
  5. =(2/8) * {-2/2log(2/3)  -0/2log(0/2)}  +  (6/8)* {-3/6log(3/6) -3/6log(3/6)}  

Python计算如下:

注意:0*log(0)计算结果等于0

(2/8) * (-2/2*math.log2(2/3)  -0/2)  +  (6/8) * (-3/6*math.log2(3/6) -3/6*math.log2(3/6))

Out[61]: 0.896240625180289

 

5.样本空间 X=性格

5.1条件样本空间 X=性格

样本变量 性格

样本分布(cnt=8)

概率分布

good

5

P(性格=good)=5/8

bad

3

P(性格=bad)=3/8

 

 

 

 

 

样本变量Y|X性格=good

样本分布(cnt=5)

概率分布

Y=refuse|X性格=good

refuse|no = 2

p(refuse|no)=2/5

Y=agree|X性格=good

agree|no = 3

p(agree|no) = 3/5

H(Y|X性格=good)

-2/5log(2/5)  -3/5log(3/5)

样本变量 Y|X性格=bad

样本分布(cnt=3)

概率分布

Y=refuse|X性格=bad

refuse|yes = 3

p(refuse|low)=3/3

Y=agree|X性格=bad

agree|yes = 0

p(agree|low)=3/3

H(Y|X性格=bad)
-3/3log(3/3)  -0/3log(0/3)

5.2计算条件熵H(Y=相亲结果|X=性格)

有了上面的统计后,我们可以计算条件熵了。

我们想要求出当已知性格的条件下的分类样本空间Y的条件熵。

而条件熵是一个变量Y熵对X(条件)的期望:

[sql]   view plain  copy
  1. H(Y={refuse,agree}|X=性格)  
  2.   
  3. = p(X性格=good) * H(Y|X性格=good) + p(性格=bad) * H(Y|X性格=bad)  
  4.   
  5. =(5/8) * {-2/5log(2/5)  -3/5log(3/5)}  +  (3/8)* {-3/3log(3/3)  -0/3log(0/3)}  


python计算结果

(5/8) * (-2/5*math.log2(2/5)  -3/5*math.log2(3/5))  +  (3/8) * (-3/3*math.log2(3/3)  -0/3)

Out[62]: 0.6068441215341679

6. 条件熵

[plain]   view plain  copy
  1. H(Y={refuse,agree}}|X=身高)  
  2.   
  3. = p(身高=high) * H(Y|身高=high) + p(身高=low) * H(Y|身高=low)  
  4.   
  5. =(3/8) * {-2/3log(2/3)  -1/3log(1/3)}  +  (5/8)* {-3/5log(3/5) -2/5log(2/5)}  


(3/8) * (-2/3*math.log2(2/3)  -1/3*math.log2(1/3))  +  (5/8) * (-3/5*math.log2(3/5) -2/5*math.log2(2/5))

Out[60]: 0.9512050593046015

 

[plain]   view plain  copy
  1. H(Y={refuse,agree}|X=房子)  
  2.   
  3. = p(X房子=no) * H(Y|X房子=no) + p(房子=yes) * H(Y|X房子=yes)  
  4.   
  5. =(2/8) * {-2/2log(2/3)  -0/2log(0/2)}  +  (6/8)* {-3/6log(3/6) -3/6log(3/6)}  


(2/8) * (-2/2*math.log2(2/3)  -0/2)  +  (6/8) * (-3/6*math.log2(3/6) -3/6*math.log2(3/6))

Out[61]: 0.896240625180289

 

[plain]   view plain  copy
  1. H(Y={refuse,agree}|X=性格)  
  2.   
  3. = p(X性格=good) * H(Y|X性格=good) + p(性格=bad) * H(Y|X性格=bad)  
  4.   
  5. =(5/8) * {-2/5log(2/5)  -3/5log(3/5)}  +  (3/8)* {-3/3log(3/3)  -0/3log(0/3)}  

 

(5/8) * (-2/5*math.log2(2/5)  -3/5*math.log2(3/5))  +  (3/8) * (-3/3*math.log2(3/3)  -0/3)

Out[62]: 0.6068441215341679

这篇文章讲的太透彻了,忍不住转载分享。