决策树分类算法

news2024/12/22 19:00:36

#CSDN AI写作助手创作测评 

目录

ID3算法 

1.算法原理

2.代码实现

3.ID3算法的优缺点分析

C4.5算法

1.原理 

2.优缺点

心得感受


决策树表示方法是应用最广泛的逻辑方法之一,它从一组无次序、无规则的事例中推理出决策树表示形式的分类规则。在决策树的内部节点进行属性值的比较,根据不同的属性值判断从该节点向下的分支,在决策树的叶节点得到结论

决策树分类算法的主要优点包括易于理解和解释、对缺失值不敏感、能处理不相关特征等。它的主要缺点是容易过拟合、对噪声敏感、不稳定等问题。

在实践中,决策树分类算法可以使用不同的算法实现,如ID3、C4.5和CART等。这些算法的主要区别在于如何选择属性、如何处理连续值属性和如何处理缺失值等方面。

ID3算法 

1.算法原理

 ID3算法是一种决策树学习算法,通过对数据集进行递归分割来构建决策树。它基于信息增益选择最佳属性进行分裂。下面是ID3算法的基本原理:

  • 1. 选择最佳分裂属性:对于数据集中的每个属性,计算它们对数据集的信息增益(或信息增益比),选择信息增益最大(或信息增益比最大)的属性作为该节点的分裂属性。
  • 2. 将节点分裂成子节点:用分裂属性将数据集分成几个子集,每个子集对应一个子节点。
  • 3. 递归处理子节点:对每个子节点递归进行操作,直到所有叶子节点都是同一类别或无法继续分裂。
  • 4. 剪枝:使用预留的测试数据集来剪枝以防止过拟合。
  • 5. 生成决策树:所有子节点的递归处理完成后,生成一棵决策树。

ID3算法的缺点是对于具有连续属性和缺失值的数据集处理能力较差。因此,它常与C4.5和CART算法结合使用,用于改进这些限制。

2.代码实现

import math

def entropy(data):
    """计算数据集的熵"""
    count = {}
    for item in data:
        if item[-1] not in count:
            count[item[-1]] = 0
        count[item[-1]] += 1
    entropy = 0
    for key in count:
        prob = count[key] / len(data)
        entropy -= prob * math.log2(prob)
    return entropy

def split_data(data, feature, value):
    """根据特征和特征值划分数据集"""
    sub_data = []
    for item in data:
        if item[feature] == value:
            sub_item = item[:feature]
            sub_item.extend(item[feature+1:])
            sub_data.append(sub_item)
    return sub_data

def info_gain(data, feature):
    """计算特征的信息增益"""
    count = {}
    for item in data:
        if item[feature] not in count:
            count[item[feature]] = 0
        count[item[feature]] += 1
    sub_entropy = 0
    for key in count:
        prob = count[key] / sum(count.values())
        sub_data = split_data(data, feature, key)
        sub_entropy += prob * entropy(sub_data)
    return entropy(data) - sub_entropy

def choose_feature(data):
    """选择最优特征"""
    max_gain = 0
    best_feature = -1
    for i in range(len(data[0])-1):
        gain = info_gain(data, i)
        if gain > max_gain:
            max_gain = gain
            best_feature = i
    return best_feature

def majority_vote(class_list):
    """多数表决"""
    count = {}
    for item in class_list:
        if item not in count:
            count[item] = 0
        count[item] += 1
    return max(count, key=count.get)

def create_tree(data, labels):
    """创建决策树"""
    class_list = [item[-1] for item in data]
    if class_list.count(class_list[0]) == len(class_list):
        return class_list[0]
    if len(data[0]) == 1:
        return majority_vote(class_list)
    best_feature = choose_feature(data)
    best_label = labels[best_feature]
    tree = {best_label: {}}
    del(labels[best_feature])
    count = {}
    for item in data:
        if item[best_feature] not in count:
            count[item[best_feature]] = 0
        count[item[best_feature]] += 1
    for key in count:
        sub_labels = labels[:]
        sub_data = split_data(data, best_feature, key)
        tree[best_label][key] = create_tree(sub_data, sub_labels)
    return tree

# 测试数据
data = [
    [1, 1, 'yes'],
    [1, 1, 'yes'],
    [1, 0, 'no'],
    [0, 1, 'no'],
    [0, 1, 'no'],
]
labels = ['no surfacing', 'flippers']

# 构建决策树
tree = create_tree(data, labels)

# 输出熵和信息增益
print('Entropy:', entropy(data))
for i in range(len(labels)):
    print('Info gain of', labels[i], ':', info_gain(data, i))

 

3.ID3算法的优缺点分析

ID3算法是一种决策树学习算法,其优缺点如下:

优点:

  • 1. 算法简单易懂,不需要复杂的数学知识。
  • 2. 生成的决策树易于理解和解释,可以很好地反映属性之间的关系。
  • 3. 在处理大型数据集时,算法的效率较高。
  • 4. 可以处理缺失值。

