陕西网站建设的内容/武汉网站维护公司

陕西网站建设的内容,武汉网站维护公司,网站排版工具,平面广告设计培训学校决策树 定义 从根节点开始,也就是拥有全部的数据,找一个维度对根节点开始划分, 划分后希望数据整体的信息熵是最小的, 针对划分出来的两个节点,我们继续重复刚才的划分方式寻找信息熵最小的维度和阈值。 递归这个…

决策树

定义

从根节点开始,也就是拥有全部的数据,找一个维度对根节点开始划分,

划分后希望数据整体的信息熵是最小的,

针对划分出来的两个节点,我们继续重复刚才的划分方式寻找信息熵最小的维度和阈值。

递归这个过程就形成了决策树。

特点

非参数学习算法

可以解决分类问题

天然可以解决多分类问题

非常好的可解释性

代码实现

sklearn封装的方式

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.tree import DecisionTreeClassifier
# 学习使用数据集,去后两个维度,便于可视化
iris = datasets.load_iris()
X = iris.data[:, 2:]
y = iris.targetdt_clf = DecisionTreeClassifier(max_depth=2, criterion="entropy", random_state=42)
dt_clf.fit(X, y)# 画图函数
def plot_decision_boundary(model, axis):x0, x1 = np.meshgrid(np.linspace(axis[0], axis[1], int((axis[1] - axis[0]) * 100)).reshape(-1, 1),np.linspace(axis[2], axis[3], int((axis[3] - axis[2]) * 100)).reshape(-1, 1),)X_new = np.c_[x0.ravel(), x1.ravel()]y_predict = model.predict(X_new)zz = y_predict.reshape(x0.shape)from matplotlib.colors import ListedColormapcustom_cmap = ListedColormap(["#EF9A9A", "#FFF59D", "#90CAF9"])plt.contourf(x0, x1, zz, cmap=custom_cmap)plot_decision_boundary(dt_clf, axis=[0.5, 7.5, 0, 3])
# X[y==0,0]表示样本target为0的,第一个维度,其余类推
plt.scatter(X[y == 0, 0], X[y == 0, 1])
plt.scatter(X[y == 1, 0], X[y == 1, 1])
plt.scatter(X[y == 2, 0], X[y == 2, 1])
plt.show()

在这里插入图片描述

信息熵(重要知识)

熵在信息论中代表:随机变量不确定度的度量。

熵越大,数据的不确定性越高;熵越小,数据的不确定性越低,公式如下:
H = − ∑ i − 1 k p i log ⁡ ( p i ) p i 类别  i 的概率 H = -\sum^{k}_{i-1} p_{i}\log(p_{i}) \\ p_{i} 类别\ i \ 的概率 H=i1kpilog(pi)pi类别 i 的概率
如以下两组数据的随机分布如下:
{ 1 3 , 1 3 , 1 3 } H = − 1 3 log ⁡ 1 3 − 1 3 log ⁡ 1 3 − 1 3 log ⁡ 1 3 = 1.0986 { 1 10 , 2 10 , 7 10 } H = − 1 10 log ⁡ 1 10 − 2 10 log ⁡ 2 10 − 7 10 log ⁡ 7 10 = 0.8018 \{\frac{1}{3},\frac{1}{3},\frac{1}{3}\} \\ H = -\frac{1}{3}\log{\frac{1}{3}}-\frac{1}{3}\log{\frac{1}{3}}-\frac{1}{3}\log{\frac{1}{3}} = 1.0986 \\ \\ \{\frac{1}{10},\frac{2}{10},\frac{7}{10}\} \\ H = -\frac{1}{10}\log{\frac{1}{10}}-\frac{2}{10}\log{\frac{2}{10}}-\frac{7}{10}\log{\frac{7}{10}} = 0.8018 \\ {31,31,31}H=31log3131log3131log31=1.0986{101,102,107}H=101log101102log102107log107=0.8018

二分类问题信息熵的公式可化简为:
H = − x log ⁡ ∗ ( x ) − ( 1 − x ) log ⁡ ( 1 − x ) H = -x\log*(x) - (1-x)\log(1-x) H=xlog(x)(1x)log(1x)

import numpy as np
import matplotlib.pyplot as plt
def entropy(p):return -p * np.log(p) - (1-p) * np.log(1-p)
x = np.linspace(0.01, 0.99, 200)
plt.plot(x, entropy(x))
plt.show()

在这里插入图片描述

最小化信息熵划分数据维度和阈值,模拟sklearn中的封装方法

import numpy as np
from collections import Counter
from math import log
from sklearn import datasetsiris = datasets.load_iris()
X = iris.data[:, 2:]
y = iris.targetdef split(X, y, d, value):"""函数功能:根据给定的特征维度d和阈值value,将数据集进行划分X、y分别是数据样本和标签d是数据的某一个维度value是d维度上的一个阈值"""# 寻找所有数据集中维度为d且小于等于value的bool向量index_a = X[:, d] <= valueindex_b = X[:, d] > valuereturn X[index_a], X[index_b], y[index_a], y[index_b]def entropy(y):"""计算信息熵y:类别标签, 类似[0,0,1,1,2,2,2,2]"""counter = Counter(y)res = 0.0for num in counter.values():p_i = num / len(y)  # 计算每个类别的概率res += -p_i * log(p_i)return resdef try_split(X, y):"""寻找传入数据的最优划分方案(信息熵最小)最优的维度和划分阈值"""# 最优信息熵best_entropy = float("inf")best_d, best_v = -1, -1# 搜索过程:从d=0以及d这个维度升序后的相邻样本的均值开始for d in range(X.shape[1]):# 返回排序(升序)后索引sorted_index = np.argsort(X[:, d])for i in range(1, len(X)):if X[sorted_index[i], d] != X[sorted_index[i - 1], d]:# 候选阈值value的确认方式,且相邻的两个值不相等(剪枝)v = (X[sorted_index[i], d] + X[sorted_index[i - 1], d]) / 2X_l, X_r, y_l, y_r = split(X, y, d, v)p_l, p_r = len(X_l) / len(X), len(X_r) / len(X)  # 可以删除占比e = p_l * entropy(y_l) + p_r * entropy(y_r)if e < best_entropy:  # 更新最小熵、最优维度d以及该维度上的最优阈值vbest_entropy, best_d, best_v = e, d, vreturn best_entropy, best_d, best_vbest_entropy, best_d, best_v = try_split(X, y)
print("best_entropy =", best_entropy)
print("best_d =", best_d)
print("best_v =", best_v)
# best_entropy = 0.46209812037329684
# best_d = 0
# best_v = 2.45
# 解释:第一次划分在第0个维度上,阈值为2.45,信息熵最优# 根据第一次的最优划分条件,对数据集进行划分
X1_l, X1_r, y1_l, y1_r = split(X, y, best_d, best_v)
entropy(y1_l)  # 0.0 y1_l信息熵为0,对应X1_l节点无需再划分
entropy(y1_r)  # y1_r信息熵0.6931471805599453,继续划分X1_r节点best_entropy2, best_d2, best_v2 = try_split(X1_r, y1_r)
print("best_entropy =", best_entropy2)
print("best_d =", best_d2)
print("best_v =", best_v2)
# best_entropy = 0.2147644654371359
# best_d = 1
# best_v = 1.75X2_l, X2_r, y2_l, y2_r = split(X1_r, y1_r, best_d2, best_v2)
entropy(y2_l) # 0.30849545083110386
entropy(y2_r)  # 0.10473243910508653
# 信息熵不为0还可以继续划分,此时深度为2

基尼系数

基尼系数公式如下:
G = 1 − ∑ i = 1 k p i 2 G = 1-\sum^{k}_{i=1}p_{i}^2 G=1i=1kpi2
基尼系数和信息熵拥有同样的性质。

基尼系数代码实现

from collections import Counterdef gini(y):counter = Counter(y)res = 1.0for num in counter.values():p = num / len(y)res -= p**2return res

CART

决策树又称:Classification And Regression Tree

复杂度分析:

预测: O ( l o g m ) O(logm) O(logm)

预测: O ( n ∗ m ∗ l o g m ) O(n*m*logm) O(nmlogm)

n 、 m n、m nm 分别是样本数量和数据维度。

决策树的局限性

1、决策数是在某一个维度上进行划分,所以产生的决策边界都是和数据维度平行的,并不会产生倾斜的边界,有时真实数据可能并非如此。

在这里插入图片描述

2、决策树会对个别的样本点是非常敏感的,某一个特殊的样本点可能都会改变决策树的决策边界。

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

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

相关文章

动态查找表

1.问题分析&#xff1a; 动态查找表是一种可以动态地插入、删除和查找元素的数据结构。它是基于二叉搜索树实现的&#xff0c;具有快速的查找和插入操作。 以下是一些关于动态查找表的问题分析&#xff1a; 1. 插入操作&#xff1a;在动态查找表中插入一个元素时&#xff0c…

得分匹配的朗之万动力学——Score-Matching Langevin Dynamics (SMLD)

得分匹配的朗之万动力学——Score-Matching Langevin Dynamics (SMLD) 文章目录 得分匹配的朗之万动力学——Score-Matching Langevin Dynamics (SMLD)摘要Abstract周报内容0. 上期补充1. 本期的基本思想2. 从一个分布中采样&#xff08;Sampling from a Distribution&#xff…

字节DAPO算法:改进DeepSeek的GRPO算法-解锁大规模LLM强化学习的新篇章(代码实现)

DAPO算法&#xff1a;解锁大规模LLM强化学习的新篇章 近年来&#xff0c;大规模语言模型&#xff08;LLM&#xff09;在推理任务上的表现令人瞩目&#xff0c;尤其是在数学竞赛&#xff08;如AIME&#xff09;和编程任务中&#xff0c;强化学习&#xff08;RL&#xff09;成为…

【Qt】QWidget的styleSheet属性

&#x1f3e0;个人主页&#xff1a;Yui_ &#x1f351;操作环境&#xff1a;Qt Creator &#x1f680;所属专栏&#xff1a;Qt 文章目录 前言1. styleSheet属性2. 利用styleSheet属性实现简单的日夜模式切换2.1 知识补充-计算机中的颜色表示 3. 总结 前言 style?好像前端的st…

QT Quick(C++)跨平台应用程序项目实战教程 2 — 环境搭建和项目创建

目录 引言 1. 安装Qt开发环境 1.1 下载Qt安装包 1.2 安装Qt 1.3 安装MSVC编译器 2. 创建Qt Quick项目 2.1 创建新项目 2.2 项目结构 2.3 运行项目 3. 理解项目代码 3.1 main.cpp文件 3.2 Main.qml文件 引言 在上一篇文章中&#xff0c;我们介绍了本教程的目标和结…

macOS Sequoia 15.3 一直弹出“xx正在访问你的屏幕”

&#x1f645; 问题描述 macOS 系统升级后&#xff08;15.2或者15.3均出现过此问题&#xff09;&#xff0c;不管是截图还是开腾讯会议&#xff0c;只要跟捕捉屏幕有关&#xff0c;都一直弹出这个选项&#xff0c;而且所有软件我都允许访问屏幕了&#xff0c;这个不是询问是否…

二叉树的学习

目录 树型结构&#xff08;了解&#xff09; 概念 概念&#xff08;重要&#xff09; 树的表示形式&#xff08;了解&#xff09; 树的应用 二叉树&#xff08;重点&#xff09; 概念 两种特殊的二叉树 二叉树的性质 利用性质做题&#xff08;关键&#xff09; 二叉…

手动离线安装NextCloud插件

1、下载离线插件安装包 进入NextCloud官方插件商城&#xff1a;https://apps.nextcloud.com/ 选择自己需要的插件软件 选择NextCloud对应版本的插件安装包 2、解压安装 进入的到NextCloud安装目录的apps目录 cd /var/www/html/apps 将下载的xxx.tar.gz复制到apps目录中解…

分治-快速排序系列一>快速排序

目录 题目方法&#xff1a;优化方法&#xff1a;代码&#xff1a; 题目方法&#xff1a; 忘记快速排序看这里&#xff1a;链接: link 优化方法&#xff1a; 代码&#xff1a; public int[] sortArray(int[] nums) {qsort(nums,0,nums.length-1);return nums;}private void qso…

《AI大模型趣味实战 》第7集:多端适配 个人新闻头条 基于大模型和RSS聚合打造个人新闻电台(Flask WEB版) 1

AI大模型趣味实战 第7集&#xff1a;多端适配 个人新闻头条 基于大模型和RSS聚合打造个人新闻电台(Flask WEB版) 1 摘要 在信息爆炸的时代&#xff0c;如何高效获取和筛选感兴趣的新闻内容成为一个现实问题。本文将带领读者通过Python和Flask框架&#xff0c;结合大模型的强大…

