决策树数据集划分与选择《机器学习实战》读书笔记(数据分析学习DAY3)

昨天完成了信息熵的计算,今天继续完成决策树的学习
在决策树中,很重要的一点就是将数据分类成几块。
而分类需要考虑从物体特征的哪一点去分类,决定分类的特征称为特征值。
比如一个物体有6种属性,按6种属性可基础的拥有6种分类方法,但按照各分类方法实现的分类结果的好坏是不一样的。
信息熵就提供给我们一种很好地判断分类决策是否正确的判断依据。

即决策树的每一次分类,都希望能得到最规整的信息分类结果,即最小的信息熵。

实现代码如下,接昨天的代码:

def splitDataSet(dataSet, axis, value): #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 chooseBestFeatureToSpit(dataSet):
    numFeatures = len(dataSet[0]) - 1 #最后一个值为分类标签,故可取到n-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 #规定初始的信息熵为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 #返回最优特征值
#至此完成选择出最优的划分决策

决策树的一个分支的构成至此已经结束
接下来会学习整个树的构建过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值