当前位置: 首页 > news >正文

14- 决策树算法 (有监督学习) (算法)

  • 决策树是属于有监督机器学习的一种
  • 决策树算法实操:
from sklearn.tree import DecisionTreeClassifier
# 决策树算法
model = DecisionTreeClassifier(criterion='entropy',max_depth=d)
model.fit(X_train,y_train)


1、决策树概述

决策树是属于有监督机器学习的一种,起源非常早,符合直觉并且非常直观,模仿人类做决策的过程,早期人工智能模型中有很多应用,现在更多的是使用基于决策树的一些集成学习的算法。这一章我们把决策树算法理解透彻了,非常有利于后面去学习集成学习

1.1、示例一

上表根据历史数据,记录已有的用户是否可以偿还债务,以及相关的信息。通过该数据,构建的决策树如下:

 1.2、决策树算法特点

  • 可以处理 非线性的问题

  • 可解释性强,没有方程系数

  • 模型简单,模型预测效率高 if else

2、DecisionTreeClassifier使用

2.1、算例介绍

账号是否真实跟属性:日志密度、好友密度、是否使用真实头像有关系~

2.2、构建决策树并可视化

数据创建

import numpy as np
import pandas as pd
y = np.array(list('NYYYYYNYYN'))
print(y)
X = pd.DataFrame({'日志密度':list('sslmlmmlms'),'好友密度':list('slmmmlsmss'),'真实头像':list('NYYYYNYYYY'),'真实用户':y})

数据调整

X['日志密度'] = X['日志密度'].map({'s':0,'m':1,'l':2})
X['好友密度'] = X['好友密度'].map({'s':0,'m':1,'l':2})
X['真实头像'] = X['真实头像'].map({'N':0,'Y':1})
X['真实用户'] = X['真实用户'].map({'N':0,'Y':1})

 模型训练可视化

import matplotlib.pyplot as plt
from sklearn import tree
# 使用信息熵,作为分裂标准
model = DecisionTreeClassifier(criterion='entropy')
model.fit(X,y)
plt.rcParams['font.family'] = 'STKaiti'
plt.figure(figsize=(12,16))
fn = X.columns
_ = tree.plot_tree(model,filled = True,feature_names=fn)
plt.savefig('./iris.jpg')

2.3、信息熵

  • 构建好一颗树,数据变的有顺序了(构建前,一堆数据,杂乱无章;构建一颗,整整齐齐,顺序),用什么度量衡表示,数据是否有顺序:信息熵 。

  • 物理学,热力学第二定律(熵),描述的是封闭系统的混乱程度 。

2.4、信息增益

信息增益是知道了某个条件后,事件的不确定性下降的程度。写作 g(X,Y)。它的计算方式为熵减去条件熵,如下:

​​\bg_white \small g(X,y) \rm = H(Y) - H(Y|X)

表示的是,知道了某个条件后,原来事件不确定性降低的幅度。

2.5、手动计算实现决策树分类

s = X['真实用户']
p = s.value_counts()/s.size
(p * np.log2(1/p)).sum()   # 0.8812908992306926
x = X['日志密度'].unique()
x.sort()
# 如何划分呢,分成两部分
for i in range(len(x) - 1):split = x[i:i+2].mean()cond = X['日志密度'] <= split# 概率分布p = cond.value_counts()/cond.size# 按照条件划分,两边的概率分布情况indexs =p.indexentropy = 0for index in indexs:user = X[cond == index]['真实用户']p_user = user.value_counts()/user.sizeentropy += (p_user * np.log2(1/p_user)).sum() * p[index]print(split,entropy)
columns = ['日志密度','好友密度','真实头像']
lower_entropy = 1
condition = {}
for col in columns:x = X[col].unique()x.sort()print(x)# 如何划分呢,分成两部分for i in range(len(x) - 1):split = x[i:i+2].mean()cond = X[col] <= split# 概率分布p = cond.value_counts()/cond.size# 按照条件划分,两边的概率分布情况indexs =p.indexentropy = 0for index in indexs:user = X[cond == index]['真实用户']p_user = user.value_counts()/user.sizeentropy += (p_user * np.log2(1/p_user)).sum() * p[index]print(col,split,entropy)if entropy < lower_entropy:condition.clear()lower_entropy = entropycondition[col] = split
print('最佳列分条件是:',condition)


