机器学习——决策树及其可视化

1、决策树概念

顾名思义,决策树是利用数据结构中树结构来进行判断,每一个结点相当于一个判断条件,叶子结点即是最终的类别。以鸢尾花为例,可以得到如下的决策树:
鸢尾花分类决策树可视化

2、决策树分类的依据是什么?

根据前面分析,我们知道,决策树每个非叶子节点相当于一个判断条件,那如何来选择这些条件呢?举个简单的例子,给定两个样本,如果判断条件不同,那么分类的次数和结果可能就不同。为了方便选择,常用的方法有以下三种:
1)信息增益:根据信息的定义之一:信息是可以减少不确定性的东西(香农—信息论奠基人),信息增益是基于(Entropy)的度量,熵是一个集合中数据的不确定性或混乱程度。信息增益衡量的是在某个特征上划分数据后,数据的不确定性减少了多少。信息增益越大,特征越好。
公式:
信息增益公式
2)基尼系数
基尼指数是一种衡量集合纯度的度量,基尼指数越低,数据纯度越高。在决策树中,我们选择基尼指数最小的特征进行划分。
公式:
基尼系数
3)增益率
增益率是对信息增益的一种改进,旨在解决信息增益偏向于选择取值较多的特征的问题。增益率通过对信息增益进行归一化处理来减少这种偏好。
通常使用基尼系数和信息增益来衡量分类的依据。

3、根据天气决策是否打网球案例。(使用决策树)

import pandas as pd
data = {'Outlook': ['Sunny', 'Sunny', 'Overcast', 'Rain', 'Rain', 'Rain', 'Overcast', 'Sunny', 'Sunny', 'Rain', 'Sunny', 'Overcast', 'Overcast', 'Rain'],'Temperature': ['Hot', 'Hot', 'Hot', 'Mild', 'Cool', 'Cool', 'Cool', 'Mild', 'Cool', 'Mild', 'Mild', 'Mild', 'Hot', 'Mild'],'Humidity': ['High', 'High', 'High', 'High', 'Normal', 'Normal', 'Normal', 'High', 'Normal', 'Normal', 'Normal', 'High', 'Normal', 'High'],'Windy': [False, True, False, False, False, True, True, False, False, False, True, True, False, True],'PlayTennis': ['No', 'No', 'Yes', 'Yes', 'Yes', 'No', 'Yes', 'No', 'Yes', 'Yes', 'Yes', 'Yes', 'Yes', 'No']
}
data = pd.DataFrame(data)
X = data[['Outlook', 'Temperature', 'Humidity', 'Windy']]
y = data['PlayTennis']
x=pd.get_dummies(X)   # 转化成独热码
from sklearn.tree import DecisionTreeClassifier
estimator = DecisionTreeClassifier(criterion='gini')    # criterion为选择标准,默认为gini,即基尼系数,entropy为信息增益
estimator.fit(x,y)
# 输入十个案例进行判断
test_data = [{"Outlook": "Rain", "Temperature": "Hot", "Humidity": "High", "Windy": True, "PlayTennis": "No"},{"Outlook": "Sunny", "Temperature": "Mild", "Humidity": "High", "Windy": True, "PlayTennis": "No"},{"Outlook": "Overcast", "Temperature": "Mild", "Humidity": "High", "Windy": False, "PlayTennis": "Yes"},{"Outlook": "Sunny", "Temperature": "Cool", "Humidity": "Normal", "Windy": False, "PlayTennis": "Yes"},{"Outlook": "Rain", "Temperature": "Cool", "Humidity": "High", "Windy": False, "PlayTennis": "Yes"},{"Outlook": "Sunny", "Temperature": "Hot", "Humidity": "Normal", "Windy": True, "PlayTennis": "No"},{"Outlook": "Overcast", "Temperature": "Hot", "Humidity": "Normal", "Windy": True, "PlayTennis": "Yes"},{"Outlook": "Rain", "Temperature": "Mild", "Humidity": "Normal", "Windy": True, "PlayTennis": "No"},{"Outlook": "Overcast", "Temperature": "Cool", "Humidity": "High", "Windy": False, "PlayTennis": "Yes"},{"Outlook": "Sunny", "Temperature": "Mild", "Humidity": "Normal", "Windy": False, "PlayTennis": "Yes"}
]
test_data = pd.DataFrame(test_data)
x_test = test_data[['Outlook', 'Temperature', 'Humidity', 'Windy']]
x_test = pd.get_dummies((x_test))
estimator.predict(x_test)

