ID3算法的Python实现

这篇博客基于《ID3算法的原理及实现(Python)》进行了改进,增加了拆分文件、GUI界面以及递归终止条件。文章通过GUI展示了如何读取数据并进行预测,使用的是蘑菇数据集,包含7853条训练数据和271条测试数据,用于判断蘑菇的食用安全性。
摘要由CSDN通过智能技术生成

本篇文章的代码是在《ID3算法的原理及实现(Python)》的基础上进行添加和修改实现的,感谢原作者。

算法的原理大家可以通过上文链接传送过去看,下面我主要介绍一下我在原代码基础上添加的功能。


1、添加的功能

1、拆分文件,使得函数的调用更加清晰
2、增加了GUI,增加了数据的读取和预测功能
3、增加了一个递归终止条件

2、GUI界面展示

GUI界面展示

以文件中给出的数据集为例,填充如下:
GUI界面展示

注:这里类标签的位置从0开始

ID3算法是一种分类算法,它基于信息增益选择最优特征来构建决策树。下面是一个简单的Python实现: ```python import math def calc_entropy(data): """ 计算数据集的熵 """ size = len(data) classes = {} for item in data: label = item[-1] if label not in classes: classes[label] = 0 classes[label] += 1 entropy = 0.0 for key in classes: prob = float(classes[key]) / size entropy -= prob * math.log(prob, 2) return entropy def split_data(data, axis, value): """ 划分数据集 """ ret_data = [] for item in data: if item[axis] == value: reduced_item = item[:axis] reduced_item.extend(item[axis+1:]) ret_data.append(reduced_item) return ret_data def choose_feature(data): """ 选择最优特征 """ num_features = len(data[0]) - 1 base_entropy = calc_entropy(data) best_info_gain = 0.0 best_feature = -1 for i in range(num_features): feat_list = [example[i] for example in data] unique_vals = set(feat_list) new_entropy = 0.0 for value in unique_vals: sub_data = split_data(data, i, value) prob = len(sub_data) / float(len(data)) new_entropy += prob * calc_entropy(sub_data) info_gain = base_entropy - new_entropy if info_gain > best_info_gain: best_info_gain = info_gain best_feature = i return best_feature def create_tree(data, labels): """ 构建决策树 """ class_list = [example[-1] for example in data] if class_list.count(class_list[0]) == len(class_list): return class_list[0] if len(data[0]) == 1: return max(set(class_list), key=class_list.count) best_feat = choose_feature(data) best_feat_label = labels[best_feat] my_tree = {best_feat_label: {}} del(labels[best_feat]) feat_values = [example[best_feat] for example in data] unique_vals = set(feat_values) for value in unique_vals: sub_labels = labels[:] my_tree[best_feat_label][value] = create_tree(split_data(data, best_feat, value), sub_labels) return my_tree ``` 以上是一个简单的ID3算法Python实现,其中calc_entropy函数计算数据集的熵,split_data函数用于划分数据集,choose_feature函数选择最优特征,create_tree函数递归地构建决策树。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值