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

集成学习(上):Bagging集成方法

一、什么是集成学习?

在机器学习的世界里,没有哪个模型是完美无缺的。就像古希腊神话中的"盲人摸象",单个模型往往只能捕捉到数据特征的某个侧面。但当我们把多个模型的智慧集合起来,就能像拼图一样还原出完整的真相,接下来我们就来介绍一种“拼图”算法——集成学习。

集成学习是一种机器学习技术,它通过组合多个模型(通常称为“弱学习器”或“基础模型”)的预测结果,构建出更强、更准确的学习算法。这种方法的主要思想是利用群体智慧的概念——即整体性能优于单个个体。

1.1 集成学习的核心机制

集成学习大体分为三种序列集成方法(Boosting)、并行集成方法(Bagging)、堆叠集成方法(Stacking):
在这里插入图片描述

  1. Bagging(Bootstrap Aggregating)
    • 原理:通过自助采样法(Bootstrap Sampling)生成多个子数据集,分别训练基学习器,最终通过投票(分类)或平均(回归)结合结果。

    • 算法流程

原始数据集
Bootstrap采样
子数据集1
子数据集2
...
子数据集N
模型1训练
模型2训练
模型3训练
模型N训练
聚合预测
最终结果
  • 数学表达
    自助采样时,每个样本未被选中的概率为
    P = ( 1 − 1 m ) m ≈ 1 e ≈ 36.8 % , P = \left(1 - \frac{1}{m}\right)^m \approx \frac{1}{e} \approx 36.8\%, P=(1m1)me136.8%,
    其中 m m m为原始数据集大小。
  • 代表算法:随机森林(Random Forest)。
  1. Boosting

    • 原理:基学习器按顺序训练,后续模型重点关注前序模型的错误样本,最终加权结合所有模型的预测结果。
    • 算法流程
      在这里插入图片描述
    • 关键步骤
      • 计算基学习器的加权错误率 ϵ t \epsilon_t ϵt
      • 调整样本权重,使错误样本在下一轮训练中更受关注;
      • 最终预测结果为各模型的加权投票。
    • 代表算法:AdaBoost、GBDT、XGBoost。
  2. Stacking(堆叠泛化)

    • 原理:将多个基学习器的输出作为“元特征”,训练一个元学习器(Meta-Learner)进行最终预测。

    • 算法流程
      在这里插入图片描述

    • 实现步骤

      1. 基学习器在训练集上通过交叉验证生成元特征;
      2. 元学习器基于这些特征进行训练。

1.2 集成学习的优势

  1. 降低方差(Bagging):通过平均多个高方差模型(如决策树)的预测,减少过拟合。
  2. 降低偏差(Boosting):通过逐步修正错误,提升模型对复杂模式的拟合能力。
  3. 提高泛化能力:结合不同模型的优势,增强对未知数据的适应性。

1.3 局限性

  1. 计算成本高:需训练多个模型,时间和资源消耗较大。
  2. 可解释性差:模型复杂度高,难以直观理解预测逻辑。
  3. 过拟合风险:若基学习器本身过拟合,集成后可能加剧这一问题(尤其是Boosting)。

二、Bagging方法的革命性突破

在了解了集成学习之后,我们先来学习集成学习算法中的 Bagging 集成学习方法:

Bagging(Bootstrap Aggregating)作为集成学习三剑客之首,由Leo Breiman于1996年提出,其核心思想通过三个颠覆性创新彻底改变了机器学习实践:

  1. Bootstrap采样:有放回抽样生成多样性训练集
  2. 并行训练机制:基模型独立训练实现高效并行
  3. 民主投票策略:平等加权聚合降低预测方差
# Bootstrap采样可视化示例
import numpy as np
import matplotlib.pyplot as pltoriginal_data = np.arange(100)
bootstrap_samples = [np.random.choice(original_data, 100, replace=True) for _ in range(5)]plt.figure(figsize=(10,6))
for i, sample in enumerate(bootstrap_samples[:3]):plt.scatter([i]*100, sample, alpha=0.5)
plt.title("Bootstrap采样分布可视化")
plt.ylabel("样本索引")
plt.xlabel("采样批次")
plt.show()

