机器学习实战——决策树算法代码详解
刚开始学习机器学习,在熟悉python语法之后,看了李航的统计学习方法决策树的原理,自己推导了一遍,想用代码实现,但是无从下手。
跟着机器学习实战的代码写了一遍,这本书的代码注释不多,不易理解,这里添加了理解后的详细注释。一起学习!
ID3算法,根据最大信息增益原理选择最优特征。
下面附代码:
from math import log
import operator
def calcShannonEnt(dataSet):
"""计算给定数据集的熵"""
numEnttries = len(dataSet)#计算数据集实例总数
labelCounts = {
}#保存各分类实例的数目
for featVec in dataSet:
currentLable = featVec[-1]
if currentLable not in labelCounts.keys():
labelCounts[currentLable] = 0
labelCounts[currentLable] += 1
shannonEnt = 0.0
for key in labelCounts:
prob = float(labelCounts[key])/numEnttries#计算各分类的概率
shannonEnt -= prob * log(prob,2)#熵
return shannonEnt
def splitDataSet(dataSet,axis,value):#axis:第axis个特征,value:第axis个特征的值
"""按照给定特征划分数据集"""
retDataSet = []
for featVec in dataSet:
if featVec[axis] == value:#将需要提取的特征数据集提取出来
reducedFeatVec = featVec[:axis]
reducedFeatVec.