机器学习第三章代码3-3

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

# 选择使分割后信息增益最大的特征,即对应的列  
def chooseBestFeatureToSplit(dataSet):  
    # 获取特征的数目,从0开始,dataSet[0]是一条数据  
    numFeatures = len(dataSet[0]) - 1  
    # 计算数据集当前的信息熵  
    baseEntropy = CalcShannonEnt(dataSet)  
    # 定义最大的信息增益  
    bestInfoGain = 0.0  
    # 定义分割后信息增益最大的特征  
    bestFeature = -1  
    # 遍历特征,即所有的列,计算每一列分割后的信息增益,找出信息增益最大的列  
    for i in range(numFeatures):  
        # 取出第i列特征赋给featList  
        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  
        # 如果分割后信息增益大于最好的信息增益  
        if(infoGain > bestInfoGain):  
            # 将当前的分割的信息增益赋值为最好信息增益  
            bestInfoGain = infoGain  
            # 分割的最好特征列赋为i  
            bestFeature = i  
    # 返回分割后信息增益最大的特征列  
    return bestFeature  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值