三、算法原理深度剖析

3.1 数学本质

设基模型为 h i ( x ) h_i(x) hi(x),Bagging的预测结果为:
H ( x ) = 1 N ∑ i = 1 N h i ( x ) H(x) = \frac{1}{N}\sum_{i=1}^N h_i(x) H(x)=N1i=1Nhi(x)

方差分解公式:
Var ( H ) = ρ σ 2 + 1 − ρ N σ 2 \text{Var}(H) = \rho\sigma^2 + \frac{1-\rho}{N}\sigma^2 Var(H)=ρσ2+N1ρσ2
其中 ρ \rho ρ 为模型间相关系数, σ 2 \sigma^2 σ2 为单个模型方差

3.2 关键技术创新

技术维度传统方法Bagging创新
数据使用全量数据有放回抽样
模型关系串行依赖完全独立
预测聚合加权平均平等投票
特征选择全特征随机子空间

3.3 算法演进路线

1996原始Bagging
2001随机森林
2004Extra-Trees
2012深度森林
2020在线Bagging

四、六大核心实现技术

4.1 双重随机性设计

from sklearn.ensemble import RandomForestClassifier# 同时启用样本随机和特征随机
rf = RandomForestClassifier(max_samples=0.8,        # 样本随机采样率max_features='sqrt',    # 特征随机选择bootstrap=True
)

4.2 OOB(Out-of-Bag)估计

内置交叉验证通过 OOB 样本实现免交叉验证评估:

# OOB评分自动计算
rf = RandomForestClassifier(oob_score=True)
rf.fit(X_train, y_train)
print(f"OOB准确率:{rf.oob_score_:.4f}")

4.3 特征重要性分析

可视化关键影响因子:

import matplotlib.pyplot as pltfeatures = ["年龄", "收入", "负债率", "信用分"]
importances = forest.feature_importances_plt.barh(features, importances)
plt.title('特征重要性分析')
plt.show()

特征重要性可视化

4.4 并行化加速

from joblib import Parallel, delayeddef train_tree(data):X_sample, y_sample = bootstrap_sample(data)return DecisionTree().fit(X_sample, y_sample)# 并行训练100棵树
trees = Parallel(n_jobs=8)(delayed(train_tree)(data) for _ in range(100))

4.5 概率校准

from sklearn.calibration import CalibratedClassifierCVcalibrated_rf = CalibratedClassifierCV(rf, method='isotonic', cv=5)
calibrated_rf.fit(X_train, y_train)

4.6 异常值鲁棒性

# 使用绝对误差替代平方误差
from sklearn.ensemble import RandomForestRegressorrobust_rf = RandomForestRegressor(criterion='absolute_error',max_samples=0.632,min_samples_leaf=10
)

五、实战指南

案例1:金融反欺诈系统

  • 数据集:50万条交易记录
  • 特征维度:128维(包含时序特征、设备指纹、交易模式等)
  • 类别比例:正常交易98.7%,欺诈交易1.3%
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report# 加载百万级交易数据
X, y = load_fraud_transactions()# 构建随机森林模型
fraud_model = RandomForestClassifier(n_estimators=500,max_depth=10,class_weight="balanced"
)# 训练与评估
fraud_model.fit(X_train, y_train)
y_pred = fraud_model.predict(X_test)
print(classification_report(y_test, y_pred))

案例2:医疗影像诊断

import joblib
from skimage.feature import hog# 提取HOG特征
def extract_features(images):return np.array([hog(img) for img in images])# 训练癌症诊断模型
X_features = extract_features(medical_images)
cancer_model = RandomForestClassifier()
cancer_model.fit(X_features, labels)# 保存诊断系统
joblib.dump(cancer_model, "cancer_diagnosis.model")

案例3:电商推荐系统

from sklearn.ensemble import RandomForestRegressor# 用户行为特征矩阵
user_features = generate_user_vectors()# 预测购买概率
purchase_model = RandomForestRegressor()
purchase_model.fit(user_features, purchase_labels)# 实时推荐
live_user = get_live_data()
pred_score = purchase_model.predict([live_user])

案例4:工业设备预测性维护

