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

机器学习_决策树与随机森林

决策树是一种常用的监督学习算法,既可以用于分类任务也可以用于回归任务。决策树通过递归地将数据集划分成更小的子集,逐步建立树结构。每个节点对应一个特征,树的叶子节点表示最终的预测结果。构建决策树的关键是选择最佳的特征来分割数据,而信息增益(Information Gain)和熵(Entropy)是常用的度量标准。

熵(Entropy)

原理

熵是衡量随机变量不确定性的指标。在决策树中,熵用于衡量数据集的纯度或混乱程度。熵越高,数据集越混乱;熵越低,数据集越纯净。

公式

对于一个包含 ( n ) 个类别的分类问题,数据集 ( S ) 的熵定义为:
Entropy ( S ) = − ∑ i = 1 n p i log ⁡ 2 ( p i ) \text{Entropy}(S) = -\sum_{i=1}^{n} p_i \log_2(p_i) Entropy(S)=i=1npilog2(pi)
其中,( p_i ) 是数据集中第 ( i ) 类的比例。

示例

假设数据集 ( S ) 有两类(正例和反例),其中正例占比 ( p ),反例占比 ( 1-p ),则熵为:
Entropy ( S ) = − p log ⁡ 2 ( p ) − ( 1 − p ) log ⁡ 2 ( 1 − p ) \text{Entropy}(S) = -p \log_2(p) - (1-p) \log_2(1-p) Entropy(S)=plog2(p)(1p)log2(1p)

信息增益(Information Gain)

原理

信息增益用于衡量选择某个特征进行划分后,数据集的纯度增加了多少。信息增益越大,说明通过该特征进行划分,能够更好地区分数据。因此,决策树在选择特征进行划分时,会选择信息增益最大的特征。

公式

特征 ( A ) 对数据集 ( S ) 的信息增益定义为:
Gain ( S , A ) = Entropy ( S ) − ∑ v ∈ Values ( A ) ∣ S v ∣ ∣ S ∣ Entropy ( S v ) \text{Gain}(S, A) = \text{Entropy}(S) - \sum_{v \in \text{Values}(A)} \frac{|S_v|}{|S|} \text{Entropy}(S_v) Gain(S,A)=Entropy(S)vValues(A)SSvEntropy(Sv)
其中,Values(A) 表示特征 ( A ) 的所有可能取值,( S_v ) 表示在特征 ( A ) 上取值为 ( v ) 的子集。

示例

假设我们有一个数据集 ( S ),特征 ( A ) 有两个可能取值 ( {a_1, a_2} ),则信息增益计算过程如下:

  1. 计算整个数据集的熵: Entropy ( S ) \text{Entropy}(S) Entropy(S)
  2. 计算特征 ( A ) 各个取值子集的熵: Entropy ( S a 1 ) \text{Entropy}(S_{a_1}) Entropy(Sa1) Entropy ( S a 2 ) \text{Entropy}(S_{a_2}) Entropy(Sa2)
  3. 计算信息增益:
    Gain ( S , A ) = Entropy ( S ) − ( ∣ S a 1 ∣ ∣ S ∣ Entropy ( S a 1 ) + ∣ S a 2 ∣ ∣ S ∣ Entropy ( S a 2 ) ) \text{Gain}(S, A) = \text{Entropy}(S) - \left( \frac{|S_{a_1}|}{|S|} \text{Entropy}(S_{a_1}) + \frac{|S_{a_2}|}{|S|} \text{Entropy}(S_{a_2}) \right) Gain(S,A)=Entropy(S)(SSa1Entropy(Sa1)+SSa2Entropy(Sa2))

基尼指数(Gini Index)

除了熵和信息增益,基尼指数也是常用的决策树分裂准则。基尼指数衡量数据集的不纯度,值越小越纯。

公式

对于一个包含 ( n ) 个类别的数据集 ( S ),基尼指数定义为:
Gini ( S ) = 1 − ∑ i = 1 n p i 2 \text{Gini}(S) = 1 - \sum_{i=1}^{n} p_i^2 Gini(S)=1i=1npi2
其中,( p_i ) 是数据集中第 ( i ) 类的比例。

示例