3、决策树分裂指标

常用的分裂条件时:

  • 信息增益

  • Gini系数

  • 信息增益率

  • MSE(回归问题)

3.1、信息熵(ID3)

在信息论里熵叫作信息量,即熵是对不确定性的度量。从控制论的角度来看,应叫不确定性。信息论的创始人香农在其著作《通信的数学理论》中提出了建立在概率统计模型上的信息度量。

对应公式:

H(x) = -\sum\limits_{i = 1}^n p(x)log_2p(x)

3.2、Gini系数(CART)

基尼系数是指国际上通用的、用以衡量一个国家或地区居民收入差距的常用指标。

基尼系数最大为“1”,最小等于“0”。基尼系数越接近 0 表明收入分配越是趋向平等。国际惯例把 0.2 以下视为收入绝对平均,0.2-0.3 视为收入比较平均;0.3-0.4 视为收入相对合理;0.4-0.5 视为收入差距较大,当基尼系数达到 0.5 以上时,则表示收入悬殊。

3.3、MSE

用于回归树,后面章节具体介绍

 4、鸢尾花分类代码实战

4.1、决策树分类鸢尾花数据集

import numpy as np
from sklearn.tree import DecisionTreeClassifier
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn import tree
import matplotlib.pyplot as pltX,y = datasets.load_iris(return_X_y=True)# 随机拆分
X_train,X_test,y_train,y_test = train_test_split(X,y,random_state = 256)# max_depth调整树深度:剪枝操作
# max_depth默认,深度最大,延伸到将数据完全划分开为止。
model = DecisionTreeClassifier(max_depth=None,criterion='entropy')
model.fit(X_train,y_train)
y_ = model.predict(X_test)
print('真实类别是:',y_test)
print('算法预测是:',y_)
print('准确率是:',model.score(X_test,y_test))
# 决策树提供了predict_proba这个方法,发现这个方法,返回值要么是0,要么是1
model.predict_proba(X_test)

 4.2、决策树可视化