from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler# 构建特征工程流水线
maintenance_pipe = make_pipeline(StandardScaler(),RandomForestClassifier(n_estimators=300)
)# 在线学习更新
partial_data, partial_label = stream_data()
maintenance_pipe.partial_fit(partial_data, partial_label)

六、性能优化八项黄金法则

6.1 参数调优矩阵

参数优化策略推荐范围
n_estimators早停法+OOB监控200-2000
max_depth交叉验证网格搜索8-30
max_features特征工程后动态调整sqrt/log2/0.3
min_samples_split基于类别分布调整2-50
bootstrap样本量<10万设为TrueBool
class_weight使用balanced_subsampleauto/自定义
ccp_alpha后剪枝优化0-0.01
max_samples大数据集设为0.80.6-1.0

6.1 超参数黄金组合(根据实际项目调整)

optimal_params = {'n_estimators': 500,          # 树的数量'max_depth': 15,              # 树的最大深度'min_samples_leaf': 5,        # 叶节点最小样本数'max_features': 'sqrt',       # 特征采样策略'n_jobs': -1,                # 使用全部CPU核心'oob_score': True            # 开启OOB评估
}

6.3 内存优化技巧

# 使用内存映射处理超大矩阵
import numpy as np
X = np.load('bigdata.npy', mmap_mode='r')# 增量训练
for subset in np.array_split(X, 10):partial_model = rf.fit(subset)rf.estimators_.extend(partial_model.estimators_)

6.4 特征工程技巧

  • 对高基数类别特征进行目标编码
  • 使用时间序列特征生成滞后变量
  • 对数值特征进行分箱离散化
from category_encoders import TargetEncoder# 处理地址等类别特征
encoder = TargetEncoder()
X_encoded = encoder.fit_transform(X_cat, y)

七、踩坑实测避坑指南:十大常见误区

  1. 样本量不足时仍使用默认bootstrap

    • 修正方案:当n_samples<1000时设置bootstrap=False
  2. 忽略特征重要性分析

    • 必须使用permutation importance进行验证
  3. 类别不平衡数据使用普通随机森林

    • 应选用BalancedRandomForest
  4. 超参数网格搜索顺序错误

    • 正确顺序:n_estimators → max_depth → min_samples_split
  5. 误用OOB分数作为最终评估

    • OOB需与holdout集结合验证
  6. 忽略特征尺度敏感性

    • 树模型虽无需归一化,但对范围敏感特征需特殊处理
  7. 错误处理缺失值

    • 应显式用np.nan表示缺失,而非填充-999
  8. 过度依赖默认参数

    • 必须根据数据分布调整min_samples_leaf等参数
  9. 忽略并行化资源分配

    • 合理设置n_jobs避免内存溢出
  10. 模型解释方法不当

    • 推荐使用SHAP值替代传统feature_importance

八、行业应用全景图

行业领域典型场景技术要点
金融科技反欺诈评分时序特征处理+增量学习
医疗健康疾病风险预测多模态数据融合
智能制造设备故障预警振动信号特征提取
零售电商用户流失预测行为序列建模
自动驾驶障碍物识别点云数据处理
能源管理电力负荷预测多周期特征工程
网络安全入侵检测流量时序分析
物联网传感器异常检测边缘计算优化

九、性能对比实验

使用OpenML-CC18基准测试集对比:

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score
from xgboost import XGBClassifier# 对比不同算法
datasets = fetch_openml('cc18')
results = {}
for name, data in datasets.items():X, y = datarf_score = cross_val_score(RandomForestClassifier(), X, y).mean()xgb_score = cross_val_score(XGBClassifier(), X, y).mean()results[name] = {'RF': rf_score, 'XGB': xgb_score}# 可视化对比结果
pd.DataFrame(results).T.plot(kind='box')
plt.title("算法性能对比")

实验结论:

  • 在小样本场景(n<10k)下,RF平均准确率高出XGBoost 2.3%
  • 在特征稀疏数据上,RF优势扩大到5.1%
  • 在时间序列数据上,XGBoost反超1.7%