缺点:

  • 1. ID3算法容易过拟合,很容易出现训练集上表现很好,但是在测试集上表现很差的情况。
  • 2. ID3算法只能处理离散型数据,对于连续型数据需要先进行离散化处理。
  • 3. 对于分类类别较多的数据集,生成的决策树不易读懂且容易过于复杂。
  • 4. ID3算法只考虑当前数据集中的最优特征,可能会错过更好的特征组合。这种算法也称为"贪心算法"。
  • 5. 对于噪声较大或者数据比较杂乱的数据集,决策树有些难以生成。

C4.5算法

1.原理 

C4.5算法是一种决策树算法,用于解决分类问题。它的主要原理是通过对数据集进行划分来构建一棵决策树,每次选择最优特征进行划分,直到所有数据都被正确分类或者没有更多的特征可用。

C4.5算法的具体步骤如下:

  • 1. 读入训练数据集,对每个特征计算出其信息增益比。信息增益比是指使用该特征进行划分所得到的信息增益与该特征对应的数据集的经验熵之比。
  • 2. 选择信息增益比最大的特征作为当前节点的划分特征,将该节点对应的数据集划分成若干个子集。
  • 3. 对每个子集递归执行步骤1和2,直到满足终止条件。
  • 4. 终止条件可以是所有数据都被正确分类,或者没有更多的特征可用进行划分。此时,将该节点标记为叶子节点,并将该节点的分类设定为子集中出现次数最多的分类。
  • 5. 对新的数据进行分类时,从根节点开始,根据特征的取值依次按照决策树的分支进行遍历,直到到达叶子节点,将叶子节点的分类作为最终结果。

C4.5算法在构建决策树的过程中,还采用了剪枝操作来避免过拟合,同时能够处理连续特征和缺失值。它是ID3算法的改进,相对于ID3算法而言,C4.5算法可以处理更复杂的数据集。

2.优缺点

C4.5算法是一种决策树分类算法,其优缺点如下:

优点:

  • 1. 可以处理具有连续值属性的数据集,而不需要对数据进行离散化处理。
  • 2. 能够自动剪枝,避免过度拟合的问题。
  • 3. 具有良好的可读性和可解释性,生成的决策树可以直观地表示数据集的结构和规律。
  • 4. 在实际应用中具有较高的准确性和鲁棒性。

缺点:

  • 1. 对于具有大量特征或特征空间较大的数据集,算法的时间复杂度很高,需要消耗大量的计算资源。
  • 2. 由于C4.5算法是基于贪心策略构建决策树的,可能会导致决策树的局部最优解与全局最优解不一致,从而影响分类准确性。
  • 3. 对于存在分类不平衡问题的数据集,可能会导致决策树生成过程中的类别偏差,从而影响分类准确性。

心得感受

CSDN的AI写作相当牛了,并且操作方便;

回答速度也是相当可观的,就是总会一卡一卡的,不过无伤大雅;

写代码的能力,我也是很认可的,比我强多了;

就我而言,平时想要需求人工智能的帮助的话,用这个创作助手就完全够用了;

就目前而言,大多数的语言模型的回答模式都差不多,类似于一个模板;

如果与chatgpt3.5相比的话,我还真比不出来,感觉差不多。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/603760.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue+springboot医院住院挂号登记收费系统7ui9s

医院信息管理系统的开发过程中,采用B / S架构,主要使用java语言进行开发,结合最新流行的springboot框架。使用Mysql数据库和idea开发环境。该医院信息管理系统包括用户、医生和管理员。其主要功能包括用户管理、医生管理、医生信息管理、预约…

chatgpt赋能python:Python删除非字母的SEO文章

Python删除非字母的SEO文章 Python是一个功能强大的编程语言,广泛应用于各类领域,包括搜索引擎优化(SEO)。在进行SEO优化时,有时需要从文本中删除非字母字符。这可以用Python快速高效地完成。本文将介绍如何使用Pytho…

基于PyQt5的图形化界面开发——堆栈动画演示

目录 0. 前言1. 了解堆栈2.代码实现3. 演示效果其他PyQt5文章 0. 前言 本文使用 PyQt5制作图形化界面演示数据结构中的堆栈操作 操作系统:Windows10 专业版 开发环境:Pycahrm Comunity 2022.3 Python解释器版本:Python3.8 第三方库&…

图文并茂教你快速入门React系列03-事件

事件 使用 React 可以在 JSX 中添加 事件处理函数。其中事件处理函数为自定义函数,它将在响应交互(如点击、悬停、表单输入框获得焦点等)时触发。 事件处理 // 这样写:export default function Button() {function handleClic…

chatgpt赋能python:Python删除文件的方法与注意事项

Python删除文件的方法与注意事项 在Python中,删除文件是很常见的操作。通常,我们需要在程序中删除不再需要的文件,或者在清理本地存储空间时删除缓存文件。本文将重点介绍Python如何删除文件以及可能涉及到的注意事项。 如何删除文件 Pyth…

redis设计原理009持久化策略