假设数据集 ( S ) 有两类(正例和反例),其中正例占比 ( p ),反例占比 ( 1-p ),则基尼指数为:
Gini ( S ) = 1 − ( p 2 + ( 1 − p ) 2 ) = 2 p ( 1 − p ) \text{Gini}(S) = 1 - (p^2 + (1-p)^2) = 2p(1-p) Gini(S)=1(p2+(1p)2)=2p(1p)

信息增益率(Information Gain Ratio)

信息增益率是信息增益的一种改进形式,旨在处理信息增益对取值较多的特征的偏好问题。

公式

特征 ( A ) 对数据集 ( S ) 的信息增益率定义为:
GainRatio ( S , A ) = Gain ( S , A ) SplitInformation ( A ) \text{GainRatio}(S, A) = \frac{\text{Gain}(S, A)}{\text{SplitInformation}(A)} GainRatio(S,A)=SplitInformation(A)Gain(S,A)
其中,分裂信息(Split Information)定义为:
SplitInformation ( A ) = − ∑ v ∈ Values ( A ) ∣ S v ∣ ∣ S ∣ log ⁡ 2 ( ∣ S v ∣ ∣ S ∣ ) \text{SplitInformation}(A) = -\sum_{v \in \text{Values}(A)} \frac{|S_v|}{|S|} \log_2 \left( \frac{|S_v|}{|S|} \right) SplitInformation(A)=vValues(A)SSvlog2(SSv)

用法
  1. 分类:用于分类任务,目标变量是类别。
  2. 回归:用于回归任务,目标变量是连续值。
优点
  • 易于理解和解释。
  • 处理类别特征和数值特征。
  • 不需要大量数据预处理。
缺点
  • 容易过拟合,尤其在树深度较大时。
  • 对噪声数据敏感。
代码实例

以下是使用 scikit-learn 实现决策树分类和回归的代码示例。

from sklearn.datasets import load_iris, load_boston
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier, DecisionTreeRegressor
from sklearn.metrics import accuracy_score, mean_squared_error# 分类任务
iris = load_iris()
X, y = iris.data, iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)clf = DecisionTreeClassifier()
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)print(f"Classification Accuracy: {accuracy_score(y_test, y_pred)}")# 回归任务
boston = load_boston()
X, y = boston.data, boston.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)reg = DecisionTreeRegressor()
reg.fit(X_train, y_train)
y_pred = reg.predict(X_test)print(f"Regression MSE: {mean_squared_error(y_test, y_pred)}")

随机森林

随机森林是集成学习方法的一种,通过生成多个决策树,并结合它们的预测结果来提高模型的性能和稳定性。

用法
  1. 分类:用于分类任务,通过多个决策树的投票来确定类别。
  2. 回归:用于回归任务,通过多个决策树的平均值来预测连续值。
优点
  • 减少过拟合的风险。
  • 更高的预测准确性。
  • 能处理高维数据和缺失值。
缺点
  • 计算开销较大,尤其是树的数量较多时。
  • 模型复杂性较高,不易解释。
代码实例

以下是使用 scikit-learn 实现随机森林分类和回归的代码示例。

from sklearn.ensemble import RandomForestClassifier, RandomForestRegressor# 分类任务
clf = RandomForestClassifier(n_estimators=100, random_state=42)
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)print(f"Random Forest Classification Accuracy: {accuracy_score(y_test, y_pred)}")# 回归任务
reg = RandomForestRegressor(n_estimators=100, random_state=42)
reg.fit(X_train, y_train)
y_pred = reg.predict(X_test)print(f"Random Forest Regression MSE: {mean_squared_error(y_test, y_pred)}")

进阶用法和参数调整

决策树参数
  • criterion: 分裂的评价标准(ginientropy 用于分类;msemae 用于回归)。
  • max_depth: 树的最大深度,防止过拟合。
  • min_samples_split: 分裂内部节点所需的最小样本数。
  • min_samples_leaf: 叶节点的最小样本数。
随机森林参数
  • n_estimators: 决策树的数量。
  • max_features: 每次分裂时考虑的特征数量。
  • bootstrap: 是否在构建树时使用自助法采样。
  • oob_score: 是否使用袋外样本评估模型性能。
