决策树笔记
前言
什么是决策树
我并不想直接回答这个问题,自己看图,一目了然:
一个白富美在相亲的时候 是通过如下的决策树,来决定一个邀约的男子是否值得去见
决策树的前世今生
要讲决策树(Decision Tree) 有一个大牛不可不提:Ross Quinlan(注意发音 Quinlan:昆兰)
https://en.wikipedia.org/wiki/Ross_Quinlan
ID3、C4.5以及C4.5的升级版C5.0的发明者。
这三个名字稀奇古怪的算法都是什么东东?
ID3算法(全名 Iterative Dichotomiser3 (ID3) algorithm中文名迭代二叉树3代)。这个算法的基本思想是依据奥卡姆剃刀原理(Occam's Razor, Ockham's Razor)构造最小的决策树。提出时间:1986年
C4.5算法是基于ID3算法的原则又进行了扩展和改进,采用GainRatio来加以改进方法,选取有最大GainRatio的分割变量作为准则,避免ID3算法过度配适的问题。提出时间:1993年
然后呢,这个C5.0是对C4.5的改进,主要为了处理大数据的需要,在执行效率和内存使用方面进行了改进。提出时间:1998年。
当然 C5.0和C4.5还有一个本质区别 C5.0是商用版本,不再是开源免费版本。
咱们这个牛教授昆兰(Ross Quinlan)研究决策树研究了十几年,而在本文中,我们将通过非常有限的时间,将昆兰的思想精髓一一吸收。
理论基础
----------------------------------------------------------------------------
克劳德•香农被公认为是二十世纪最聪明的人之一,威廉•庞德斯通在其2005年出版的《财富公式》一书中是这样描写克劳德.香农:贝
尔实验室和MIT有很多人将香农和爱因斯坦相提并论,而其他人则认为这种对比是不公平的——对香农是不公平
----------------------------------------------------------------------------
信息论之父 香农 在 1948年发表的论文“通信的数学理论(A Mathematical Theory of Communication 推荐中文版链接:http://wenku.baidu.com/link?url=M76O27JPJgrTpbc92Fu1AumkSAXcnEQ7t9UPPZGRHypZgKI_1keIkaDL9E55OHyeLoUpK6KeRUsEWkNRsIrBkAnARNQAF37QuWkU6cHbLEO )”中指出,任何信息都存在冗余,冗余大小与信息中每个符号(数字、字母或单词)的出现概率或者说不确定性有关。
Shannon 借鉴了热力学的概念,把信息中排除了冗余后的平均信息量称为“信息熵”,并给出了计算信息熵的数学表达式。
熵(entropy)
from math import log
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 calcShannonEnt(dataSet):
numEntries = len(dataSet)
labelCounts = {}
for featVec in dataSet: #the the number of unique elements and their occurance
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) #log base 2
return shannonEnt
信息增益(information gain)