下篇预告:中篇将深入解析Boosting系列算法,揭秘XGBoost、LightGBM等冠军模型的核心原理;下篇将探讨Stacking与Blending高级集成策略,解锁Kaggle竞赛的终极武器。

通过本篇内容,您已经掌握了Bagging集成学习的核心要义。现在登录Kaggle选择任意数据集,使用随机森林开启您的第一个集成学习项目吧!当您处理下一个预测任务时,不妨先思考:这个场景是否需要更强的泛化能力?是否需要自动特征选择?如果是,Bagging就是您的最佳起点。

如果您有更好的建议,可以在评论区留言讨论。

相关文章:

集成学习(上):Bagging集成方法

一、什么是集成学习&#xff1f; 在机器学习的世界里&#xff0c;没有哪个模型是完美无缺的。就像古希腊神话中的"盲人摸象"&#xff0c;单个模型往往只能捕捉到数据特征的某个侧面。但当我们把多个模型的智慧集合起来&#xff0c;就能像拼图一样还原出完整的真相&a…...

c盘清理宝藏小工具

引言 在数字化时代&#xff0c;电脑的存储空间和系统性能直接影响着我们的工作效率和用户体验。C盘作为系统盘&#xff0c;常常因为文件堆积、缓存冗余等问题变得臃肿不堪&#xff0c;导致电脑运行缓慢。为了解决这一问题&#xff0c;我最近试用了一款名为“小番茄C盘清理”的…...

QT多媒体播放器类:QMediaPlayer

QMediaPlayer 是 Qt Multimedia 模块中的核心类&#xff0c;用于播放音频和视频媒体文件。它支持本地文件、网络流媒体以及实时数据源&#xff0c;具备播放控制、状态管理、元数据访问等功能。QMediaPlayer的基本用法可能包括设置媒体源、控制播放&#xff08;播放、暂停、停止…...

Java动态代理模式深度解析

1. 动态代理基础 1.1 核心组件 Proxy 类&#xff1a;动态生成代理对象的工厂类&#xff0c;核心方法为 newProxyInstance()。 InvocationHandler 接口&#xff1a;代理逻辑的处理器&#xff0c;所有方法调用会转发到其 invoke() 方法。 1.2 实现步骤 定义接口&#xff1a;代…...

【WRF模拟】垂直层设置/与观测数据对比

【WRF模拟】垂直层设置/与观测数据对比 WRF 中 有关垂直层的namelist变量1. 主要垂直层设置参数2. 详细解释3. 典型设置示例WRF 输出的垂直剖面数据与观测数据进行比较WRF 采用 地形跟随坐标(terrain-following coordinate)WRF 输出的垂直剖面数据与观测数据进行比较参考WRF …...

植物知识分享论坛毕设

1.这四个文件直接是什么关系&#xff1f;各自都是什么作用&#xff1f;他们之间是如何联系的&#xff1f; 关系与联系 UserController.java 负责接收外部请求&#xff0c;调用 UserService.java 里的方法来处理业务&#xff0c; 而 UserService.java 又会调用 UserMapper.jav…...

可视化图解算法:链表中倒数(最后)k个结点

1. 题目 描述 输入一个长度为 n 的链表&#xff0c;设链表中的元素的值为ai &#xff0c;返回该链表中倒数第k个节点。 如果该链表长度小于k&#xff0c;请返回一个长度为 0 的链表。 数据范围&#xff1a;0≤n≤105&#xff0c;0 ≤ai≤109&#xff0c;0 ≤k≤109 要求&am…...

qt下载和安装教程国内源下载地址

qt不断在更新中&#xff0c;目前qt6日渐成熟&#xff0c;先前我们到官方下载或者国内镜像直接可以下载到exe文件安装&#xff0c;但是最近几年qt官方似乎在逐渐关闭旧版本下载通道&#xff0c;列为不推荐下载。但是qt5以其广泛使用和稳定性&#xff0c;以及积累大量代码使得qt5…...

html5表格实战-跨行跨列

效果如图 代码如图...

使用OBS进行webRTC推流参考

