机器学习实战 决策树

决策树的构造 trees.py代码

from math import log
import operator

 

#计算熵

def calcShannonEnt(dataSet):
    # numEntries保存实例总数
    numEntries=len(dataSet)
    labelCounts={}
    #取每个实例最后一项作为特征currentLabel
    for featVec in dataSet:
        currentLabel=featVec[-1]
        # 如果不在字典里就加入字典 在字典里的话就+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

no surfacing 不浮出水面

flippers 脚蹼

海洋生物数据
  不浮出水面是否可以生存 是否有脚蹼 属于鱼类
1

2
3
4
5

 

#按照给定特征划分数据集

输入的三个参数分别是 待划分的数据集 划分数据集的特征 需要返回的特征的值

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

if中的代码的作用:将featVec中的等于value的元素去掉 并将去掉后的列表放在retDataSet中作为返回值返回

 

#选择最好的数据集划分方式

def choose(dataSet):
    #特征的种类数
    numFeatures=len(dataSet[0])-1
    #baseEntropy存放数据集的熵
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值