机器学习实战_初识决策树算法_理解其python代码(一)
来源:互联网 发布:淘宝网怎样和微信绑定 编辑:程序博客网 时间:2024/06/05 19:22
这是经过我修改后能在python3.0中完美运行的Tree决策树 project源码,可以直接拿来学习:
http://download.csdn.net/download/qq_36396104/10142842
(一)计算给定数据集的香农熵(个人理解为计算给定信息集纯度的一种数学计算指标):
from math import logdef calcShannonEnt(dataSet):#calculata shannonEnt 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,'maybe'], [1, 1,'yes'], [1,0,'no'], [0,1,'no'], [0,1,'no']] labels = ['no surfacing','flippers'] return dataSet,labels#放在另一个py文件内的test:import CreateDataSetimport treesmyDat,labels=CreateDataSet.createDataSet()print(myDat)print(trees.calcShannonEnt(myDat))
(二)划分数据集:
需要的python基础:也可看我整理出来的文章
列表解析(列表推导):
前期准备(人为划分,给定属性以及相应的值,作为后面函数的调用)
def splitDataSet(dataSet,axis,value):#将属性axis中满足值为value的数据划分出来
retDataSet = []#Python在函数中传递的是列表的引用,在函数内部对列表对象的修改将会影响该列表的整个生命周期。为了消除这个不良影响,需要在函数的开始声明一个新列表对象。
for featVec in dataSet:
if featVec[axis] == value:
reducedFeatVec = featVec[:axis]#通过以下两步可得到满足所给条件的除去属性(axis+1发挥的作用)axis的数据
reducedFeatVec.extend(featVec[axis+1:])
retDataSet.append(reducedFeatVec)
return retDataSet
测试代码:
import CreateDataSet
import trees
myDat,labels=CreateDataSet.createDataSet()
print(trees.splitDataSet(myDat,1,1))
正式划分:(利用信息增益得到所有属性中最适合划分的一个)
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]#列表解析(推导),得到dataSet中的第i个属性的所有取值eg:(1,1,1,0,0)
uniqueVals = set (featList)#通过集合中元素唯一的特性,将得到的featList中的重复元素变唯一eg:(1,0)
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
if(infoGain > bestInfoGain):
bestInfoGain = infoGain
bestFeature = i
return bestFeature
test:
import CreateDataSet
import trees
myDat,labels=CreateDataSet.createDataSet()
print(trees.chooseBestFeatureToSplit(myDat))
“`
- 机器学习实战_初识决策树算法_理解其python代码(一)
- 机器学习实战_初识决策树(ID3)算法_理解其python代码(二)
- 机器学习实战_初识朴素贝叶斯算法_理解其python代码(一)
- 机器学习实战_初识朴素贝叶斯算法_理解其python代码(二)
- 机器学习实战_初识kNN算法_理解其python代码
- 补:机器学习实战_初识决策树(ID3)算法的绘制树形图的代码
- 机器学习实战_决策树
- 机器学习实战+第三章_决策树
- 机器学习实战python版第三章决策树代码理解
- 机器学习_决策树
- 机器学习实战-决策树ID3-python代码
- 信息增益以及决策树算法-机器学习实战(python)
- 机器学习实战 (2)决策树 (一) ID3算法
- 机器学习系列(9)_机器学习算法一览(附Python和R代码)
- 机器学习系列(9)_机器学习算法一览(附Python和R代码)
- 机器学习系列(9)_机器学习算法一览(附Python和R代码)
- 机器学习系列(9)_机器学习算法一览(附Python和R代码)
- 机器学习系列(9)_机器学习算法一览(附Python和R代码)
- leetcode--Kth Smallest Element in a BST
- 编写 API 完成 HDFS shell 操作
- 微信小程序-入门篇(app.wxml及app.wxss)
- 13.9-全栈Java笔记:打飞机游戏实战项目|Time|Plane|其他案例展示
- HTML5_DOM-有缝-透明度-无缝-封装
- 机器学习实战_初识决策树算法_理解其python代码(一)
- 在Intellij IDEA 关于git的一些用法
- XZ_iOS之自定义2秒钟自动消失的提示框
- 小团队服务器开发
- clob类型判断大小问题
- Java-Reflection反射-获取包括父类在内的所有字段
- android https加载WebView图片不显示问题
- Socket.Receive 无法预知字节长度的数据接收
- 高德地图设置Marker点击事件注意事项.