熵开始是应用在物理学的,后来才应用到信息,等多个领域。
熵值表示系统的不确定性大小,熵值越大表示的系统越不稳定,公式如下:
p(xi) 是第i个元素的概率, H(X)是整个系统的熵值
决策树特点:
优点: 计算复杂的不高,输出结果易于理解,对中间的缺失值不敏感
缺点: 可能会产生过度匹配的问题
适用数据类型: 数值类型和标称型
1. 使用特征熵值选择合适特征去分类,然后生成决策树。
1.1 选择最合适的特征:
1. 计算从整个系统的(label)熵---baseEntropy
2. 计算所有特征值的熵,选择出特征熵与baseEntropy 相差最大的特征.
1.2 根据选择出来的特征分类,然后递归下去生产决策树
1 筛选出特征中每种值的NewDataSet,其中不包括当前的特征.
2. 建立树形结构,{feathure: value1:... value2:... ....} value1 ..的值是递归 NewDataSet产生的值.
使用举例:
以下是实际使用的数据:
dataSet = [[1,1,'yes'],
[1,1,'yes'],
[1,0,'no'],
[0,1,'no'],
[0,1,'no']
]
labels = ['no surfacing', 'flippers']
经过决策树算法之后,输出的结果是:
{
'no surfacing': {
0: 'no',
1: {
'flippers':{
0: 'no',
1: 'yes'
}
}
}
}
这种结果很容易看出算法的弊端,按照结果,如果no surfacing这个特征值是0.5,那么使用决策树来分类,它是无法成功的。
所以决策树不能直接处理连续型的特征。有人认为它的这种切分数据的方式过于迅速.
解决上面的问题可以用二元切分法,在回归树/模型树中会用到。
我觉得决策树适用于特征值是离散型的,并且需要完整的特征值的训练数据集。
参考代码:https://github.com/wujianqiangwjq/machine-learn/blob/master/decisionTree-entropy.py