机器学习——决策树/随机森林

news2025/1/12 16:13:01

0、前言:

  • 决策树可以做分类也可以做回归,决策树容易过拟合
  • 决策树算法的基本原理是依据信息学熵的概念设计的(Logistic回归和贝叶斯是基于概率论),熵最早起源于物理学,在信息学当中表示不确定性的度量,熵值越大表示不确定性越大。
  • ID3算法就是一种通过熵的变化,构造决策树的算法,其基本公式如下:
    在这里插入图片描述
  • ID3算法举例:
    在这里插入图片描述
    1、计算信息熵:在target中,总共有10个结果,其中yes有7个,no有3个,通过信息熵计算公式,得到如下结果:
    在这里插入图片描述
    2、计算样本熵:
    对于特征1:s有3个对应比例为0.3(这3个s对应的target中yes有1个,no有2个),m有4个对应比例为0.4(这4个m对应的target中yes有3个,no有1个),l有3个对应比例为0.3(这3个l对应的target中yes有3个,no有0个),则特征1通过样本熵的计算公式如下:
    在这里插入图片描述
    其余两个特征计算样本熵的方法和特征一一致。
    3、计算信息增益:通过公式(info(D) - info_D_L)计算出所有样本的信息增益,然后比较他们的信息增益,选最大的作为第一个决策树节点,然后根据节点划分子节点,如果子节点信息确定则设置为叶子节点,如果子节点存在不同选择,就要重新通过上面的步骤选择新的子节点。上面计算结果中特征2的信息增益最大,因此得到如下决策树,然后继续对target和特征1和特征3重复上面步骤,选择第二个节点。
    在这里插入图片描述
  • ID4.5:改进了ID3算法中不重复特征(例如序号列)熵增益过大的缺点,方法就是给每个ID3算法得到的结果除以对应特征的“信息熵”,因此就需要给每个特征通过“信息熵”公式再计算一次它对应的信息熵。(info(D) - info_D_L)/E(A)
  • CART算法(gini):改进了ID3算法中需要大量对数运算导致运算速度较慢的缺点,用基尼代替了熵的概念,核心公式如下,相当于用下面的核心公式替代了求信息熵的公式,其余计算过程和ID3算法一致。也是先求target,然后再求其余特征。
    在这里插入图片描述
    对数计算和平方计算对比情况如下:
    在这里插入图片描述
    计算过程:
    首先求target:
    在这里插入图片描述
    再求特征1(特征2、特征3类似)
    在这里插入图片描述
    最后求信息增益(特征2、特征3类似):gini_D - gini_D_L

1、决策树算法参数说明:

在这里插入图片描述

2、决策树算法的应用:

  • 1、鸢尾花分类任务(不同参数值分类结果)
    在这里插入图片描述
  • 2、sin函数回归任务:
# 导包
import numpy as np
import pandas as pd 
import matplotlib.pyplot as plt
from sklearn.tree import DecisionTreeRegressor

# 产生数据
x = np.linspace(1,5,100)
y = np.sin(x)
# 绘图
plt.figure(figsize=(10,5))
plt.scatter(x,y,c='r')
# 添加噪点
y[::5]+=np.random.randn(20)*0.1 # 一维数组的加法
# 绘图
plt.figure(figsize=(10,5))
plt.scatter(x,y,c='r')
# 转化输入数据维度
x = x.reshape(-1,1)
x.shape
# 预测
Dt = DecisionTreeRegressor(max_depth=7)
Dt.fit(x,y)
Dt.score(x,y)
# 生成测试数据预测
x_p = np.linspace(3.5,5,100)
x_p = x_p.reshape(-1,1)
x_p.shape
# 预测绘图
pre_y = Dt.predict(x)
plt.scatter(x,y,c='r')
plt.scatter(x_p,pre_y,c='b')

在这里插入图片描述


