python - 从零开始在 Python 中实现决策树 Id3 算法
问题描述
我刚开始学习机器学习。我正在学习决策树,我试图从头开始在 python 中实现它。实际上,我使用了解释 python 代码的网站。(https://www.python-course.eu/Decision_Trees.php)
但我无法理解
tree = {best_feature:{}}
部分的意思。它是字典还是熊猫图书馆的一部分?而且,如果有人解释这部分,那将是一个很大的帮助
parent_node_class = np.unique(data[target_attribute_name])[np.argmax(np.unique(data[target_attribute_name],return_counts=True)[1])]
我的理解是这行代码从目标属性中找到出现频率最高的值。它是否正确?如果是这样,目标属性如何成为父节点?不应该是信息增益最好的特征吗?
另外,请建议一些具有更简单算法实现的站点。
解决方案
我的回答将与您使用的编程语言无关。
首先,我们必须有一组数据,其中每个列名代表一个属性,通常最后一列或属性是该行的决策或结果。
该算法的目标是构建一棵树,其中第一个节点是最有用的问题(更大的信息增益)。但是为了决定哪个是必须计算每个属性的熵。
所以第一步是知道根属性是什么。为此,他必须提取每个属性的熵,并制定相应的数学公式,才能获得信息增益。这是为了在此迭代中比较哪一个具有更大的信息增益,因此将是根。
以下将是每个属性如何具有选项,例如:天空(晴天、下雨、多云),然后它将计算每个属性选项添加到其他属性的信息增益。为了更清楚,他在数据集中查找所有记录,例如:晴天 + 所有温度,晴天 + 下雨天。但是,如果该选项的熵为 0,则您无需再提出任何问题。
对于您提出的问题,答案是该属性对应于最佳特征。换句话说,信息增益最高的功能,因此对我最有利的功能,首先询问它。
推荐阅读
- node.js - 无法运行 npm install 命令
- python - 我怎样才能避免制作两个 tkinter 窗口?
- laravel - 公共 Laravel API 的身份验证
- python - 为 python dict 创建 avro 模式
- c# - 最大的无错误和未来兼容性:重新定位到更高的 .NET 版本?
- ios - Swift 泛型。如何检查数组元素的类型是否继承自其他类
- python - 使用“-1”作为索引号时,元素插入到最后第二个位置。它是怎么发生的?
- python - python从
- java - 为什么我的广播接收器没有响应任何电话状态?
- mysql - 错误:错误:在 DENO 中读取数据包超时