机器学习实战第三章——决策树程序
来源:互联网 发布:linux 查看服务器类型 编辑:程序博客网 时间:2024/05/16 10:26
在阅读理解决策树之后,按照《机器学习实战》的代码,实现ID3决策树
程序如下:
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)
return shannonEnt
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 splitDataSet(dataSet,axis,value):
retDataSet = []
for featVec in dataSet:
if featVec[axis] ==value:
reducedFeatvec = featVec[:axis]
reducedFeatvec.extend(featVec[axis+1:])
retDataSet.append(reducedFeatvec)
return retDataSet
def chooseBestFeatureToSplit(dataSet):
numFeatures = len(dataSet[0])-1
baseEntropy = calcShannonEnt(dataSet)
bestInfoGain = 0.0 ; bestFeature=-1
for i in range(numFeatures):
featList = [example[i] for example in dataSet]
uniqueVals = set(featList)
newEntropy =0.0
for value in uniqueVals:
subDataSet = splitDataSet(dataSet,i,value)
prob = len (subDataSet)/float(len(dataSet))
newEntropy+=prob*calcShannonEnt(subDataSet)
infoGain = baseEntropy - newEntropy
print infoGain
if (infoGain>bestInfoGain):
bestInfoGain = infoGain
bestFeature = i
return bestFeature
- 机器学习实战第三章——决策树程序
- 机器学习实战第三章——决策树(源码解析)
- 机器学习实战第三章——决策树(源码解析)
- 机器学习实战第三章——决策树,读书笔记
- 机器学习实战+第三章_决策树
- 机器学习实战-第三章(决策树)
- 【读书笔记】机器学习实战-第三章 决策树
- 《机器学习实战》—决策树
- 机器学习实战——第三章:决策树ID3/C4.5
- (转)机器学习实战第三章——决策树(源码解析)
- 机器学习实战 第三章 决策树 学习笔记
- 机器学习实战- 第三章 决策树-学习笔记
- 《机器学习实战》学习笔记-第三章-决策树
- 《机器学习实战》读书笔记 第三章 决策树(part 1)
- 《机器学习实战》读书笔记 第三章 决策树(part 3)
- 机器学习实战python版第三章决策树代码理解
- 机器学习实战-第三章决策树-代码理解-读书笔记
- [完]机器学习实战 第三章 决策树(Decision Tree)
- UI课程14 标签视图控制器 UITabBarController
- poj3728
- 求具有n个结点的m叉树的最小高度
- log4j:WARN No appenders could be found for logger 解决方案
- 在最美好的年华里,不要辜负最美的自己
- 机器学习实战第三章——决策树程序
- android开发学习笔记——用户界面View的五大布局
- hadoop之HDFS对文件的相关操作
- 替换空格
- windows7下使用Git管理gitHub仓库
- Android项目如何进行签名打包发布
- studing method for linux
- socket 编程之TCP服务端与客户端
- CentOS 6.5 安装freeswitch