修正语法错误.

Signed-off-by: ithink.chan <chenyang@autoai.com>
This commit is contained in:
ithink.chan 2020-03-04 16:47:47 +08:00
parent c1ba30f537
commit 77fabfef87
1 changed files with 31 additions and 12 deletions

View File

@ -16,18 +16,25 @@
**熵**这个概念最早起源于物理学,在物理学中是用来度量一个热力学系统的无序程度,而在信息学里面,熵是对不确定性的度量。在**1948**年,**香农**引入了**信息熵**,将其定义为离散随机事件出现的概率,一个系统越是有序,信息熵就越低,反之一个系统越是混乱,它的信息熵就越高。所以信息熵可以被认为是系统有序化程度的一个度量。
假如一个随机变量 X 的取值为 X={x1,x2,...xn},每一种取到的概率分别是 {p1,p2,...,pn},那么 X 的熵定义为
H(X) = -sum(i=1, n, pi*log2(pi))
假如一个随机变量 X 的取值为 X={x1,x2,...xn},每一种取到的概率分别是 {p1,p2,...,pn},那么 X 的熵定义为
```math
H(X) = -sum(i=1, n, pi*log2(pi))
```
意思是一个变量的变化情况可能越多,那么它携带的信息量就越大。
对于**分类系统**来说,类别 C 是变量,它的取值是 C1,C2,...,Cn,而每一个类别出现的概率分别是
P(C1),P(C2),...,P(Cn)
```math
P(C1),P(C2),...,P(Cn)
```
而这里的 n 就是类别的总数,此时分类系统的熵就可以表示为
H(C) = -sum(i=1, n, P(Ci)*log2(P(Ci)))
```math
H(C) = -sum(i=1, n, P(Ci)*log2(P(Ci)))
```
以上就是信息熵的定义,接下来介绍**信息增益**。
@ -54,7 +61,9 @@
可以看出一共14个样例包括9个正例和5个负例。那么当前信息的熵计算如下
Entropy(S) = -9/14*log2(9/14)-5/14*log2(5/14) = 0.940286
```math
Entropy(S) = -9/14*log2(9/14)-5/14*log2(5/14) = 0.940286
```
在决策树分类问题中,信息增益就是决策树在进行属性选择划分前和划分后信息的差值。假设利用属性 Outlook 来分类,那么如下图
@ -62,21 +71,29 @@
划分后,数据被分为三部分了,那么各个分支的信息熵计算如下
Entropy(sunny) = -2/5*log2(2/5)-3/5*log2(3/5) = 0.970951
Entropy(overcast) = -4/4*log2(4/4)-0*log2(0) = 0
Entropy(rainy) = -3/5*log2(3/5)-2/5*log2(2/5) = 0.970951
```math
Entropy(sunny) = -2/5*log2(2/5)-3/5*log2(3/5) = 0.970951
Entropy(overcast) = -4/4*log2(4/4)-0*log2(0) = 0
Entropy(rainy) = -3/5*log2(3/5)-2/5*log2(2/5) = 0.970951
```
那么划分后的信息熵为
Entropy(S|T) = 5/14*0.970951+4/14*0+5/14*0.970951 = 0.693536
```math
Entropy(S|T) = 5/14*0.970951+4/14*0+5/14*0.970951 = 0.693536
```
Entropy(S|T) 代表在特征属性 T 的条件下样本的条件熵。那么最终得到特征属性 T 带来的信息增益为
IG(T) = Entropy(S)-Entropy(S|T) = 0.24675
```math
IG(T) = Entropy(S)-Entropy(S|T) = 0.24675
```
**信息增益的计算公式**如下
IG(S|T) = Entropy(S)-sum(value(T), , |Sv|/S*Entropy(Sv))
```math
IG(S|T) = Entropy(S)-sum(value(T), , |Sv|/S*Entropy(Sv))
```
其中 S 全部样本集合value(T) 是属性 T 所有取值的集合v 是 T 的其中一个属性值Sv 是 S 中属性 T 的值为 v 的样例集合,|Sv| 为 Sv 中所含样例数。
在决策树的每一个非叶子结点划分之前先计算每一个属性所带来的信息增益选择最大信息增益的属性来划分因为信息增益越大区分样本的能力就越强越具有代表性很显然这是一种自顶向下的贪心策略。以上就是ID3算法的核心思想。
@ -93,7 +110,9 @@ Entropy(S|T) 代表在特征属性 T 的条件下样本的条件熵。那么最
接下来开始用 C++ 实现 ID3 算法,包括以下文件
ID3.cpp ID3.h main.cpp Makefile Test
```sh
ID3.cpp ID3.h main.cpp Makefile Test
```
```cpp
/**