【转载】此文章文转载地址: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.2计算条件熵H(Y=相亲结果| X=身高)
有了上面的统计后,我们可以计算条件熵了。
我们想要求出当已知身高的条件下的分类样本空间Y的条件熵。
而条件熵是一个变量Y熵对X(条件)的期望:
- H(Y={refuse,agree}|X=身高)
- = p(身高=high) * H(Y|身高=high) + p(身高=low) * H(Y|身高=low)
- =(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) |
4.2计算条件熵H(Y=相亲结果|X=房子)
有了上面的统计后,我们可以计算条件熵了。
我们想要求出当已知是否有房子的条件下的分类样本空间Y的条件熵。
而条件熵是一个变量Y熵对X(条件)的期望:
- H(Y={refuse,agree}|X=房子)
- = p(X房子=no) * H(Y|X房子=no) + p(房子=yes) * H(Y|X房子=yes)
- =(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) |
5.2计算条件熵H(Y=相亲结果|X=性格)
有了上面的统计后,我们可以计算条件熵了。
我们想要求出当已知性格的条件下的分类样本空间Y的条件熵。
而条件熵是一个变量Y熵对X(条件)的期望:
- H(Y={refuse,agree}|X=性格)
- = p(X性格=good) * H(Y|X性格=good) + p(性格=bad) * H(Y|X性格=bad)
- =(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. 条件熵
- H(Y={refuse,agree}}|X=身高)
- = p(身高=high) * H(Y|身高=high) + p(身高=low) * H(Y|身高=low)
- =(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 |
- H(Y={refuse,agree}|X=房子)
- = p(X房子=no) * H(Y|X房子=no) + p(房子=yes) * H(Y|X房子=yes)
- =(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 |
- H(Y={refuse,agree}|X=性格)
- = p(X性格=good) * H(Y|X性格=good) + p(性格=bad) * H(Y|X性格=bad)
- =(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 |