ID3决策树的Python代码实现

ID3决策树的Python代码实现

计算数据集的熵

  1. 输入数据集
  2. 遍历feature中的每一个值,并计数
  3. 根据计数计算概率和熵
def cal_entropy(data,feature):
    """
    计算熵的函数
    输入:数据集的某一个feature
    输出:数据集这个feature的熵
    """
    data_size = len(data)
    # 创建一个用来储存计数的字典
    count = {}
    # 找出这个特征的所有取值的列表
    feature_value = set(data[feature])
    # 下面开始遍历,并且记录每个类别出现的次数
    for f in feature_value:
        # 如果某个feature中的类别重复出现,则计数值+1
        # 如果某个feature中的类别第一次出现,则设置初始值为0
        count[f] += 1 if f in count.keys() else count[f] = 0

    # 计数完成之后,开始计算概率和熵
    ent_sum = 0
    for key in count:
        # 某个类别出现的概率
        prob = count[key]/data_size
        # 计算这个类别的熵
        ent = -prob*np.log(prob,2)
        ent_sum += ent
    return ent

对数据集进行划分

  1. 输入数据集和feature
  2. 对每一个feature计算熵
  3. 比较熵值,并找出熵最大的那个特征作为最佳的特征值
def feature_selction(data):
    """
    特征选择函数
    输入:数据集
    输出:最佳特征
    """
    # 计算原始数据集的熵
    init_ent = cal_entropy(data)
    # 准备收集每个feature的熵
    feature_ent = {}
    # 假设有一个列表里面是每一个特征名字
    feature_list = ['feature1','feature2']
    # 开始遍历每一个特征
    for f in feature_list:
        # 计算每一个feature的熵
        ent = cal_entropy(data,f)
        feature_ent[f] = ent
    # 从中找出最佳特征来
    best_feature = sorted(dict,key=lambda x:dict[x])[-1]
    return best_feature

## 创建决策树

def create_tree(data,classes):
“””
创建决策树
输入:数据集,分类
输出:决策树
“””
# 首先将y的分类提取出来
label = set(data[label])
# 计算y每个分类的个数
from collections import Counter
label_count = Counter(label)

# 选择最好的特征,构建根结点
best_feature = feature_selction(data)
# 得到最好特征的值的列表
feature_value = set(data[best_feature])

# 
node = classes[best_feature]

# 创建决策树字典用来储存
DT = {best_feature:{}}
# 迭代每个特征值进行分类储存
for value in feature_value:
    DT[best_feature][value][feature] = feature
    DT[best_feature][value][label] = label

“`

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值