参考腾讯云官方文档&#xff1a; 云直播 OBS WebRTC 推流_腾讯云 说明非常详细&#xff0c;分为通过WHIP和OBS插件的形式进行推流。 注意&#xff1a;通过OBS插件的形式进行推流需要使用较低的版本&#xff0c;文档里有说明&#xff0c;需要仔细阅读。...

Rockchip --- 图像时延优化

通过配置wait-line&#xff0c;即图像采集多少行后提前输出buffer给ISP&#xff0c;而无需等待图像全部采集完毕。一般设置为图像采集一半后提前输出buffer给ISP &#xff08;一&#xff09;VICAP提前输出 Video Input CAPture是用于图像采集和处理的子系统 1. 通过dts配置 …...

微软 LIDA 库:基于大模型的自动化数据分析与可视化

微软 LIDA 库&#xff1a;基于大模型的自动化数据分析与可视化 一、核心架构与 LLM 交互流程 #mermaid-svg-UzSwZNKPlgrJUpej {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-UzSwZNKPlgrJUpej .error-icon{fill:#5…...

java-正则表达式-集合-泛型

正则表达式 正则表达式到底是什么东西&#xff1f; 在编写处理字符串的程序或网页时&#xff0c;经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说&#xff0c;正则表达式就是记录文本规则的代码。 http://tool.oschina.net/r…...

力扣刷题994. 腐烂的橘子

994. 腐烂的橘子 - 力扣&#xff08;LeetCode&#xff09; 使用bfs&#xff0c;先遍历所有的橘子&#xff0c;统计所有的橘子数量&#xff0c;然后把腐烂的橘子放入队列当中&#xff0c;然后进行bfs遍历&#xff0c;套用bfs的模版&#xff0c;但是每一次出队的橘子&#xff08…...

Kubernetes的Service详解

一、Service介绍 在 kubernetes 中&#xff0c; pod 是应用程序的载体&#xff0c;我们可以通过 pod 的 ip 来访问应用程序&#xff0c;但是 pod 的 ip 地址不是固定的&#xff0c;这也就意味着不方便直接采用pod 的 ip 对服务进行访问。 为了解决这个问题&#xff0c;kuberne…...

Linux目录理解

前言 最近在复习linux&#xff0c;发现有些目录总是忘记内容&#xff0c;发现有些还是得从原义和实际例子去理解会记忆深刻些。以下是个人的一些理解 Linux目录 常见的Linux下的目录如下&#xff1a; 1. 根目录 / (Root Directory) 英文含义&#xff1a;/ 是文件系统的根…...

vue中js简单创建一个事件中心/中间件/eventBus

vue中js简单创建一个事件中心/中间件/eventBus 目录结构如下&#xff1a; eventBus.js class eventBus {constructor() {this.events {};}// 监听事件on(event, callback) {if (!this.events[event]) {this.events[event] [];}this.events[event].push(callback);}// 发射…...

1~2 课程简介+ESP32-IDF环境搭建(虚拟机Linux环境下)

哔站“宸芯IOT”视频链接 一、课程内容介绍 1.什么是ESP32 ESP32是集成2.4GHz Wi-Fi和蓝牙双模的单芯片方案&#xff0c;具有超高的射频性能、稳定性、通用性和可靠性&#xff0c;以及超低的功耗&#xff0c;满足不同的功耗需求&#xff0c;适用于各种应用场景。ESP32是ESP8…...

Linux系统移植篇(十一)Linux 内核启动流程

要分析 Linux 启动流程&#xff0c;同样需要先编译一下 Linux 源码&#xff0c;因为有很多文件是需要编译才 会生成的。首先分析 Linux 内核的连接脚本文件 arch/arm/kernel/vmlinux.lds&#xff0c;通过链接脚本可以 找到 Linux 内核的第一行程序是从哪里执行的。vmlinux.lds …...

React19源码系列之Hooks(useId)

useId的介绍 https://zh-hans.react.dev/reference/react/useId useId 是 React 18 引入的一个新 Hook&#xff0c;主要用于生成全局唯一的 ID。在开发中&#xff0c;我们经常需要为元素&#xff08;如表单元素、模态框等&#xff09;生成唯一 ID&#xff0c;以便在 JavaScri…...

深度学习-149-langchain之如何不使用with_structured_output()从模型中返回结构化数据

文章目录 1 不使用with_structured_output()方法1.1 问题背景1.2 输出解析器1.3 远程deepseek大模型API2 基于提示词2.1 直接使用提示词2.2 少样本提示词3 直接提示和解析模型输出3.1 使用PydanticOutputParser3.1.1 构建解析器3.1.2 构建提示模板3.1.3 调用大模型3.1.4 调用链…...

SAP DOI EXCEL应用

【应用场景】采用DOI方式打开填充EXCEL数据 *&---------------------------------------------------------------------* *& 包含 ZFI1009R_TOP *&---------------------------------------------------------------------* TABLES:bkpf,bseg. D…...

RS485电路设计注意事项

&#xff08;一&#xff09;RS485的电平标准&#xff1a; RS485用缆线两端的电压差值来表示传递信号&#xff0c;逻辑“1”以两线间的电压差为2V~6V标识&#xff0c;逻辑“0”以两线间的电压差为-2V~-6V标识。由此可见&#xff0c;接口信号电平较低&#xff0c;不易损坏接口电路…...

Git 回退操作详解:带示例的“小白”指南

前言 在日常开发中&#xff0c;我们难免会遇到&#xff1a; 改错代码&#xff1a;推送之前才发现某些行根本就不该动提交错误&#xff1a;commit 信息打错、提交到错误分支想回到之前版本&#xff1a;测试时发现之前版本是好的&#xff0c;需要回去查看 这就需要用到 Git 的…...

PyQt5库 各种导入项的作用

from PyQt5.QtCore import QIODevice, QSharedMemory, pyqtSignal 这行代码是从 PyQt5 库中导入了几个类和信号&#xff0c;用于开发桌面应用程序。下面是每个导入项的详细解释&#xff1a; QIODevice: QIODevice 是 PyQt5 中的一个类&#xff0c;提供了对输入输出设备的抽象…...

Git下载安装(保姆教程)

目录 1、Git下载 2、Git安装&#xff08;windows版&#xff09; &#xff08;1&#xff09;启动安装程序 &#xff08;2&#xff09;阅读许可协议 &#xff08;3&#xff09;选择安装路径 &#xff08;4&#xff09;选择组件 &#xff08;5&#xff09;选择开始菜单文件夹…...

关系数据库设计理论

目录 一、数据依赖——重点 &#xff08;1&#xff09;平凡依赖/非平凡函数依赖 &#xff08;2&#xff09;完全/部分函数依赖 &#xff08;3&#xff09;传递函数依赖 二、范式&#xff08;NF&#xff09; &#xff08;1&#xff09;第一范式 &#xff08;2&#xff09…...

图解LLM智能体(LLM Agents):构建与运作机制的全面解析

LLM智能体:构建与运作机制 LLM智能体(LLM Agents)正在迅速普及,似乎逐渐取代了我们熟悉的传统对话式LLM。这些令人惊叹的能力并非凭空而来,而是需要多个组件协同工作。 本文包含超过60张定制插图,将深入探讨LLM智能体的领域、其核心组件以及多智能体框架的工作原理。 文…...

Anaconda 入门指南

Anaconda 入门指南 一、下载安装 Anaconda 1、下载地址&#xff1a;Anaconda 推荐下载 python3 版本, 毕竟未来 python2 是要停止维护的。 2、安装 Anaconda 按照安装程序提示一步步安装就好了, 安装完成之后会多几个应用&#xff1a; Anaconda Navigtor &#xff1a;用于管…...

YOLOv11小白的进击之路(九)创新YOLO11损失函数之NWD损失函数源码解读

之前的博客也有对YOLO11的损失函数进行过源码分析&#xff0c;可以参考&#xff1a;YOLOv11小白的进击之路&#xff08;六&#xff09;创新YOLO的iou及损失函数时的源码分析_yolov11的损失函数是什么-CSDN博客最近在做小目标检测的时候注意到了NWD损失函数&#xff0c;这里对其…...

【c++】内存序 和 内存一致性模型