import graphviz
from sklearn import tree
from sklearn import datasets
# 导出数据
iris = datasets.load_iris(return_X_y=False)
dot_data = tree.export_graphviz(model,feature_names=fn,class_names=iris['target_names'],# 类别名filled=True, # 填充颜色rounded=True,)
graph = graphviz.Source(dot_data)
graph.render('iris')

4.3、选择合适的超参数并可视化  

import numpy as np
from sklearn.tree import DecisionTreeClassifier
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn import tree
import matplotlib.pyplot as pltX,y = datasets.load_iris(return_X_y=True)# 随机拆分
X_train,X_test,y_train,y_test = train_test_split(X,y,random_state = 256)
depth = np.arange(1,16)
err = []
for d in depth:model = DecisionTreeClassifier(criterion='entropy',max_depth=d)model.fit(X_train,y_train)score = model.score(X_test,y_test)err.append(1 - score)print('错误率为%0.3f%%' % (100 * (1 - score)))
plt.rcParams['font.family'] = 'STKaiti'
plt.plot(depth,err,'ro-')
plt.xlabel('决策树深度',fontsize = 18)
plt.ylabel('错误率',fontsize = 18)
plt.title('筛选合适决策树深度')
plt.grid()
plt.savefig('./14-筛选超参数.png',dpi = 200)

相关文章:

14- 决策树算法 (有监督学习) (算法)

决策树是属于有监督机器学习的一种决策树算法实操: from sklearn.tree import DecisionTreeClassifier # 决策树算法 model DecisionTreeClassifier(criterionentropy,max_depthd) model.fit(X_train,y_train)1、决策树概述 决策树是属于有监督机器学习的一种&#xff0c;起源…...

如何编译和运行C++程序?

C 和C语言类似&#xff0c;也要经过编译和链接后才能运行。在《C语言编译器》专题中我们讲到了 VS、Dev C、VC 6.0、Code::Blocks、C-Free、GCC、Xcode 等常见 IDE 或编译器&#xff0c;它们除了可以运行C语言程序&#xff0c;还可以运行 C 程序&#xff0c;步骤是一样的&#…...

Golang 给视频添加背景音乐 | Golang工具

目录 前言 环境依赖 代码 总结 前言 本文提供给视频添加背景音乐&#xff0c;一如既往的实用主义。 主要也是学习一下golang使用ffmpeg工具的方式。 环境依赖 ffmpeg环境安装&#xff0c;可以参考我的另一篇文章&#xff1a;windows ffmpeg安装部署_阿良的博客-CSDN博客 …...

让AI护理医疗:解决卫生系统的痛点

一、引言 1.对医疗领域中AI技术的介绍 随着人工智能的不断发展&#xff0c;它已经成为了各个领域中的重要组成部分。在医疗领域中&#xff0c;AI技术也逐渐发挥着越来越重要的作用。从诊断到治疗&#xff0c;从健康管理到研究&#xff0c;人工智能已经深刻地影响着医疗领域的…...

Windows 离线安装 MySQL 8

目录 1. 下载离线安装包 2. 上传解压 3 配置 my.ini 文件 4 设置系统环境变量 5 安装 MySQL 6 登录 MySQL 客户环境是内网环境&#xff0c;不能访问外网&#xff0c;只能离线安装 MySQL 了。 1. 下载离线安装包 MySQL 离线压缩包官网下载地址&#xff1a;MySQL :: Down…...

【前端攻城狮之vue基础】02路由+嵌套路由+路由query/params传参+路由props配置+replace属性+编程式路由导航+缓存路由组件

路由的基础知识1.路由简介2.路由基本使用3.嵌套路由4.传递路由的query传参# 5.传递路由的params参数6.路由的props传参配置7.路由router-link标签的replace属性8.编程式路由导航9.缓存路由组件1.路由简介 路由是一条条对应的key-value关系&#xff0c;key就是前端地址栏的路径…...

CHAPTER 1 Zabbix介绍及安装

Zabbix介绍及安装1.1 Zabbix监控1 为什么要监控1.1 网站可用性2 监控什么东西2.1 监控范畴3 怎么来监控3.1 远程管理服务器3.2 监控硬件3.3 查看cpu相关3.4 内存3.5 磁盘3.6 监控网络4 监控工具总览5 zabbix介绍5.1 zabbix的组成5.2 zabbix监控范畴1.2 安装zabbix1 环境检查2 安…...

认识V模型、W模型、H模型

软件测试与软件工程息息相关&#xff0c;软件测试是软件工程组成中不可或缺的一部分。 在软件工程、项目管理、质量管理得到规范化应用的企业&#xff0c;软件测试也会进行得比较顺利&#xff0c;软件测试发挥的价值也会更大。 要关注软件工程、质量管理以及配置管理与软件测试…...

excel ttest检测

1、excel函数含义 TTEST(array1,array2,tails,type) ▪ Array1: 第一组数据集 ▪ Array2: 第二组数据集 ▪ Tails: 用于定义所返回的分布的尾数: 1 代表单尾&#xff1b;2 代表双尾 ▪ Type: 用于定义 t-检验的类型: 1 代表成对检验&#xff1b;2 代表双样本等方差假设&am…...

PDFPrinting.Net操作进行细粒度控制

PDFPrinting.Net操作进行细粒度控制 PDFPrinting.Net能够容易且灵活地预测完美的打印结果以及用户文件的示例性显示。可以快速浏览.NET PDF打印中最关键的元素。如果用户需要获得更详细的概述&#xff0c;那么他可以查看快速入门手册&#xff0c;甚至是现有文档的详细概述参考。…...

SegPGD

在这项工作中&#xff0c;我们提出了一种有效和高效的分割攻击方法&#xff0c;称为SegPGD。此外&#xff0c;我们还提供了收敛性分析&#xff0c;表明在相同次数的攻击迭代下&#xff0c;所提出的SegPGD可以创建比PGD更有效的对抗示例。此外&#xff0c;我们建议应用我们的Seg…...

ESP-IDF + Vscode ESP32 开发环境搭建以及开发入门

ESP-IDF Vscode ESP32 开发环境搭建以及开发入门 文章目录ESP-IDF Vscode ESP32 开发环境搭建以及开发入门1. 前言2. 下载开发工具3. 配置工具4. 创建工程5. 解决vscode找不到头文件&#xff0c;波浪线警告6. 添加自己的组件6.1 组件说明6.2 添加项目组件6.3 添加扩展组件7. …...

SpringMvc的请求和响应

SpringMvc的数据响应 1.springmvc的数据相应方式 &#xff08;1&#xff09;页面跳转 直接返回字符串 通过ModelAndView对象返回 &#xff08;2&#xff09;回写数据 直接返回字符串 返回对象或集合 页面跳转 jsp页面 <% page contentType"text/html;charsetUTF-8&q…...

【Vue3】首页主体-面板组件封装

首页主体-面板组件封装 新鲜好物、人气推荐俩个模块的布局结构上非常类似&#xff0c;我们可以抽离出一个通用的面板组件来进行复用 目标&#xff1a;封装一个通用的面板组件 思路分析 图中标出的四个部分都是可能会发生变化的&#xff0c;需要我们定义为可配置主标题和副标题…...

部署 K8s 集群

1 .部署k8s的两种方式目前生产部署Kubernetes集群主要有两种方式&#xff1a;kubeadmKubeadm是一个K8s部署工具&#xff0c;提供kubeadm init和kubeadm join&#xff0c;用于快速部署Kubernetes集群。二进制包从github下载发行版的二进制包&#xff0c;手动部署每个组件&#x…...

关于北京君正:带ANC的2K网络摄像头用户案例

如果远程办公是您的未来&#xff0c;或者您经常通过视频通话与远方的朋友和亲戚交谈&#xff0c;那么您可以考虑购买网络摄像头以显著改善您的沟通。Anker PowerConf C200是个不错的选择。 Anker PowerConf C200专为个人工作空间而设计&#xff0c;能够以每秒30帧的速度拍摄2K…...

ccc-Backpropagation-李宏毅(7)

文章目录NotationBackpropagationForward passBackward passSummaryNotation 神经网络求解最优化Loss function时参数非常多&#xff0c;反向传播使用链式求导的方式提升计算梯度向量时的效率&#xff0c;链式法则如下&#xff1a; Backpropagation 损失函数计算为所有样本…...

找出字符串中第一个匹配项的下标-力扣28-java

一、题目描述给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 开始&#xff09;。如果 needle 不是 haystack 的一部分&#xff0c;则返回 -1 。示例 1&#xff1a;输入&#xff1a;hayst…...

SpringBoot 监听Redis key过期回调

SpringBoot 监听Redis key过期回调 场景 Spring boot实现监听Redis key失效事件可应对某些场景例如&#xff1a;处理订单过期自动取消、用户会员到期… 开启Redis键过期回调通知 Redis默认是没有开启键过期监听功能的&#xff0c;需要手动在配置文件中修改。Linux操作系统 修…...

蓝桥杯C/C++VIP试题每日一练之回形取数

💛作者主页:静Yu 🧡简介:CSDN全栈优质创作者、华为云享专家、阿里云社区博客专家,前端知识交流社区创建者 💛社区地址:前端知识交流社区 🧡博主的个人博客:静Yu的个人博客 🧡博主的个人笔记本:前端面试题 个人笔记本只记录前端领域的面试题目,项目总结,面试技…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

GO协程(Goroutine)问题总结

在使用Go语言来编写代码时&#xff0c;遇到的一些问题总结一下 [参考文档]&#xff1a;https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现&#xff1a; 今天在看到这个教程的时候&#xff0c;在自己的电…...

Linux系统部署KES

1、安装准备 1.版本说明V008R006C009B0014 V008&#xff1a;是version产品的大版本。 R006&#xff1a;是release产品特性版本。 C009&#xff1a;是通用版 B0014&#xff1a;是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存&#xff1a;1GB 以上 硬盘&#xf…...

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...

stm32wle5 lpuart DMA数据不接收

配置波特率9600时&#xff0c;需要使用外部低速晶振...

算法打卡第18天

从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1a;inorder [9,3,15,20,7…...