3、随机森林算法:

  • 原理:随机森林是决策树的升级版本,随机说的是每个树都是随机生成的,每个数都不相同。在构建随机森林时,会从训练数据中有放回的随机选取一部分样本,同样也会随机选取数据样本的部分特征进行训练。每棵树使用的样本和特征都不相同,训练结果也各不相同。
  • 使用随机森林的原因:训练最初我们并不知道哪些是异常样本,也不知道哪些特征对结果影响较大,随机的过程就能降低这两个问题的影响,随机森林的输出结果由投票决定,大部分决策树的结果就决定了最终结果。
  • 优点:可以同时训练,不容易过拟合,能处理特征较多的高维数据,不知道使用什么方法时,先试试随机森林。因为随机森林属于多模型组合学习,这些模型之间都是独立学习预测的。
  • 导入随机森林分类库:from sklearn.ensemble import RandomForestClassifier
  • 重要参数:
    n_estimators:决策树的数量,默认是100个

4、总结:

  • 不论是决策树还是随机森林都有一个属性:feature_importances_,通过这个属性就可以在模型训练结束之后看到每个特征的重要性。其他属性可以通过训练好的模型后面加“.”代码的自动补全就会显示。
  • 决策树当中的一些重要参数:
    在这里插入图片描述
    在这里插入图片描述

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

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

相关文章

带你了解前后端分离的秘密-Vue【vue入门】

🏅我是默,一个在CSDN分享笔记的博主。📚📚 🌟在这里,我要推荐给大家我的专栏《Vue》。🎯🎯 🚀无论你是编程小白,还是有一定基础的程序员,这个专栏…

js中事件委托和事件绑定之间的区别

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 事件绑定(Event Binding)⭐事件委托(Event Delegation)⭐ 选择事件绑定或事件委托⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本…

NVM安装及如何使用NVM

NVM是什么? nvm 全名 Node Version Manager,Node的版本管理工具 NVM能做什么? 安装 nvm 后,可以使用nvm的相关命令来管理和切换不同的 node 版本,方便开发 如何安装NVM 链接: NVM GitHub地址 如何使用 NVM 命令 …

R语言绘制PCA双标图

代码&#xff1a; setwd("D:/Desktop/0000/R") #更改路径#导入数据 df <- read.table("Input data.csv", header T, sep ",")# ----------------------------------- #所需的包: packages <- c("ggplot2", "tidyr"…

1.简单工厂模式

UML类图 代码 main.cpp #include <iostream> #include "OperationFactory.h" using namespace std;int main(void) {float num1;float num2;char operate;cin >> num1 >> num2 >> operate;Operation* oper OperationFactory::createOpera…

算法综合篇专题四:前缀和

"回忆里的我&#xff0c;比国王富有。奢侈的快乐~" 1、前缀和【模板】 (1) 题目解析 (2) 算法原理 #include <iostream> using namespace std;const int N 100010; // 可能出现溢出 long long arr[N],dp[N]; int n,q;int main() {cin >> n …

长胜证券:突破五日线什么意思?

随着股市的快速开展&#xff0c;越来越多的人开端了解和参与股票投资&#xff0c;但或许会遇到一些术语和概念&#xff0c;例如“打破五日线”&#xff0c;这是新手们需求了解的。本文将介绍“打破五日线”的概念及其意义&#xff0c;同时从不同视点剖析其意义和影响因素。 什…

记录wisemodel上传失败

参考&#xff1a;https://wisemodel.cn/docs/%E6%A8%A1%E5%9E%8B%E4%B8%8A%E4%BC%A0 第一种方法&#xff1a; git lfs install git clone https://oauth2:your_git_tokenwww.wisemodel.cn/username/my_test_model.git也就是用oauth2&#xff0c;然后再按照一般的方法传文件&a…

(三十三)大数据实战——Canal安装部署及其应用案例实战

前言 Canal 是一个开源的MySQL数据库binlog监听和解析框架&#xff0c;用于实时捕获 MySQL数据库的binlog 变更事件&#xff0c;并将其解析成易于消费的数据格式。Canal 可以实时监听 MySQL 数据库的 binlog&#xff0c;并即时捕获数据库的数据变更事件。Canal可以将捕获到的b…

