机器学习——决策树算法

news2024/11/23 22:21:02

一、实验目的

掌握如何实现决策树算法,用并决策树算法完成预测。

二、实验内容

本次实验任务我们使用贷款申请样本数据表,该数据表中每列数据分别代表ID、年龄、高薪、有房、信贷情况、类别,我们根据如下数据生成决策树,使用代码来实现该决策树算法。

三、实验原理或流程

实验原理:

决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法,是直观运用概率分析的一种图解法。由于这种决策分支画成图形很像一棵树的枝干,故称决策树。在机器学习中,决策树是一个预测模型,他代表的是对象属性与对象值之间的一种映射关系。Entropy =系统的凌乱程度,使用算法ID3,C4.5和C5.0生成树算法使用嫡。这一度量是基于信息学理论中嫡的概念。

决策树的算法原理
(1)找到划分数据的特征,作为决策点
(2)利用找到的特征对数据进行划分成n个数据子集。
(3)如果同一个子集中的数据属于同一类型就不再划分,如果不属于同一类型,继续利用特征进行划分。
(4))指导每一个子集的数据属于同一类型停止划分。
2、决策树的优点:计算复杂度不高,输出结果易于理解,对中间值的缺失不敏感,可以处理不相关的特征数据
缺点:可能产生过度匹配的问题

四、实验过程及源代码

1.构建决策树如下:

该决策树的结构,可以用字典表示为:
{'有自己的房子':{0:{'有工作':{O: 'no',1: 'yes'}},1 : 'yes'}}

接下来我们编写python代码来递归构建决策树。
2.打开Pycharm,新建项目,项目位置名称:/data/Test

编译器选择python3.5,如下图所示,然后点击OK:

3.在项目名Test下,创建Python File文件。

4.创建以dectree命名的文件。

5.打开dectree.py文件,编写代码构建决策树。

(1)计算数据集的香农嫡。

(2)创建测试数据集。

(3)创建函数splitDataset,按照特征划分数据集。

(dataSet:待划分的数据集,axis:划分数据集的特征,value:需要返回的特征值)

(4)选择最优特征。

(5)统计classList中出现次数最多的元素(类标签)。
 

(6)创建决策树。

6.右键,选择Run 'dectree',运行程序。

运行结果如下:

7.接下来我们用上述已经训练好的决策树做分类,只需要提供这个人是否有房,是否是高薪工作这两个信息即可。我们在dectree.py文件中添加一个classify函数,代码如下:

8.最后我们在dectree.py文件中的main函数中,输入测试数据[0,1],它代表没房,但是有高薪工作,该函数完整代码如下:

9.然后在dectree.py文件中右键,选择Run 'dectree',运行程序。

根据运行结果,我们得知会同意贷款给这个人。

五、实验结论及心得

实验结论:

本次实验中,我们使用决策树对贷款申请样本数据进行了分类和预测。通过建立决策树模型,我们可以根据不同的特征属性对个体进行分类,判断其是否符合贷款资格的要求。通过对实验结果的观察,可以得出以下结论:高薪、有房和信贷情况是影响贷款申请通过与否的重要因素;在这些因素相同的情况下,年龄越大的人更容易获得贷款资格。同时,我们也需要注意在训练决策树模型时避免过拟合现象的发生,需要对数据集进行合理分割和调整参数。总之,决策树是一种简单而有效的机器学习方法,可以应用于多个领域。

心得体会:

学习决策树的过程中,我深刻认识到了这种机器学习算法的优点和不足。决策树具有模型简单、易于理解、可解释性强等特点,在数据挖掘、分类预测等领域有着广泛的应用。但同时也存在一些缺点,如容易出现过拟合、对异常值敏感等问题。因此,在使用决策树时需要对数据进行充分的处理和清洗,采用剪枝和交叉验证等方法来避免过拟合现象的发生。此外,还需要注意选择合适的评估指标和调整参数来优化模型性能。总之,学习决策树不仅可以帮助我们更好地理解机器学习的基本原理,也有助于我们在实际应用中轻松构建高效的分类模型。

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

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

相关文章

Python基础 P7 字典和集合

文章目录 Python基础 P7 字典和集合字典字典基础内置函数增操作fromkeys()删操作pop()、popitems()和clear()改操作update()查操作get()和in/not in视图对象keys(),values(),items()拷贝copy()setdefault() 其他函数键值数量len()列表转换list()迭代器转换iter()逆向序列revers…

【初识C语言(1)】变量和常量

