决策树(基于增益率)之python实现

本文介绍了如何使用Python实现决策树算法,重点在于增益率的选择标准。通过计算信息熵、增益和增益率,筛选并确定最佳划分属性。文中提供了一个手动编写的决策树代码示例,并在简化后的西瓜数据集上进行了测试,结果显示了决策树的结构,但对部分未知类别处理方式提出了疑问。
摘要由CSDN通过智能技术生成

如图,为使用到的公式,信息熵表明样本的混乱程度,增益表示熵减少了,即样本开始分类,增益率是为了平衡增益准则对可取值较多的属性的偏好,同时增益率带来了对可取值偏小的属性的偏好,实际中,先用增益进行筛选,选取大于增益平均值的,然后再选取其中增益率最高的。

以下代码纯粹手写,未参考其他人代码,如果问题,请不吝赐教。

1,计算信息熵的函数

import numpy as np
# 计算信息熵
# data:like np.array
# data.shape=(num_data,data_features+1) 即属性与label放一起了
def entropy(data,num_class):
    class_set=list(set(data[:,-1]))
    result=0
    length=len(data)
#     这里修改一下,不使用num_class
    for i in range(len(class_set)):
        l=len(data[data[:,-1]==class_set[i]])
        p=l/length
#         防止某类未出现,概率为0
        if p>0:
            result-=p*np.log2(p)
    return result
Python学习qq群:10667510,送全套爬虫学习资料与教程~

2,计算增益及属性a的固有值(IV)

# 计算不同属性的信息增益
# detail_features:特征构成的list,每个特征的可取值构成list元素,即也是list
def calculate_gain(data,detail_features,num_class):
  '''返回各属性对应的信息增益及平均值'''
    result=[]
    ent_data=entropy(data,num_class)
    for i in range(len(detail_features)):
        res=ent_data
        for j in range(len(detail_features[i])):
#             有问题?
            part_data=data[data[:,i]==detail_features[i][j]]
            length=len(part_data)
           
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值