预测结果如下所示:
在这里插入图片描述

estimator.score(x_test,test_data['PlayTennis'])  # 正确率计算,结果为0.8

4、决策树的可视化

使用API:sklearn.tree.export_graphviz(estimator, out_file="", feature_names=[","])

out_file后缀需要为.dot文件,feature_names传入对应的特征名称即可,否则显示异常

最后将生成的.dot文件在决策树可视化网站显示即可,以上述为例:
决策树可视化文件生成

在这里插入图片描述

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

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

相关文章

跨越语言的界限:Vue I18n 国际化指南

前言 📫 大家好,我是南木元元,热爱技术和分享,欢迎大家交流,一起学习进步! 🍅 个人主页:南木元元 目录 国际化简介 vue-i18n 安装和配置 创建语言包 基本使用 切换语言 动态翻…

CTFShow的RE题(二)

逆向5 附件无后缀,查一下是zip,解压得到一个exe一个dll文件。 往下继续看 但也根进去看看 发现是在加载的dll文件 还有一个返回时调用的函数 发现是打印函数 根据以往的经验应该是要跳转到这里,动调一下。 发现exe链接了dll,…

Linux 安装 sftp

参考资料: linux 安装sftp及使用sftp工具类上传和下载-CSDN博客 安装 OpenSSH 服务,启动 SSH 服务,并设置为开机启动: yum install openssh-server systemctl start sshd systemctl enable sshd 新增用户(yk_sftp 为…

Python轮子:文件比较器——filecmp

原文链接:http://www.juzicode.com/python-module-filecmp filecmp模块可以用来比较文件或者目录。 安装和导入 filecmp是Python自带的模块,不需要额外安装,直接导入即可: import filecmp as fc #或者 import filecmp cmp()比较…

ClickHouse中PRIMARY KEY和ORDER BY关键字的关系

在ClickHouse中,PRIMARY KEY和ORDER BY关键字在表的创建过程中扮演着重要的角色,它们共同决定了数据在物理存储上的排序方式,这对查询性能有着直接的影响。理解它们之间的关系对于设计高效的ClickHouse表结构至关重要。 ORDER BY ORDER BY定…

Lock4j简单的支持不同方案的高性能分布式锁实现及源码解析

文章目录 1.Lock4j是什么?1.1简介1.2项目地址1.3 我之前手写的分布式锁和限流的实现 2.特性3.如何使用3.1引入相关依赖3.2 配置redis或zookeeper3.3 使用方式3.3.1 注解式自动式3.3.2 手动式 4.源码解析4.1项目目录4.2实现思路 5.总结 1.Lock4j是什么? 1.1简介 lock4j是苞米…

昇思第6天

函数式自动微分 神经网络的训练主要使用反向传播算法,模型预测值(logits)与正确标签(label)送入损失函数(loss function)获得loss,然后进行反向传播计算,求得梯度&#…

【算法专题】双指针算法

1. 移动零 题目分析 对于这类数组分块的问题,我们应该首先想到用双指针的思路来进行处理,因为数组可以通过下标进行访问,所以说我们不用真的定义指针,用下标即可。比如本题就要求将数组划分为零区域和非零区域,我们不…

时序分析基本概念介绍——SI/crosstalk/delta delay/noise/timing Window

文章目录 前言一、Crosstalk1. Crosstalk Delay Effects2. Crosstalk Noise Effects 二、Crosstalk Analysis1. Crosstalk Delay Analysis2. Crosstalk Noise Analysis 三、如何 fix delta delay 和 noise violations1. 检查delta delay 和 noisedelta delay checknoise check …

【C语言小知识】缓冲区

缓冲区 当我们使用printf()将数据显示在屏幕上,或者使用scanf()函数将数据输入到电脑里,我们是否会产生些许疑问?为何输入的字符会直接显示到屏幕上等等。这里需要介绍一个C语言中的一个关键概念——缓冲区。 当我们使用老式系统进行运行代码…

suricata7 rule加载(一)加载 action

suricata7.0.5 一、前提条件 1.1 关键字注册 main | --> SuricataMain|--> PostConfLoadedSetup|--> SigTableSetupsigmatch_table是一个全局数组,每个元素就是一个关键字节点,是对关键字如何处理等相关回调函数。非常重要的一个结构&#x…

C语言牢大坠机

目录 开头程序程序的流程图《牢大坠机》&#xff08;视频正在审核中&#xff09;结尾 开头 大家好&#xff0c;我叫这是我58&#xff0c;今天&#xff0c;我们要来看关于牢大坠机的一些东西。 程序 #define _CRT_SECURE_NO_WARNINGS 1 #define HIGH 66 #include <stdio.h…

ubuntu防火墙指定端口开放设置

文章目录 打开某个端口查看防火墙状态和开放端口例子 在 Ubuntu 中管理防火墙通常使用 ufw&#xff08;Uncomplicated Firewall&#xff09;。以下是打开某个端口并查看防火墙状态的方法&#xff1a; 打开某个端口 启用 ufw&#xff08;如果尚未启用&#xff09;&#xff1a; …

PyCharm如何安装requirements.txt中的依赖包

问题&#xff1a;下载别人的源码&#xff0c;如何安装代码中requirement.txt中的依赖包。 解决方案&#xff1a; &#xff08;1&#xff09;打开PyCharm下面的Terminal&#xff0c;先为代码创建单独的虚拟环境并进入到虚拟环境中&#xff08;每个项目单独的环境&#xff0c;这…

GlusterFS分布式存储系统

GlusterFS分布式存储系统 一&#xff0c;分布式文件系统理论基础 1.1 分布式文件系统出现 计算机通过文件系统管理&#xff0c;存储数据&#xff0c;而现在数据信息爆炸的时代中人们可以获取的数据成指数倍的增长&#xff0c;单纯通过增加硬盘个数来扩展计算机文件系统的存储…

ubuntu的screen会话,断开远程连接也能照样运行程序

文章目录 创建新的 screen 会话管理 screen 会话例子关闭某一个 screen 会话删除某一个 screen 会话 在 Ubuntu 中使用 screen 工具可以创建和管理多个终端会话。以下是创建 screen 会话的方法&#xff1a; 创建新的 screen 会话 启动一个新的 screen 会话&#xff1a; screen…

Docker搭建MySQL双主复制详细教程

在此之前需要提前安装好Docker和 Docker Compose 。 一、创建目录 首先创建一个本地数据挂载目录。 mkdir -p master1-data master2-data二、编写docker-compose.yml version: 3.7services:mysql-master1:image: mysql:5.7.36container_name: mysql-master1environment:MYSQL_…

VBA初学:零件成本统计之四(汇总计算)

第四步&#xff0c;最后进行汇总计算 汇总统计的计算 Sub count() Dim rng As Range Dim i As Long, j As Long Dim arr_s, arr, brr, crr, drr Dim rowscount As Long Dim X As Variant Dim rg As Single, xb As Single, zj As SingleMsgBox "汇总计算时间较久&#xff…

【HTML入门】第二课 - head标签下的常见标签们

目录 1 本节概要 2 head下的常见标签 2.1 网页编码设置 2.2 网页的标题 2.3 样式标签 3 head标签的内容不会显示到网页上 4 查看网页源代码 1 本节概要 上一节&#xff0c;我们说了HTML网页最基本的框架标签&#xff0c;说到标签分为head头部和body身体部分。这一小节呢…

sqlite3数据库常用的API接口

使用sqlite3的API接口 需要加头文件 #include 编译时&#xff0c;需要连接sqlite3的库 -lsqlite3 1.打开数据库文件的函数int sqlite3_open(const char *filename, /* Database filename (UTF-8) */sqlite3 **ppDb /* OUT: SQLite db handle */ );功能&#xff1…