C++ function<>和bind()

一、可调用对象 介绍两个概念&#xff1a;调用运算符和可调用对象 调用运算符 调用运算符&#xff0c;即&#xff1a;() 。跟随在函数名之后的一对括号 “()”&#xff0c;起到调用函数的效果&#xff0c;传递给函数的参数放置在括号内。 可调用对象 对于一个对象或者一个表…

位图+布隆过滤器+海量数据问题(它们都是哈希的应用)

一)位图: 首先计算一下存储一下10亿个整形数据&#xff0c;需要多大内存呢&#xff0c;多少个G呢&#xff1f; 2^3010亿&#xff0c;10亿个字节 byte kb mb gb 100000000个字节/1024/1024/10241G 所以10亿个字节就是1G&#xff0c;所以40亿个字节就是4G&#xff0c;也就是10个整…

Swing基本组件的用法(一)

语雀笔记&#xff1a;https://www.yuque.com/huangzhanqi/rhwoir/paaoghdyv0tgksk1https://www.yuque.com/huangzhanqi/rhwoir/paaoghdyv0tgksk1Java图形化界面: Java图形化界面学习demo与资料 (gitee.com)https://gitee.com/zhanqi214/java-graphical-interface Swing组件层次…

机器学习笔记 - 视频分析和人类活动识别技术路线简述

一、理解人类活动识别 首先了解什么是人类活动识别,简而言之,是对某人正在执行的活动/动作进行分类或预测的任务称为活动识别。 我们可能会有一个问题:这与普通的分类任务有什么不同?这里的问题是,在人类活动识别中,您实际上需要一系列数据点来预测正确执行的动作。 看看…

Python 多进程异常

这里写目录标题 1、捕获异常2、退出程序3、进程共享变量4、multiprocessing的Pool所起的进程中再起进程 1、捕获异常 https://zhuanlan.zhihu.com/p/321408784 try:<语句> except Exception as e:print(异常说明,e)1 捕获所有异常 包括键盘中断和程序退出请求&#xff0…

一个Binder的前生今世 (一):Service的创建

一个Binder的前生今世 (一):Service的创建 一个Binder的前生今世Binder的历史 (字面意义的前生今世)Binder的生命周期(抽象意义的前生今世)Binder 应用及系统层关系图Binder应用层的架构设计Binder应用层实现Binder的创建服务端Binder的创建服务端Binder的传递Binder在客…

Trino HTTPS 与密码认证介绍与实战操作

文章目录 一、概述二、安装 Trino三、配置 HTTPS1&#xff09;生成证书2&#xff09;配置 Trino3&#xff09;修改 Trino docker-compose yaml 文件4&#xff09;开始部署 Trino5&#xff09;测试验证 四、密码认证1&#xff09;开启密码认证2&#xff09;创建密码认证配置文件…

AndroidStudio 安装与配置【安装教程】

1.下载软件 进入官网https://developer.android.google.cn/studio&#xff0c;直接点击下载 2.阅读并同意协议书 直接下滑至最底部 如果这里出现了无法访问 官方地址&#xff1a;https://redirector.gvt1.com/edgedl/android/studio/install/2022.3.1.19/android-studio-2022.…

java:杨辉三角形

public class YangHui {public static void main(String[] args){int yangHui[][] new int[10][];for (int i 0; i < yangHui.length;i){yangHui[i] new int[i 1];for (int j 0; j < yangHui[i].length; j){ // 最初和最后的数值都是1if (j 0 || j …

LeetCode 847. Shortest Path Visiting All Nodes【状态压缩,BFS;动态规划,最短路】2200

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…

深度解析shell脚本的命令的原理之pwd

pwd是Print Working Directory的缩写&#xff0c;是一个Unix和Linux shell命令&#xff0c;用于打印当前工作目录的绝对路径。以下是对这个命令的深度解析&#xff1a; 获取当前工作目录&#xff1a;pwd命令通过调用操作系统提供的getcwd&#xff08;或相应的&#xff09;系统调…