决策树:
ID3算法:
1、香农熵:
如果待分类的事务可能划分在多个分类中,则
x
i
的信息定义为:
,
其中
p
(
x
i
)
选择该分类的概率。
熵定义为信息的期望值,计算公式为:![]()
,当熵越高时,说明不同类型的数据越多,数据集集合无序程度越高。
选择dataSet数据集中最后一项分类(
featVec[-
1
])的香农熵计算,代码实现如下:
- import math
- def calcShannonEnt(dataSet):
- numEntries = len(dataSet)
- labelCounts = {}
- for featVec in dataSet:
- currentLabel = featVec[-1]
- labelCounts[currentLabel] = labelCounts.get(currentLabel, 0) + 1
- shannonEnt = 0.0
- for key in labelCounts:
- prob = float(labelCounts[key])/numEntries
- shannonEnt -= prob * math.log(prob,2)
- return shannonEnt
2、按给定的特征划分数据集: