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

机器学习-决策树

决策树

  • 决策树
    • 1. 简介
    • 2. ID3 决策树
    • 3. C4.5决策树
    • 4. CART决策树
    • 5. 决策树对比
    • 6. 正则化 剪枝

决策树

1. 简介

"""
简介一种树形结构树中每个内部节点表示一个特征的判断每个分支代表一个判断结果的输出每个叶节点代表一种分类结果建立过程1. 特征选择选取有较强分类能力的特征2. 决策树生成根据选择的特征生成决策树3. 决策树 易过拟合采用剪枝的方法缓解过拟合
"""

2. ID3 决策树

"""
ID3 决策树熵 Entropy信息论中代表随机变量不确定度的度量熵越大 数据的不确定性越高 信息越多熵越小 数据的不确定性越低信息熵公式其中 P(xi) 表示数据中类别出现的概率,H(x) 表示信息的信息熵值信息增益概念特征a对训练数据集D的信息增益 定义为集合D的熵H(D)与特征a给定条件下D的熵(H|a)之差公式条件熵构建流程1. 计算每个特征的信息增益2. 使用信息增益最大特征将数据集 拆分为子集3. 使用该特征作为决策树的一个节点4. 使用剩余特征对子集重复上述 1 2 3 过程不足偏向于选择种类多的特征作为分裂依据
"""

信息熵 公式
在这里插入图片描述
信息增益 公式
在这里插入图片描述

3. C4.5决策树

"""
信息增益率信息增益率 = 信息增益 /特征熵特征熵本质特征的信息增益 除以 特征的内在信息相当于对信息增益进行修正, 增加一个惩罚系数特征取值个数较多时 惩罚系数较小, 特征取值个数较少时, 惩罚系数较大惩罚系数: 数据集D以特征a作为随机变量的熵的倒数
"""

信息增益率 公式
在这里插入图片描述
特征熵 公式
在这里插入图片描述

4. CART决策树

"""
CART决策树一种决策树模型, 可以用于分类 可以用于回归回归树: 使用平方误差最小化策略预测输出的是一个连续值采用叶子节点里均值作为预测输出分类生成树: 采用基尼指数最小化策略预测输出的是一个离散值采用叶子节点多数类别作为预测类别基尼值从数据集D中随机抽取两个样本,其类别标记不一致的概率Gini(D)值越小,数据集D的纯度越高基尼指数选择使划分后基尼系数最小的属性作为最优化分属性特殊说明信息增益(ID3)、信息增益率值越大(C4.5),则说明优先选择该特征基尼指数值越小(CART),则说明优先选择该特征"""
# 1.导入依赖包
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import classification_report
import matplotlib.pyplot as plt
from sklearn.tree import plot_treedef titanicCase():# 2.读数据到内存并预处理# 2.1 读取数据taitan_df = pd.read_csv("./data/titanic/train.csv")print(taitan_df.head())  # 查看前5条数据print(taitan_df.info)  # 查看特性信息# 2.2 数据处理,确定x yx = taitan_df[['Pclass', 'Age', 'Sex']]y = taitan_df['Survived']# 2.3 缺失值处理x['Age'].fillna(x['Age'].mean(), inplace = True)print('x -->1', x.head(10))# 2.4 pclass类别型数据,需要转数值one-hot编码x = pd.get_dummies(x)print('x -->2', x.head(10))# 2.5 数据集划分x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.20, random_state=33)# 3.训练模型,实例化决策树模型estimator = DecisionTreeClassifier()estimator.fit(x_train, y_train)# 4.模型预测y_pred = estimator.predict(x_test)# 5.模型评估# 5.1 输出预测准确率myret = estimator.score(x_test, y_test)print('myret-->\n', myret)# 5.2 更加详细的分类性能myreport = classification_report(y_pred, y_test, target_names=['died', 'survived'])print('myreport-->\n', myreport)# 5.3 决策树可视化plot_tree(estimator,max_depth=10,filled=True,feature_names=['Pclass', 'Age', 'Sex_female', 'Sex_male'],class_names=['died', 'survived'])plt.show()

基尼值 公式
在这里插入图片描述
基尼指数公式
在这里插入图片描述

5. 决策树对比

"""
对比ID3信息增益1. ID3 只能对离散属性的数据集构成决策树2. 倾向于选择取值较多的属性C4.5信息增益率1. 缓解了ID3 分支过程中总喜欢偏向于选择值较多的属性2. 可处理连续数值型属性, 增加了对缺失值的处理方法3. 只适合于能够驻留于内存的数据集, 大数据集无能为力CART基尼指数1. 可以进行分类和回归 可处理离散属性, 也可以处理连续属性2. 采用基尼指数 计算 量减小3. 一定是二叉树构建过程1.  选择一个特征,将该特征的值进行排序, 取相邻点计算均值作为待划分点2. 根据所有划分点, 将数据集分成两部分, R1 R23. R1 和 R2 两部分的平方损失相加作为该切分点平方损失4. 取最小的平方损失的划分点, 作为当前特征的划分点5. 以此计算其他特征的最优划分点 以及该划分点对应的损失值6. 在所有的特征的划分点中, 选择出最小平方损失的划分点 作为当前树的分裂点"""
# 1.导入依赖包
import numpy as np
import pandas as pd
from sklearn.tree import DecisionTreeRegressor  # 回归决策树
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as pltdef contrastRegressor():"""线性回归与回归决策树对比:return:"""# 2.准备数据x = np.array(list(range(1, 11))).reshape(-1, 1)y = np.array([5.56, 5.70, 5.91, 6.40, 6.80, 7.05, 8.90, 8.70, 9.00, 9.05])print('x -->', x)print('y -->', y)# 3.模型训练,实例化模型model1 = DecisionTreeRegressor(max_depth=1)model2 = DecisionTreeRegressor(max_depth=3)model3 = LinearRegression()model1.fit(x, y)model2.fit(x, y)model3.fit(x, y)# 4.模型预测 # 等差数组-按照间隔x_test = np.arange(0.0, 10.0, 0.01).reshape(-1, 1)y_pre1 = model1.predict(x_test)y_pre2 = model2.predict(x_test)y_pre3 = model3.predict(x_test)print(y_pre1.shape, y_pre2.shape, y_pre3.shape)# 5.结果可视化plt.figure(figsize=(10, 6), dpi=100)plt.scatter(x, y, label='data')plt.plot(x_test, y_pre1, label='max_depth=1')  # 深度1层plt.plot(x_test, y_pre2, label='max_depth=3')  # 深度3层plt.plot(x_test, y_pre3, label='linear')plt.xlabel('data')plt.ylabel('target')plt.title('DecisionTreeRegressor')plt.legend()plt.show()

6. 正则化 剪枝

"""
正则化-剪枝预剪枝指在决策树生成过程中, 对每个节点在划分前先进行估计, 若当前节点的划分不能带来决策树泛化性能提升, 则停止划分并将当前节点标记为叶节点优点预剪枝使决策树很多分支没有展开, 降低了过拟合风险, 显著的减少了决策树的训练和测试时间的开销缺点有些分支的当前划分虽不能提升泛化性能, 单后续划分却有可能导致性能的显著提高, 预剪枝决策时有欠拟合的风险后剪枝是先从训练集生成一颗完整的决策树, 然后自底向上地对非叶节点进行考察, 若将该节点对应的子树替换为叶节点能带来决策树泛化性能提升, 则将该子树替换为叶节点优点比预剪枝保留了更多的分支, 一般情况下, 后剪枝决策树的欠拟合风险很小, 泛化性能往往优于预剪枝缺点训练时间开销比未剪枝的决策树和预剪枝的决策树都长的多"""

相关文章:

机器学习-决策树

