基于香农熵的决策树算法
《机器学习实战》一书中有介绍构造决策树的算法。 所谓决策树就是已知一些项特征的信息和项最终分类,求通过特征判断项最终分类的递归决策树。例如书中的例子是判断一个动物是不是鱼类,下面为一个数据集。
def createDataSet(): dataSet = [/ [1, 1, 'yes'], [1, 1, 'yes'], [1, 0, 'no'], [0, 1, 'no'], [0, 1, 'no']] labels = ['no surfacing', 'flippers'] return dataSet, labels书里举的另一个例子是隐形眼镜的问题。书里提供了绘图引擎用于绘制决策树。
算法大致流程是: 1.获得数据集 2.找到一个好的特征划分数据集为两部分 3.递归这一过程直到数据集内全部为同种类 4.打印由上述划分确定的树状结构
那么如何划分数据集,也就是如何确定最佳划分状态?当然是信息量大的划分。信息量可以用香农熵刻画。
具体严格的数学推导我觉得可以用性质刻画定义(数学上很多函数都是先给出性质再解函数方程获得唯一定义,于是干脆用性质代替定义)。 显然U(s)有性质信息量等于各部分信息量之和:
先考虑一个简单的问题,
然后利用相同手法可以得到性质(函数方程)
这就是一个中规中规中矩的函数方程了,依次解决
可以得到信息量的表示方法,也就是香农熵,注意与热力学熵推导过程一模一样,除了常数不同。
决策树代码略
新闻热点
疑难解答