基于决策树的基本思想(ID3算法),学习信息增益的计算,决策树的构建、使用、存储。
例子来自《Machine Learning in Action》 Peter Harrington
熵值计算
计算数据集合中分类的数量与概率,根据公式求得熵。
from math import log
"""计算熵值"""
def calcShannonEnt(dataSet):
numEntries = len(dataSet)
labelCounts = {} # 用于储存分类标签的种类和个数
for featVec in dataSet:
currentLabel = featVec[-1] # 当前数据点的分类标签
if currentLabel not in labelCounts.keys():
labelCounts[currentLabel] = 0
labelCounts[currentLabel] += 1
shannonEnt = 0.0
for key in labelCounts:
prob = float(labelCounts[key])/numEntries
shannonEnt -= prob * log(prob,2) #以2为底求对数
return shannonEnt
测试数据
提供一个如下的数据集合,用过两个特征对生物是否属于鱼类进行确认。
不浮出水面是否可以生存 | 是否有脚蹼 | 属于鱼类 |
---|---|---|
1 | 是 | 是 |
2 | 是 | 是 |
3 | 是 | 否 |
4 | 否 | 是 |
5 | 否 | 是 |
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
测试
def testShannonEnt():
myDat,labels = createDataSet()