目录 RDB 备份原理 优点 缺点 AOF 不能保证绝对不丢失数据 重写 流程 结论 优点 缺点 如何选择RDB和AOF 同时开启 混合模式 运行过程 数据 数据恢复 优点 缺点 优化方案 总结 RDB 通过快照(snapshotting)完成的,当符合一定…

写一个python文件,在shell脚本中运行

最近要复现论文了,发现代码的主函数在.py文件中,运行脚本是在.sh中。 要命的事,我不懂,我怎么debug。 1.新建一个pycharm项目,新建main.py import argparsedef get_args():parser argparse.ArgumentParser()parser…

chatgpt赋能python:Python模块的优势和局限性

Python模块的优势和局限性 引言 Python作为一门高级编程语言,被广泛应用于各种领域。其中,Python内置的模块系统,为Python在编程中的灵活性和可扩展性提供了很大的优势。在本文中,我们将探讨Python模块的优势和局限性及其对Web优…

chatgpt赋能python:用Python剔除重复内容提升SEO效果

用Python剔除重复内容提升SEO效果 SEO是指通过优化网站结构和内容,在搜索引擎中获得更高的排名,从而提升网站流量和曝光度的一种网络营销方式。网站内容是SEO工作的重要组成部分,而剔除重复的内容对于SEO效果的提升有着重要的作用。本文将介…

chatgpt赋能python:Python制作人机交互界面:完美融合技术和用户体验

Python 制作人机交互界面:完美融合技术和用户体验 随着人工智能和互联网技术的发展,人机交互一直是非常热门的话题。Python 作为一门功能强大,应用广泛的高级编程语言,同样在这个领域发挥了重要作用。Python 制作人机交互界面&am…

【列表迭代器和增强for循环】

列表迭代器和增强for循环 1.列表迭代器 ListIterator:列表迭代器 通过List集合的listIterator()方法得到,所以说它是List集合特有的迭代器用于允许程序员沿任一方向遍历列表的列表迭代器,在迭代期间修改列表,并获取列表中迭代器…

SAP ABAP smartforms 创建并实现调用源码(下)

SAP ABAP smartforms 创建并实现调用源码(上) smartforms 入门详见上一篇博文。 一:报表程序调用 smartforms 示例:报表选中一行,将这行机相关数据通过表单打印出来。实际例子:采购订单表,销售订单。 调…

低代码平台iVX

一、ivx是啥 编写复杂的代码仍然是一项具有挑战性的任务。然而,现在有一种令人振奋的解决方案出现了——iVX,这是一种创新的可视化编程语言,为每个人提供快速掌握的能力。 iVX 是一个 “零代码” 的可视化编程语言,“零代码” 是…

基于flask的web应用开发——认识@app.route

目录 0. 前言1. flask简介2. 编写你的第一个网页3. 运行效果查看4. 本节小结 0. 前言 本专栏以基于flask实现web前端,即制作一个自己的网页 本节学习路由装饰器app.route() 操作系统:Windows10 专业版 开发环境:Pycahrm Comunity 2022.3 …

chatgpt赋能python:Python加R:让数据科学更加高效

Python加R:让数据科学更加高效 在过去的几年里,Python和R成为数据科学领域中最受欢迎的编程语言。它们提供了丰富的库和工具,帮助从事数据分析和机器学习的人们更加高效地完成任务。然而,Python和R都有其各自的优缺点。 Python的…

代理IP基础、实际运用,以及如何获取

代理IP是指通过一个中间服务器来转发用户的网络请求,从而在网络上隐藏用户的真实IP地址,或者绕过网络限制以达到访问特定内容的目的。下面是代理IP的一些基础知识: 1、代理IP的分类:代理IP可以分为普匿代理IP、透明代理IP和高匿代…

互联网医院牌照申请的资料以及流程

随着互联网的发展,互联网医院逐渐成为一个热门话题,越来越多的医疗机构开始尝试在互联网上提供医疗服务。然而,想要在互联网上开展医疗服务,必须获得互联网医院牌照。本文将介绍互联网医院牌照申请需要的资料、条件,以…

算法提高-搜索-DFS之剪枝与优化

DFS之剪枝与优化 DFS之剪枝与优化AcWing 165. 小猫爬山AcWing 166. 数独AcWing 167. 木棒AcWing 168. 生日蛋糕 DFS之剪枝与优化 AcWing 165. 小猫爬山 DFS的五种剪枝方法 (1)优化搜索顺序 (2)排除等效冗余 (3&#…

chatgpt赋能python:Python删除目录:如何在项目中正确删除文件夹?

Python 删除目录:如何在项目中正确删除文件夹? 在使用Python语言进行程序开发的过程中,可能会需要删除不再需要的目录,例如缓存和日志文件夹。然而,删除目录需要小心谨慎,避免误删除重要文件或目录。在本文…

chatgpt赋能python:Python列表自动排序

Python列表自动排序 Python是一种流行的编程语言,它有很多有用的内置函数和数据结构。其中一个最常用的数据结构是列表。在Python中,列表是一个有序的集合,可以存储多种类型的元素。列表不仅仅是一个数据结构,它还有一些有用的方…