机器学习决策树的Python实现详细流程及原理解读_2
2017-04-04 17:09
661 查看
继上一期说完如何选择最优划分属性的原理,这期主要说说划分数据的Python实现
2.《Machine learning in Action》 – Peter Harrington
3.《Data Mining Concepts and Techniques》 – Jiawei Han, Micheline Kamber, Jian Pei
1. 划分数据集
def splitDataSet (dataSet, divFeat, value) copyDataSet = [] for featVec in dataSet : if featVec[divFeat] == value : reducedFeatVec[:divFeat] reducedFeatVec.extend(featVec[divFeat+1:]) copyDataSet.append(reducedFeatVec) return copyDataSet
代码解释: line 1:输入参数为 需要划分的数据集,划分特征,返回的特征值 line 2:由于Python传递的是引用而不是原数据复制,为了保证不改变原数据我扪新建立一个列表 line 3:遍历数据集中的没个元素 line 4:抽取符合的特征值 line 5:将该特征前的所有元素,除了该特征全部放入reducedFeatVec列表中(举例:a = [5,6,7,8,9] : a[:3] -> [5,6,7]) line 6:.extend()使Python列表类型自带的方法,其与append()有相似但结果截然不同的效果(举例:a = [5,6,7] b=[8,9] : a.extend(b) -> [5,6,7,8,9]; a.append(b) -> [5,6,7, [8,9] ]) append() 会将其元素作为一个列表整体放入到a中,a的最后一个元素是一个列表,列表中包含了b中的所有元素。 同时 featVec[divFeat+1:] 意思为 将divFeat 后的所有元素都放入到reducedFeatVec 里表中,+1 的原因是不同于向前,向后是包含的该特征的(举例 a = [5,6,7,8,9] : a[3:] -> [8,9]) line 7:将获得的reducedFeatVec 按照一个一个列表形式存入copyDataSet中 结果展示: >>>dataSet [ [1,1,y], [1,0,y], [1,1,n], [0,0,n], [0,1,n] ] >>>tree.splitDataSet(dataSet,0,1) [1,1,y], [1,0,y], [1,1,n]
2. 找到最好的划分属性
def bestFeatSplit(dataSet) : numFeats = len(dataSet[0]) - 1 baseEntropy = calcShannonEnt(dataSet) bestInfoGain = 0.0; bestFeat = -1 for i in range(numFeats) : featList = [featValue[i] for featValue in dataSet] uniqueVals = set(featureList) newEntropy = 0.0 for value in uniqueVals : subDataSet = splitDataSet(dataSet, i, value) prob = len(subDataSet)/float(len(dataSet)) newEntropy += prob * calcShannonEnt(subDataSet) infoGain = beseEntropy - newEntropy if (infoGain > bestEntropy) : bestInfoGain = infoGain bestFeat = i return bestFeat
代码解释: line 1:输入参数为 需要划分的数据集 line 2:计算列表所具有的特征数,-1 的原因时最后一项是类标签,不是特征属性(特别注意的是,所有的数据列表必须具有相同的数据长度,同时最后一项必须是类别标签) line 3:通过上一期的代码计算出初始的熵 line 5:range() 是Python函数,其效果是取 0~numFeats-1 的所有值(举例:range(4) -> [0,1,2,3]),需要特别注意的是,在for之外的地方更改 i 的值不会影响到 for 循环 (举例: for i in range(3) print i i +=2 print i 打印结果为:0 2 1 3 2 4) line 6:使用列表推导来创建新的列表,将数据集中所有第 i 个特征值或者所有可能存在的值写入新的列表中 line 7:set() 取集合,集合中各个值各不相同 line 9:遍历所有唯一的属性值 line 10~12:计算新的熵,原理见上一期 line 13:计算信息增益 line 14~17:找打最大的信息增益,并返回索引值 结果展示: >>>tree.bestFeatSplit(dataSet) 0 可以看出 如果按照0划分,最后结果有一个n 被错误的分到 y 组,如果按照1划分,将有一个y被错误分到 n 组同时剩下的一组分别是一个 y 和一个 n。由此可见按照 0 划分最佳
下一期将会更新如何使用Python构建决策树
3. 参考
1.《Modern Information Retrieval The Concepts and Technology behind Search》Second Edition – Ricardo Baeza-Yates Berthier Ribeiro-Neto2.《Machine learning in Action》 – Peter Harrington
3.《Data Mining Concepts and Techniques》 – Jiawei Han, Micheline Kamber, Jian Pei
相关文章推荐
- 机器学习决策树的Python实现详细流程及原理解读_1
- 机器学习经典算法详解及Python实现--CART分类决策树、回归树和模型树
- 机器学习(周志华)习题解答4.3: Python小白详解ID3决策树的实现
- 决策树ID3算法python实现代码及详细注释
- 机器学习决策树及python实现
- Python机器学习-感知机原理及代码实现
- 机器学习:决策树ID3\C4.5\CART\随机森林总结及python上的实现 (2)
- 分类算法-----决策树(ID3)算法原理和Python实现
- 机器学习——随机森林算法randomForest——原理及python实现
- 机器学习之决策树(ID3)算法与Python实现
- 决策树基本理论学习以及Python代码实现和详细注释
- 机器学习经典算法详解及Python实现--决策树(Decision Tree)
- python 实现周志华 机器学习书中的决策树 c3.0
- 机器学习 Logistic回归 原理Python实现
- 干货|从决策树到随机森林:树型算法的实现原理与Python 示例
- 机器学习经典算法详解及Python实现--CART分类决策树、回归树和模型树
- 【机器学习】决策树(上)——从原理到算法实现
- 决策树原理及Python代码实现
- 机器学习:K-近邻算法原理与Python代码实现
- 【机器学习笔记之二】决策树的python实现