文章目录 1. 局部变量和全局变量2. 变量的作用域和生命周期3. 常量 生活中的有些值是不变的(比如:圆周率,性别,身份证号码,血型等等)有些值是可变的(比如:年龄,体重&…

GitHub 上数百万个存储库可能容易被劫持

GitHub 上数以百万计的企业软件存储库很容易受到重新劫持,这是一种相对简单的软件供应链攻击,威胁行为者将依赖于特定存储库的项目重定向到恶意攻击。 研究人员在本周的一份报告中表示,这个问题与 GitHub 用户或组织更改项目名称或将其所有权…

chatgpt赋能python:Python自动执行程序:提高效率,降低出错率的利器

Python自动执行程序:提高效率,降低出错率的利器 随着科技的进步和信息技术的发展,人们越来越依赖计算机和自动化技术来完成繁琐的工作。自动化编程技术的应用也越来越广泛,其中Python自动执行程序被广泛使用。 Python自动执行程…

图像处理的两种变换:2D-DWT和Gabor变换

pywt官方API文档: 2D Forward and Inverse Discrete Wavelet Transform 目录 1. 二维离散小波变换2D-DWT 1.1 二维离散小波变换的相关公式 1.2 使用pywt实现2D-DWT 2. 窗口傅里叶变换Gabor 1. 二维离散小波变换2D-DWT DWT(Discrete Wavelet Transformation)代…

c语言通讯录——静态版本(带详细文字解释)

1.定义用于存储一个人信息的结构体 typedef struct PeoInfo {char name[NAME_MAX];int age;char sex[SEX_MAX];char addr[ADDR_MAX];char tele[TELE_MAX]; }PeoInfo;定义了一个名为 “PeoInfo” 的结构体(struct)类型,用于存储有关一个人的信…

MIAOYUN“一云多芯”全栈信创解决方案获认可!

信创,即信息技术产业创新,是数据安全、网络安全的基础,也是新基建的重要组成部分。信创产业发展已经成为经济数字化转型、提升产业链发展的关键,促进信创产业在本地落地生根,带动传统IT信息产业转型,构建区…

使用POI将excel文件导入到数据库

概要 随着时代变化,有的需求也会越来越多,例如:有的文件上千条数据需要导入数据库不可能手动一条条导入吧?太浪费时间了!所以需要编写程序让程序来导入 整体架构流程 我这里使用的是springbootmybatisMVC的项目架构…

接口测试流程、测试点和测试工具

目录 前言: 一、什么情况下开展接口测试? 二、如何进行接口测试 三、接口测试用例设计 四、接口测试工具 前言: 接口测试是一种重要的测试类型,用于验证应用程序接口的功能、性能和可靠性。 一、什么情况下开展接口测试&am…

AtomicInteger源码

介绍 Atomic包是java.util.concurrent下的另一个专门为线程安全设计的Java包,包含多个原子操作类。这个包里面提供了一组原子变量类。其基本的特性就是在多线程环境下,当有多个线程同时执行这些类的实例包含的方法时,具有排他性,…

大坝渗流监测的目的和意义

​  大坝渗流监测是对坝体内渗流场进行的监测,是确保大坝安全运行的重要手段。通过监测,可以掌握渗流场的变化规律,并根据渗流场的变化趋势预测坝体、坝基可能出现的问题。通常根据渗漏量与渗流量两个指标来进行监测,即渗漏量小…

【ndarry的基本操作】——numpy03

目录索引 基本索引和切片:普通索引:省略索引:多省略索引:间隔索引: 形态变换操作:reshape():resize():transpose():*通过参数进行转置:* flatten()&#xff1…

usb转8路串口模块

开源USB转8路串口PCB设计 文章目录 开源USB转8路串口PCB设计1. 简介2. 说明3. 一种跨电脑跨USB口的端口号自动识别方法4.开源地址 今天给大家介绍一款USB转8路串口的PCB设计,并提供一种跨电脑跨USB口的端口号自动识别方法。 1. 简介 芯片采用沁恒的CH348Q&#xff…

Kotlin Jetpack Compose - 实现Tab布局

Tab布局是一种常见的UI设计,它允许用户在不同的视图或数据集之间切换。我们将使用Jetpack Compose的 TabRow 和 ScrollableTabRow 组件来实现这个布局。 一、基本的Tab布局——TabRow 二、滚动的Tab布局——ScrollableTabRow 组件 三、自定义Tab组件 一、基本的T…

音视频数据处理-H265/HEVC视频码流分析

一、H265概述 H265/HEVC(Hight Efficiency Video Coding)是由ITU-T和ISO/IEC两大组织在H264/AVC的基础之上推出的新一代高效视频编码标准,主要为应对高清和超高清视频在网络传输和数据存储方面带来的挑战。上一篇文章对H264/AVC视频码流进行…

chatgpt赋能python:Python自动化定位元素的方法详解

Python自动化定位元素的方法详解 作为一名Python编程经验丰富的工程师,我经常需要用到自动化定位元素的方法。今天,我想与大家分享一下在Python中如何自动化定位元素,以帮助那些想要进行Web自动化测试的开发者们。 什么是自动化定位元素 在…

chatgpt赋能python:Python聊天界面:开发高效且易于使用的消息应用

Python聊天界面:开发高效且易于使用的消息应用 Python是一种十分流行的编程语言,最近几年来,这种语言在GUI应用程序开发方面也越来越受欢迎。在本篇文章中,我们将介绍如何使用Python开发一个高效且易于使用的消息应用程序——聊天…

chatgpt赋能python:Python自动化定位——解放SEO员工的双手

Python自动化定位——解放SEO员工的双手 SEO(Search Engine Optimization)是现代数字营销中必不可少的一环。面对庞大的网络世界,SEO员工们日复一日地进行着关键词排名、页面跳转、链接检测等重复且繁琐的工作。而Python作为一种功能强大、易…

chatgpt赋能python:Python自动执行:提高效率,增强灵活性

Python自动执行: 提高效率,增强灵活性 随着时代进步,人们日常生活中越来越依赖计算机和网络技术,而在编程领域,Python语言作为一种高效、可读性好、易学易用的语言,得到了广泛应用。其中,Pytho…

【算法之栈与队列I】leetcode239. 滑动窗口最大值

232.用栈实现队列 力扣题目链接 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现 MyQueue 类: void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并…