决策树 决策树1. 简介2. ID3 决策树3. C4.5决策树4. CART决策树5. 决策树对比6. 正则化 剪枝 决策树 1. 简介 """ 简介一种树形结构树中每个内部节点表示一个特征的判断每个分支代表一个判断结果的输出每个叶节点代表一种分类结果建立过程1. 特征选择选取有较…...

opencascade TopoDS_Shape源码学习【重中之重】

opencascade TopoDS_Shape 前言 描述了一个形状,它 引用了一个基础形状,该基础形状有可能被赋予一个位置和方向 为基础形状提供了一个位置,定义了它在本地坐标系中的位置为基础形状提供了一个方向,这是从几何学的角度&#xff…...

Self-study Python Fish-C Note15 P52to53

函数 (part 5) 本节主要讲函数文档、类型注释、内省、高阶函数 函数文档、类型注释、内省 (P52) 函数文档 函数是一种代码封装的方法,对于一个程序来说,函数就是一个结构组件。在函数的外部是不需要关心函数内部的执行细节的,更需要关注的…...

Java小白入门到实战应用教程-异常处理

Java小白入门到实战应用教程-异常处理 前言 我们这一章节进入到异常处理知识点的学习。异常是指程序在运行时遇到的一种特殊情况,它能打断了正常的程序执行流程。 而异常处理是一项至关重要的技术,它使得程序能够优雅地处理运行时错误,避免…...

使用Anaconda安装多个版本的Python并与Pycharm进行对接

1、参考链接 Anaconda安装使用教程解决多Python版本问题_anaconda安装多个python版本-CSDN博客 基于上面的一篇博客的提示,我做了尝试。并在Pycharm的对接上做了拓展。 2、首先安装Anaconda 这个比较简单,直接安装即可: 3、设置conda.exe的…...

android系统中data下的xml乱码无法查看问题剖析及解决方法

背景: Android12高版本以后系统生成的很多data路径下的xml都变成了二进制类型,根本没办法看xml的内容具体如下: 比如想要看当前系统的widget的相关数据 ./system/users/0/appwidgets.xml 以前老版本都是可以直接看的,这些syste…...

​MySQL——索引(三)创建索引(2)使用 CREATE INDEX 语句在已经存在的表上创建索引

若想在一个已经存在的表上创建索引,可以使用 CREATE INDEX.语句,CREATEINDEX语句创建索引的具体语法格式如下所示: CREATE [UNIQUEIFULLTEXTISPATIAL]INDEX 索引名 ON 表名(字段名[(长度)J[ASCIDESC]); 在上述语法格式中,UNIQUE、FULLTEXT 和…...

html+css 实现hover选择按钮

前言:哈喽,大家好,今天给大家分享htmlcss 绚丽效果!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目…...

Python数据可视化利器:Matplotlib详解

目录 Matplotlib简介安装MatplotlibMatplotlib基本用法 简单绘图子图和布局图形定制 常见图表类型 折线图柱状图散点图直方图饼图 高级图表和功能 3D绘图热图极坐标图 交互和动画与其他库的集成 与Pandas集成与Seaborn集成 常见问题与解决方案总结 Matplotlib简介 Matplotli…...

2024 NVIDIA开发者社区夏令营环境配置指南(Win Mac)

2024 NVIDIA开发者社区夏令营环境配置指南(Win & Mac) 1 创建Python环境 首先需要安装Miniconda: 大家可以根据自己的网络情况从下面的地址下载: miniconda官网地址:https://docs.conda.io/en/latest/miniconda.html 清华大学镜像地…...

介绍rabbitMQ

RabbitMQ是一个开源的消息代理软件,实现了高级消息队列协议(AMQP),主要用于在不同的应用程序之间进行异步通信。以下是关于RabbitMQ的详细介绍: 一、基本概念 消息中间件:RabbitMQ是一个消息中间件&#x…...

AI在医学领域:使用眼底图像和基线屈光数据来定量预测近视

关键词:深度学习、近视预测、早期干预、屈光数据 儿童近视已经成为一个全球性的重大健康议题。其发病率持续攀升,且有可能演变成严重且不可逆转的状况,这不仅对家庭幸福构成威胁,还带来巨大的经济负担。当前的研究着重指出&#x…...

VB.NET中如何利用WPF(Windows Presentation Foundation)进行图形界面开发

在VB.NET中,利用Windows Presentation Foundation (WPF) 进行图形界面开发是一个强大的选择,因为它提供了丰富的UI元素、动画、数据绑定以及样式和模板等高级功能。以下是在VB.NET项目中使用WPF进行图形界面开发的基本步骤: 1. 创建一个新的…...

Go语言标准库中的双向链表的基本用法

什么是二分查找区间? 什么是链表? 链表节点的代码实现: 链表的遍历: 链表如何插入元素? go语言标准库的链表: 练习代码: package mainimport ("container/list""fm…...

手机游戏录屏软件哪个好,3款软件搞定游戏录屏

在智能手机普及的今天,越来越多的人喜欢在手机上玩游戏,并希望能够录制游戏过程或者分享游戏技巧。然而,面对市面上众多的手机游戏录屏软件,很多人可能会陷入选择困难。究竟手机游戏录屏软件哪个好?在这篇文章中&#…...

【力扣】4.寻找两个正序数组的中位数

题目描述 给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (mn)) 。 示例 1: 输入:nums1 [1,3], nums2 [2] 输出:2.0…...

【C++】初识面向对象:类与对象详解

C语法相关知识点可以通过点击以下链接进行学习一起加油!命名空间缺省参数与函数重载C相关特性 本章将介绍C中一个重要的概念——类。通过类,我们可以类中定义成员变量和成员函数,实现模块化封装,从而构建更加抽象和复杂的工程。 &…...

知识图谱学习总结

1 知识图谱的介绍 知识图谱,是结构化的语义知识库,用于迅速描述物理世界中的概念及其相互关系,通过知识图谱能够将Web上的信息、数据以及链接关系聚集为知识,使信息资源更易于计算、理解以及评价,并能实现知识的快速响…...

2021-10-23 51单片机LED1-8按秒递增闪烁

缘由51单片机,八个LED灯按LED1亮1s灭1s,LED1亮2s 灭2s以此类推的方式亮灭-编程语言-CSDN问答 #include "REG52.h" sbit K1 P1^0; sbit K2 P1^1; sbit K3 P1^2; sbit K4 P1^3; sbit P1_0P2^0; sbit P1_1P2^1; sbit P1_2P2^2; sbit P1_3P2^3; sbit P1_…...

在Linux中宏观的看待线程

线程一旦被创建,几乎所有的资源都是被所有的线程共享的。线程也一定要有自己私有的资源,什么样的资源应该是线程私有的? 1.PCB属性私有 2.要有一定的私有上下文结构 3.每个线程都要有独立的栈结构 ps -aL ##1. Linux线程概念 ###什么是线程…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

搭建DNS域名解析服务器(正向解析资源文件)

正向解析资源文件 1&#xff09;准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2&#xff09;服务端安装软件&#xff1a;bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

Go语言多线程问题

打印零与奇偶数&#xff08;leetcode 1116&#xff09; 方法1&#xff1a;使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...

LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)

在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...

python可视化:俄乌战争时间线关键节点与深层原因

俄乌战争时间线可视化分析&#xff1a;关键节点与深层原因 俄乌战争是21世纪欧洲最具影响力的地缘政治冲突之一&#xff0c;自2022年2月爆发以来已持续超过3年。 本文将通过Python可视化工具&#xff0c;系统分析这场战争的时间线、关键节点及其背后的深层原因&#xff0c;全面…...

java+webstock

maven依赖 <dependency><groupId>org.java-websocket</groupId><artifactId>Java-WebSocket</artifactId><version>1.3.5</version></dependency><dependency><groupId>org.apache.tomcat.websocket</groupId&…...

学习 Hooks【Plan - June - Week 2】

一、React API React 提供了丰富的核心 API&#xff0c;用于创建组件、管理状态、处理副作用、优化性能等。本文档总结 React 常用的 API 方法和组件。 1. React 核心 API React.createElement(type, props, …children) 用于创建 React 元素&#xff0c;JSX 会被编译成该函数…...