c 11 中为了支持并发&#xff0c;定义了内存序和内存一致性模型。这个概念听起来非常高深&#xff0c;好像是在多线程编程领域浸淫多年之后的神级程序员才能搞明白&#xff0c;并用明白的东西。 本文尝试用最简单的方式说清楚这个概念。因为这个概念真的超级简单&#xff0c;大…...

力扣128. 最长连续序列 || 452. 用最少数量的箭引爆气球

最长连续列 给定一个未排序的整数数组 nums &#xff0c;找出数字连续的最长序列&#xff08;不要求序列元素在原数组中连续&#xff09;的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 输入&#xff1a;nums [100,4,200,1,3,2] 输出&#xff1a;4 解释&…...

从零开始写C++3D游戏引擎(开发环境VS2022+OpenGL)之十一点二五 光照贴图(lighting maps)的实现 细嚼慢咽逐条读代码系列

写在篇前的话 作为一个曾经在代码堆里面苦苦挣扎的萌新,困惑的事情在于库,各种依赖,包换文件,链接库,纠结于代码的作用意义。尤其在3D引擎开发的问题上,很多人都被各种困难给阻拦,放弃了在3D渲染,3D游戏引擎上大涨鸿图的机会。 当然关于3D游戏引擎的教程已经汗牛充栋…...

优先级队列(PriorityQueue)_1_模拟实现优先级队列

1、概念 前面介绍过队列&#xff0c;队列是一种先进先出(FIFO)的数据结构 &#xff0c;但有些情况下&#xff0c; 操作的数据可能带有优先级&#xff0c;一般出队 列时&#xff0c;可能需要优先级高的元素先出队列 &#xff0c;这时候&#xff0c;使用队列显然不合适了。 在这种…...

java后端怎么写好根据角色控制查询不同数据,

z总的思路&#xff0c;先把不带查询条件的包含角色控制场景&#xff08;比如&#xff1a;总公司经理角色可以查看所有数据&#xff0c;但是暂存的话只能查自己暂存的&#xff0c;分公司&#xff0c;只能查自己所属分公司的&#xff0c;&#xff09;的所有数据查出来 例如查询的…...

《量子比特:AI复杂算法破局的关键力量》

在科技飞速发展的今天&#xff0c;人工智能&#xff08;AI&#xff09;与量子计算成为了推动人类进步的两大引擎。而量子比特&#xff0c;作为量子计算的基石&#xff0c;正逐渐展现出其在实现复杂AI算法时相较于传统比特的独特优势&#xff0c;为AI领域带来了前所未有的变革潜…...

MVC_Publish-Subscriber 模式中的事件处理程序

MVC_Publish-Subscriber 模式中的事件处理程序 MVC 中的事件处理&#xff1a;发布者-订阅者模式 程序启动时&#xff0c;controlRecipes将被传入addHandlerRender; addHandlerRender会侦听事件&#xff08;addEventListener&#xff09;,并使用controlRecipes作为回调&#xf…...

RxSwift 学习笔记第四篇之RxSwift在项目中的简单应用

目录 前言 一、RxCocoa在项目中的用法 1.Target Action 2.代理 3.闭包回调 4.通知 二、一个计时器的例子 前言 在上面的两篇文章中,我们了解到了RxSwift中的Observable和Observer,本篇文章我们主要介绍下RxSwift项目中的使用。 一、RxCocoa在项目中的用法 RxCocoa 给 …...

Java面试黄金宝典2

1. 什么是 Concurrent 包 java.util.concurrent&#xff08;简称 Concurrent 包&#xff09;是 Java 5 引入的一个用于并发编程的工具包。它提供了一系列用于处理多线程编程的类和接口&#xff0c;帮助开发者更方便、安全地进行并发编程。 原理 该包基于 Java 的多线程机制和锁…...

【在数轴上找最优位置,使移动距离最短】

L1-4 破碎的心&#xff0c;无法挽回的距离 题目描述: YFffffff 最近在感情上遭受了失败&#xff0c;他的心也破碎成了n块碎片&#xff0c;散落在了数轴上的 n 个位置。 你是一个情感修复师&#xff0c;作为 YFffffff 的好友&#xff0c;你试图将这些破碎的心重新聚集到一个位…...

3D标定中的平面约束-平面方程的几何意义