# 调整决策树参数
clf = DecisionTreeClassifier(max_depth=5, min_samples_split=10, criterion='entropy')
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
print(f"Tuned Decision Tree Classification Accuracy: {accuracy_score(y_test, y_pred)}")# 调整随机森林参数
reg = RandomForestRegressor(n_estimators=200, max_features='sqrt', oob_score=True, random_state=42)
reg.fit(X_train, y_train)
y_pred = reg.predict(X_test)
print(f"Tuned Random Forest Regression MSE: {mean_squared_error(y_test, y_pred)}")
print(f"Out-of-Bag Score: {reg.oob_score_}")

可视化决策树

可以使用 graphviz 库可视化决策树,以便更好地理解其结构。

from sklearn.tree import export_graphviz
import graphviz# 导出决策树图像
dot_data = export_graphviz(clf, out_file=None, feature_names=iris.feature_names, class_names=iris.target_names, filled=True, rounded=True, special_characters=True)
graph = graphviz.Source(dot_data)
graph.render("decision_tree")

通过这些实例,展示了决策树和随机森林在分类和回归任务中的应用。可以根据具体问题调整参数,提升模型的性能和稳定性。

相关文章:

机器学习_决策树与随机森林

决策树是一种常用的监督学习算法,既可以用于分类任务也可以用于回归任务。决策树通过递归地将数据集划分成更小的子集,逐步建立树结构。每个节点对应一个特征,树的叶子节点表示最终的预测结果。构建决策树的关键是选择最佳的特征来分割数据&a…...

嵌入式系统日志轮转:实现与性能考量

日志轮转是嵌入式系统中管理日志文件的一种常用技术,它通过创建新的日志文件来替代旧的日志文件,从而避免日志文件无限增长,占用过多存储空间。本文将探讨日志轮转的实现方法以及在嵌入式系统中实现日志轮转时需要考虑的性能因素。 一、日志…...

麦肯锡:ChatGPT等生成式AI应用激增,大中华区增长最快

全球顶级咨询公司麦肯锡(McKinsey & Company)在官网发布了《he state of AI in early 2024:Gen AI adoption spikes and starts to generate value》,一份关于生成式AI应用的调查报告。 麦肯锡对多个国家/地区的1,363位管理者进行了调查…...

Vue Router 使用教程

Vue Router 是 Vue.js 的官方路由管理器,它提供了一种方便的方式来管理应用的路由。在本教程中,我们将介绍 Vue Router 的一些常见用法和示例。 一、安装 Vue Router 使用 Vue Router 之前,需要先安装它。可以使用以下命令通过 npm 安装&am…...

银河麒麟解压命令

银河麒麟(Kylin)操作系统是基于Linux的操作系统分支之一,其使用的解压命令与Linux系统中的命令基本相同。 在银河麒麟系统中,常用的解压命令有以下几种: 对于.tar文件: tar -xvf file.tar对于.tar.gz或.…...

VSCode打开文件总是在当前标签页打开,不是新增标签页

修改 VS Code 设置 打开设置: 按 Ctrl , 或者点击右下角的齿轮图标,然后选择 “Settings”。 搜索设置: 在设置搜索栏中输入 workbench.editor.enablePreview。 禁用预览模式: 找到 Workbench > Editor: Enable Preview 选…...

Django redirect()函数实现页面重定向

1,通过路由反向解析进行重定向 1.1 添加视图函数 myshop/app2/views.py from django.http import HttpResponse from django.shortcuts import render from django.urls import reverse def index(request):return HttpResponse("app2 的index")# 反向…...

【运维项目经历|029】NTP精准时间同步系统优化项目

🍁博主简介: 🏅云计算领域优质创作者 🏅2022年CSDN新星计划python赛道第一名 🏅2022年CSDN原力计划优质作者 🏅阿里云ACE认证高级工程师 🏅阿里云开发者社区专家博主 💊交流社区:CSDN云计算交流社区欢迎您的加入! 目...

机房网络运维服务项目难点与关键点分析

随着信息技术的飞速发展,机房作为支撑企业信息化建设的核心枢纽,其网络运维服务的重要性日益凸显。然而,在实际运维过程中,运维团队常常面临诸多难点和挑战。本文将围绕机房网络运维服务项目的难点和关键点进行深入分析&#xff0…...