STM32__红外避障模块的使用

目录 一、红外避障模块 概述 二、直接读取OUT引脚电平 三、使用中断方式触发 一、红外避障模块 概述 引脚解释&#xff1a; VCC接3.3V 或 5.0VGND接开发板的GNDOUT数字量输出(0或1&#xff09;; 低电平时表示前方有障碍 ; 通过可调电阻调整检测距离 产品特点&#xff1a; …

【AI大模型】DeepSeek + 通义万相高效制作AI视频实战详解

目录 一、前言 二、AI视频概述 2.1 什么是AI视频 2.2 AI视频核心特点 2.3 AI视频应用场景 三、通义万相介绍 3.1 通义万相概述 3.1.1 什么是通义万相 3.2 通义万相核心特点 3.3 通义万相技术特点 3.4 通义万相应用场景 四、DeepSeek 通义万相制作AI视频流程 4.1 D…

帆软第二题 - 多源报表

第二题&#xff0c;多源报表 实现功能&#xff1a; 多源报表&#xff1a;供应商与所在地区来源于表PRODUCER 明细来源于表PRODUCT 分组报表&#xff1a;按组显示数据&#xff0c;每个供应商对应其产品明细 按组分页&#xff1a;每个供应商一页 表头重复&#xff1a; 数据…

SVN忽略不必提交的文件夹和文件方法

最近有小伙伴在问&#xff1a;SVN在提交时如何忽略不必提交的文件夹和文件&#xff0c;如node_modules&#xff0c;.git&#xff0c;.idea等&#xff1f; 操作其实很简单&#xff0c;下面直接上图&#xff1a; 第一步&#xff1a; 第二步&#xff1a; 最后一步&#xff1a; 第…

Uthana,AI 3D角色动画生成平台

Uthana是什么 Uthana 是专注于3D角色动画生成的AI平台。平台基于简单的文字描述、参考视频或动作库搜索&#xff0c;快速为用户生成逼真的动画&#xff0c;支持适配任何骨骼结构的模型。Uthana 提供风格迁移、API集成和定制模型训练等功能&#xff0c;满足不同用户需求。平台提…

六十天前端强化训练之第二十九天之深入解析:从零构建企业级Vue项目的完整指南

欢迎来到编程星辰海的博客讲解 看完可以给一个免费的三连吗&#xff0c;谢谢大佬&#xff01; 目录 一、Vite核心原理与开发优势 二、项目创建深度解析 三、配置体系深度剖析 四、企业级项目架构设计 五、性能优化实战 六、开发提效技巧 七、质量保障体系 八、扩展阅读…

Ceph集群2025(Squid版)导出高可用NFS集群(上集)

#创建一个CephFS 文件系统 ceph fs volume create cephfs02#创建子卷 ceph fs subvolumegroup create cephfs02 myfsg2#查看子卷 ceph fs subvolumegroup ls cephfs02[{"name": "myfsg2"} ]创建 NFS Ganesha 集群 #例子 $ ceph nfs cluster create <c…

第2.3节 Android生成全量和增量报告

覆盖率报告&#xff08;Coverage Report&#xff09;是一种软件测试工具生成的报告&#xff0c;用于评估测试用例对代码的覆盖程度。它通过统计代码中哪些部分已经被测试用例执行过&#xff0c;哪些部分还没有被执行&#xff0c;来衡量测试的充分性。覆盖率报告通常包括以下几种…

网络HTTPS协议

Https HTTPS&#xff08;Hypertext Transfer Protocol Secure&#xff09;是 HTTP 协议的加密版本&#xff0c;它使用 SSL/TLS 协议来加密客户端和服务器之间的通信。具体来说&#xff1a; • 加密通信&#xff1a;在用户请求访问一个 HTTPS 网站时&#xff0c;客户端&#x…

【MySQL笔记】库操作与表操作

&#x1f525;个人主页&#x1f525;&#xff1a;孤寂大仙V &#x1f308;收录专栏&#x1f308;&#xff1a;MySQL &#x1f339;往期回顾&#x1f339;&#xff1a;【MySQL】认识MySQL &#x1f516;流水不争&#xff0c;争的是滔滔不 一、库操作1.1 显示数据库1.2 创建数据库…