机器学习里有介绍了3种分类器:
Naive Bayes
Support Vector Machine
Decision Tree
其中Decision Tree 里面引入了Entropy的概念,
为什么要引入这个呢?因为电脑不是人脑,它在做这个决策树的时候最大的问题就是不知道用哪种分类条件来对样本进行分类。
电脑必须知道哪一种分类条件最合适,怎样通过计算知道哪种最合适呢,答案就是这个熵的值。
有一个网页介绍得很好:http://stackoverflow.com/questions/1859554/what-is-entropy-and-information-gain
里面举了一个例子,并做了演示。
我再简单描述一下,通常的熵的计算公式是一个和,如果简单一点,我们只考虑有2个项,a和b,a = 3,b=4
那么p(a) = 3/7 ,p(b) = 4/7
Entropy = - 3/7*log2(3/7) - 4/7*log2(4/7) = 0.9852
这个0.9852很接近1,说明这个case很不确定,很难区分,实际上也是如此,因为a=3,b=4分布很均匀。
假如a=6,b=1
重新计算的结果变为:0.5917
计算的方法是用python,这样比较方便
>>> l1 = 3.0/7
>>> l2 = 4.0/7
>>> el = -l1*math.log(l1,2) - l2*math.log(l2,2)
>>> el
0.9852281360342516
>>> r1 = 6.0/7
>>> r2 = 1.0/7
>>> er = -r1*math.log(r1,2) - r2*math.log(r2,2)
>>> er
0.5916727785823275
由于7个里面大多数都是a,因此比较容易区分,熵的值就变低了。
需要注意的是只计算一个熵的值是无法做出决策的,必须计算出一个决策树在分支之前的熵的值,同时计算它的2个分支各自的熵的值,然后比较分支之前和分支之后,熵减少了多少。如果分支前后,熵不发生变化,则表示没有必要进行分支,如果有多种分支条件,则找出令熵的值减少最快的那个进行分支。
由此可见,熵其实就是代表复杂度,经过分支之后,它的复杂度不断下降,最后当所有分类都清晰之后,它的复杂度就降为0.
也可以想象成一种纯度,一开始不纯,后面逐步纯净的一个过程。