欢迎关注”生信修炼手册”!
决策树属于监督学习算法的一种,根据原始输入数据中的特征,构建一个树状模型来进行分类。比如探究早晨是否出去打网球的例子,输入数据如下
一共有14个样本,其中9个早上都出去打球,5个早上没出去打球。在原始数据中,统计了每个早上的天气,湿度,是否有风这3个条件
利用上述数据,构建好的决策树模型如下
输入数据的每一个特征作为决策树中的一个节点,根据其取值的不同,划分不同的分支,根据各个特征的取值,按照这个树状结构就可以解释一个样本的分类情况。
对于决策树模型,其解释性非常强,可以看做是一连串的if-else条件,根据该条件就可以轻松的预测一个新的样本点。决策树的输入和输出都比较直观,核心就在于构建合适的分类树。
在构建决策树的过程中, 对于一个原始的特征,根据其取值分割成不同的分支,分割的过程其实是一个取子集的过程。以outlook为例,分割前是14个样本,9个play,5个no play; 根据3种取值分割后,sunny有2个play, 3个no play, overcast有4个play, rain有3个play, 2个no paly。
为了量化特征以及分割前后的变化,引入了以下概念
1. 熵
熵是从信息论中引入的概念,用来衡量一个事物的混乱状态,熵越大,越无序,具体的计算公式如下
p代表的是概率,上述示例数据为例共14个样本,其中9个play, 4个no play, 对应的熵如下
>>> -(np.log2(9/14) * (9/14) + np.log2(5/14) * (5/14))
0.9402859586706309
这种方式计算出来的熵称之为经验熵,直接用采样数据中的频数分布作为了总体的概率分布。
和条件概率这个概念类似,也要条件熵的概念,即再特征X下数据集的熵,公式如下
比如天气这个特征有3个取值,则在该特征下数据集的条件熵为
>>> - (5/14) * (np.log2(2/5) * (2/5) + np.log2(3/5) * (3/5)) - (5/14) * (np.log2(3/5) * (3/5) + np.log2(2/5) * (2/5))
0.6935361388961918
在取值为overcast时,出现了no play为0的情况,无法计算log值,此时直接将其熵定义为0, 所以上述公式只考虑了取值为sunny和rain的情况。
2. 信息增益
在决策树中,我们根据特征的取值将原始的特征拆分成了不同的分支,信息增益用来衡量拆分前后复杂度的变化,具体的计算公式如下