MKS AX7680 SERIES 电源使用说明手侧

MKS AX7680 SERIES 电源使用说明手侧...

DVWA-XSS(Reflected)

反射型XSS可以用来窃取cookie Low 输入1111进行测试&#xff0c;发现1111被打印 输入<script>alert(document.cookie)</script>&#xff0c;出现弹窗&#xff0c;获得cookie Medium 查看后端代码&#xff0c;发现对<script>进行了转义&#xff0c;但是…...

Python自动化办公2.0 即将发布

第一节课&#xff1a;数据整理与清洗 第二节课&#xff1a;数据筛选、过滤与排序 第三节课&#xff1a;高级数据处理技巧 第四节课&#xff1a;数据可视化与实践案例 第五节课&#xff1a;统计分析与报表 第六节&#xff1a;常见的Excel报表 与下方的课程形成知识体系&…...

【面试宝藏】Redis 常见面试题解析其二

Redis 高级面试题解析 20. 说说 Redis 哈希槽的机制&#xff1f; Redis 集群采用哈希槽&#xff08;Hash Slot&#xff09;机制来分布和管理数据。整个哈希空间被划分为 16384 个槽&#xff0c;每个键通过 CRC16 校验后取模映射到一个哈希槽。每个节点负责一部分哈希槽&#…...

智慧公厕厂家+智能厕所小程序,构建数字化公厕新体系

在现代社会的诸多场景中&#xff0c;公厕扮演着重要却常常被忽视的角色。尤其是在传统的楼宇中&#xff0c;公厕存在着一系列痛点问题。 一、传统公厕问题 传统楼宇公厕常常面临着布局不合理的困境&#xff0c;导致使用者寻找困难&#xff0c;浪费时间和精力。卫生状况也是一大…...

使用迁移助手 (SSMA for Oracle) 将Oracle19c数据库迁移到SQL Server2022

如何使用适用于 Oracle 的 SQL Server 迁移助手Microsoft SQL Server Migration Assistant for Oracle (SSMA for Oracle) 将 Oracle 数据库迁移到 SQL Server Microsoft SQL Server Migration Assistant (SSMA) for Oracle is a tool to automate migration from Oracle data…...

LabVIEW开发EOL功能测试系统

LabVIEW开发EOL功能测试系统 介绍了一种基于LabVIEW开发的EOL功能测试系统方案&#xff0c;涵盖软件架构、工作流程、模块化设计、低耦合性、易于修改与维护、稳定性及硬件选型。系统通过高效的CAN通信实现对电机控制器的全面测试&#xff0c;确保运行可靠并支持未来的升级需求…...

Java finally catch try关键字

Java finally catch try关键字 finally&#xff1a; finally 关键字用来创建在 try 代码块后面执行的代码块&#xff1b;无论是否发生异常&#xff0c;finally 代码块中的代码总会被执行。 在 finally 代码块中&#xff0c;可以进行文件流关闭等收尾善后性质的语句 catch&am…...

docker安装mysql8和mysql5.7

1.docker安装mysql5.7,请点击此链接 2.docker安装mysql8并挂载数据卷 docker pull mysql:8.0 docker run --name mysql8 -e MYSQL_ROOT_PASSWORDmy-secret-pw -d mysql:8.0 docker run --name mysql8 -e MYSQL_ROOT_PASSWORD123456 -v /mqq/mysql8/datadir:/var/lib/mysql -d…...

通过一个例子,说明Python的责任链设计模式有什么优缺点

责任链设计模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为设计模式&#xff0c;它允许将一个请求沿着处理者链进行传递&#xff0c;直到有一个处理者处理它为止。在Python中&#xff0c;这种模式可以通过多种方式实现&#xff0c;通常涉及到一系列对象…...

场地预定小程序基于FastAdmin+UniApp

本文来自&#xff1a;XYvenue场地预定小程序基于FastAdminUniApp - 源码1688 应用介绍 XYvenue是基于FastAdminUniApp开发的多场馆场地预定小程序&#xff0c;提供运动场馆运营解决方案&#xff0c;适用于体育馆、羽毛球馆、兵乒球馆、篮球馆、网球馆等场馆。 前端演示&#xf…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...