平面方程的一般形式为 AxByCzD0&#xff0c;其中系数 A、B、C、D共同决定了平面的几何特性。 系数对平面姿态的影响 1. 法向量方向2. 平面位置3. 比例关系4. 姿态变换5.平面空间变换 1. 法向量方向 法向量方向由 A、B、C 决定 核心作用&#xff1a;系数 A、B、C 构成的向量 (…...

singleInstance 和 singleTask的 重要 区别

singleInstance 和 singleTask 是 Android 中 Activity 的两种启动模式&#xff0c;它们主要用于控制 Activity 在任务栈中的行为。以下是两者的区别&#xff1a; 1. singleTask 定义: 每个 singleTask 模式的 Activity 在一个任务栈中只会存在一个实例。行为: 如果该 Activi…...

【如何在OpenWebUI中使用FLUX绘画:基于硅基流动免费API的完整指南】

如何在OpenWebUI中使用FLUX绘画&#xff1a;基于硅基流动免费API的完整指南 注册并获取硅基流动秘钥OpenWebUI中使用函数配置自定义模型-提示词配置效果验证 ) FLUX绘画是一种强大的AI绘图工具&#xff0c;本文将详细介绍如何在OpenWebUI中集成并使用FLUX绘画功能&#xff0c;…...

【Linux】浅谈环境变量和进程地址空间

一、环境变量 基本概念 环境变量&#xff08;Environment Variables&#xff09;是操作系统提供的一种机制&#xff0c;用于存储和传递配置信息、系统参数、用户偏好设置等。 环境变量的作用 配置程序行为&#xff1a; 程序可以通过环境变量获取配置信息&#xff0c;例如日…...

vue数字公式篇(一)

一、使用插件来创造数字公式 因为只是展示和编辑 我看这个公式挺多&#xff0c;也对公式不太了解所以就这样&#xff0c;开始我的代码展示了 1、安装mathlive cnpm install mathlive2、页面 <template><div><label>输入 LaTeX 公式:</label><div …...

基于PMU的14节点、30节点电力系统状态估计MATLAB程序

“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 程序简介&#xff1a; 程序采用三种方法对14节点和30节点电力系统状态进行评估&#xff1a; ①PMU同步向量测量单元结合加权最小二乘法&#xff08;WLS&#xff09;分析电力系统的电压幅值和相角状态&#xff1b; …...

5 分钟用满血 DeepSeek R1 搭建个人 AI 知识库(含本地部署)

最近很多朋友都在问&#xff1a;怎么本地部署 DeepSeek 搭建个人知识库。 老实说&#xff0c;如果你不是为了研究技术&#xff0c;或者确实需要保护涉密数据&#xff0c;我真不建议去折腾本地部署。 为什么呢&#xff1f; 目前 Ollama 从 1.5B 到 70B 都只是把 R1 的推理能力…...

QT QML实现音频波形图进度条,可点击定位或拖动进度

前言 本项目实现了使用QT QML创建一个音频波形图进度条的功能。用户可以在界面上看到音频波形图&#xff0c;并且可以点击进度条上的位置进行定位&#xff0c;也可以拖动进度条来调整播放进度。可以让用户更方便地控制音频的播放进度&#xff0c;并且通过音频波形图可以直观地…...

浅谈StarRocks SQL性能检查与调优

StarRocks性能受数据建模、查询设计及资源配置核心影响。分桶键选择直接决定数据分布与Shuffle效率&#xff0c;物化视图可预计算复杂逻辑。执行计划需关注分区裁剪、谓词下推及Join策略&#xff0c;避免全表扫描或数据倾斜。资源层面&#xff0c;需平衡并行度、内存限制与网络…...

味觉传送器E-Taste:开启虚拟世界的味觉之门

味觉传送器E-Taste&#xff1a;开启虚拟世界的味觉之门 一、发明背景与动机 随着虚拟现实&#xff08;VR&#xff09;和增强现实&#xff08;AR&#xff09;技术的飞速发展&#xff0c;人们在虚拟世界中的沉浸感不断提升&#xff0c;视觉和听觉体验已经取得了显著的突破。然而…...