【机器学习】朴素贝叶斯算法:原理剖析与实战应用
引言
朴素贝叶斯算法就像是一位善于从经验中学习的侦探,根据已有的线索来推断未知事件的概率。这是一种基于概率论的分类算法,以贝叶斯定理为基础,却做了一个"朴素"的假设:认为所有特征彼此独立。虽然这个假设在现实中很少完全成立(就像假设一个人喜欢鞋子与喜欢包包无关)。尽管如此,该算法在实际应用中仍然表现出色,特别是在文本分类、垃圾邮件过滤和情感分析等领域,它简单高效的特点使其成为机器学习的"常青树"。
贝叶斯定理:故事从这里开始
假设你是一位医生,一位患者的检测结果呈阳性。要判断他真的患病的概率,你需要考虑:检测的准确性、疾病的普遍程度等因素。这正是贝叶斯定理所解决的问题!
贝叶斯定理的公式如下:
P ( A ∣ B ) = P ( B ∣ A ) × P ( A ) P ( B ) P(A|B) = \frac{P(B|A) \times P(A)}{P(B)} P(A∣B)=P(B)P(B∣A)×P(A)
用日常语言解释:
- P ( A ∣ B ) P(A|B) P(A∣B) 是"已知B发生后,A发生的概率"(如:检测为阳性后,真实患病的概率)
- P ( B ∣ A ) P(B|A) P(B∣A) 是"已知A发生后,B发生的概率"(如:患病者检测呈阳性的概率)
- P ( A ) P(A) P(A) 是"A发生的初始概率"(如:人群中患病率)
- P ( B ) P(B) P(B) 是"B发生的总体概率"(如:检测结果为阳性的总体概率)
朴素贝叶斯:贝叶斯定理的实用简化版
想象一下,你在给电子邮件分类。看到"免费"、“优惠"这样的词,你可能会怀疑是垃圾邮件;看到"会议”、“报告”,则可能是工作邮件。朴素贝叶斯正是模仿这种思考过程!
核心思想
朴素贝叶斯的目标是:给定一组特征(如邮件中的词语),预测它属于哪个类别(如垃圾邮件还是正常邮件)。
用数学公式表达:
P ( 类别 ∣ 特征 ) = P ( 特征 ∣ 类别 ) × P ( 类别 ) P ( 特征 ) P(类别|特征) = \frac{P(特征|类别) \times P(类别)}{P(特征)} P(类别∣特征)=P(特征)P(特征∣类别)×P(类别)
由于我们只关心哪个类别的概率最大,而对于同一组特征,分母 P ( 特征 ) P(特征) P(特征)是固定的,因此简化为:
最可能的类别 = arg max 类别 [ P ( 特征 ∣ 类别 ) × P ( 类别 ) ] 最可能的类别 = \arg\max_{类别} [P(特征|类别) \times P(类别)] 最可能的类别=arg类别max[P(特征∣类别)×P(类别)]
这里的"朴素"体现在一个简化假设:所有特征之间相互独立。这就像假设一封邮件中"免费"和"优惠"这两个词的出现互不影响。虽然这在现实中不太可能,但这个假设大大简化了计算:
P ( 所有特征 ∣ 类别 ) = P ( 特征 1 ∣ 类别 ) × P ( 特征 2 ∣ 类别 ) × . . . × P ( 特征 n ∣ 类别 ) P(所有特征|类别) = P(特征1|类别) \times P(特征2|类别) \times ... \times P(特征n|类别) P(所有特征∣类别)=P(特征1∣类别)×P(特征2∣类别)×...×P(特征n∣类别)
朴素贝叶斯的三种"口味"
就像冰淇淋有不同口味,朴素贝叶斯也有三种常见变体,适用于不同类型的数据:
1. 高斯朴素贝叶斯:处理连续数值
适用场景:身高、体重、温度等连续数值特征。
它假设每个类别下的特征值服从正态分布(钟形曲线)。例如,男性和女性的身高分别服从不同参数的正态分布。
2. 多项式朴素贝叶斯:处理出现次数
适用场景:文本分析中的词频统计。
它关注特征(如单词)出现的次数。比如,垃圾邮件中"优惠"出现的频率比正常邮件高。
3. 伯努利朴素贝叶斯:处理是否出现
适用场景:特征只关注是否出现,不关注出现次数。
比如,分析一封邮件是否包含某些关键词,而不关心这些词出现了几次。
朴素贝叶斯算法流程图
拉普拉斯平滑:解决"零概率"危机
想象这种情况:你的训练数据中,“比特币"这个词从未在正常邮件中出现过。按照概率计算,P(比特币|正常邮件) = 0。这意味着,一旦新邮件中出现"比特币”,算法就会断定它不可能是正常邮件,这显然太极端了!
拉普拉斯平滑(又称"加一平滑")通过在分子和分母都加上一个小数值,避免了零概率的出现:
P ( 特征 ∣ 类别 ) = 特征在该类别中出现的次数 + 1 该类别的特征总数 + 特征种类总数 P(特征|类别) = \frac{特征在该类别中出现的次数 + 1}{该类别的特征总数 + 特征种类总数} P(特征∣类别)=该类别的特征总数+特征种类总数特征在该类别中出现的次数+1
这就像是给每个特征一个"出场机会",即使它在训练数据中从未出现过。
实际案例详解:垃圾邮件过滤器
背景
我们将构建一个简单的垃圾邮件过滤器,就像你邮箱中的那个,但更简单易懂。
训练数据
假设我们有5封训练邮件:
内容 | 类别 |
---|---|
“优惠促销 免费赠品” | 垃圾邮件 |
“会议通知 项目进度” | 正常邮件 |
“免费获取 限时优惠” | 垃圾邮件 |
“周报提交 项目计划” | 正常邮件 |
“团队会议 工作总结” | 正常邮件 |
步骤分解(小白也能懂的计算过程)
第一步:计算每类邮件的基础概率
- 垃圾邮件:2/5 = 40%
- 正常邮件:3/5 = 60%
第二步:统计词语出现情况
词汇表:{“优惠”, “促销”, “免费”, “赠品”, “会议”, “通知”, “项目”, “进度”, “获取”, “限时”, “周报”, “提交”, “计划”, “团队”, “工作”, “总结”}
第三步:计算每个词在各类邮件中的出现概率(加一平滑)
例如:
- 在垃圾邮件中,"优惠"出现2次,总词数8个,词表大小16。
P(优惠|垃圾) = (2+1)/(8+16) = 3/24 = 0.125 - 在正常邮件中,"项目"出现3次,总词数12个,词表大小16。
P(项目|正常) = (3+1)/(12+16) = 4/28 ≈ 0.143
第四步:对新邮件"团队优惠 项目促销"进行分类
计算它是垃圾邮件的概率:
P(垃圾|新邮件) ∝ 0.4 × 0.042(团队) × 0.125(优惠) × 0.042(项目) × 0.083(促销) ≈ 7.35×10⁻⁶
计算它是正常邮件的概率:
P(正常|新邮件) ∝ 0.6 × 0.107(团队) × 0.036(优惠) × 0.143(项目) × 0.036(促销) ≈ 10.01×10⁻⁶
由于正常邮件的概率更高,所以我们将这封邮件分类为正常邮件。
Python实战:十行代码实现垃圾邮件过滤
下面是一个简单实用的Python实现:
import numpy as np
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score, classification_report# 准备数据:10封邮件样本
emails = ["优惠促销 免费赠品","会议通知 项目进度","免费获取 限时优惠","周报提交 项目计划","团队会议 工作总结","限时折扣 免费试用", # 你可以加入更多样本"项目总结 团队协作","促销活动 抽奖优惠","工作安排 会议记录","免费课程 限时报名"
]# 标签:0=正常邮件,1=垃圾邮件
labels = [1, 0, 1, 0, 0, 1, 0, 1, 0, 1]# 步骤1:划分训练集和测试集(70%用于训练,30%用于测试)
X_train, X_test, y_train, y_test = train_test_split(emails, labels, test_size=0.3, random_state=42
)# 步骤2:将文本转换为词频特征(词袋模型)
vectorizer = CountVectorizer()
X_train_counts = vectorizer.fit_transform(X_train)
X_test_counts = vectorizer.transform(X_test)# 步骤3:训练朴素贝叶斯模型(使用多项式变体,适合文本)
model = MultinomialNB(alpha=1.0) # alpha=1.0表示使用拉普拉斯平滑
model.fit(X_train_counts, y_train)# 步骤4:在测试集上评估模型
y_pred = model.predict(X_test_counts)
accuracy = accuracy_score(y_test, y_pred)
report = classification_report(y_test, y_pred, target_names=["正常邮件", "垃圾邮件"])print(f"模型准确率: {accuracy:.2f}")
print("\n详细评估报告:")
print(report)# 步骤5:尝试对新邮件进行分类
new_emails = ["团队优惠 项目促销", "免费获取 限时折扣", "项目会议 工作安排"]
new_counts = vectorizer.transform(new_emails)
predictions = model.predict(new_counts)
probabilities = model.predict_proba(new_counts)# 输出预测结果及概率
print("\n新邮件分类结果:")
for email, prediction, proba in zip(new_emails, predictions, probabilities):category = "垃圾邮件" if prediction == 1 else "正常邮件"print(f"'{email}' → {category}")print(f" - 是正常邮件的概率: {proba[0]:.2f}, 是垃圾邮件的概率: {proba[1]:.2f}")
朴素贝叶斯算法的优缺点
优点
- 速度飞快:训练和预测速度比大多数算法都快,适合实时应用
- 小数据也能行:即使训练样本不多,效果也不错
- 高维数据处理好手:特别适合文本分类这种特征维度高的场景
- 增量学习支持:可以不断学习新数据,无需重新训练整个模型
- 解释性强:预测结果背后的原因容易解释,不像深度学习那样"黑盒"
缺点
- 特征独立性假设过强:现实世界中特征往往相互关联
- 数据不平衡敏感:如果某类数据样本远多于其他类,可能产生偏见
- 连续数值处理不够精细:对连续特征的处理不如一些专门算法
- 零概率问题:需要使用平滑技术来避免
常见Q&A
Q:为什么叫"朴素"贝叶斯?
A:因为它做了一个朴素(naive)的假设,认为所有特征之间相互独立,这在实际中很少成立,但简化了计算并且效果出人意料地好。
Q:什么场景最适合使用朴素贝叶斯?
A:文本分类(如垃圾邮件过滤、情感分析、新闻分类)、医疗诊断、推荐系统等。特别是当特征较多且训练数据有限时,朴素贝叶斯往往表现优秀。
Q:如何处理连续值特征?
A:可以使用高斯朴素贝叶斯,或者将连续值离散化(分箱)后使用多项式朴素贝叶斯。
Q:如何提高朴素贝叶斯的准确率?
A:可以尝试更好的特征选择、调整平滑参数、结合其他模型形成集成学习等方法。
结语
朴素贝叶斯算法是机器学习中的"老前辈",它用简单的概率计算就能解决复杂的分类问题。虽然它基于一个"天真"的假设,但在实际应用中却屡屡证明其价值。它就像是机器学习世界中的"瑞士军刀"—简单、快速、多用途。对于初学者来说,朴素贝叶斯是理解概率模型的绝佳起点。
相关文章:
【机器学习】朴素贝叶斯算法:原理剖析与实战应用
引言 朴素贝叶斯算法就像是一位善于从经验中学习的侦探,根据已有的线索来推断未知事件的概率。这是一种基于概率论的分类算法,以贝叶斯定理为基础,却做了一个"朴素"的假设:认为所有特征彼此独立。虽然这个假设在现实中…...
【更新完毕】2025妈妈杯C题 mathercup数学建模挑战赛C题数学建模思路代码文章教学:音频文件的高质量读写与去噪优化
完整内容请看文章最下面的推广群 我将先给出文章、代码、结果的完整展示, 再给出四个问题详细的模型 面向音频质量优化与存储效率提升的自适应编码与去噪模型研究 摘 要 随着数字媒体技术的迅速发展,音频处理技术在信息时代的应用愈加广泛,特别是在存储…...
UI键盘操作
1、Selenium中send_keys除了可以模拟键盘输入之外,还有些时候需要操作键盘上的按键,甚至是组合键,比如CTRLA,CTRLC等, 所以我们需要代码操作键盘。使用的是send_keys里的Keys的类。 from selenium.webdriver.common.keys import …...
【正则表达式】正则表达式使用总结
正则表达式除了匹配普通字符外,还可以匹配特殊字符,这些特殊字符被称为“元字符”。 特殊字符(元字符) 限定符:用于指定正则表达式中某个组件的出现次数。常见的限定符包括: *:0次或多次 +:1次或多次 ?:0次或1次 {n}:恰好n次…...
Qt编写推流程序/支持webrtc265/从此不用再转码/打开新世界的大门
一、前言 在推流领域,尤其是监控行业,现在主流设备基本上都是265格式的视频流,想要在网页上直接显示监控流,之前的方案是,要么转成hls,要么魔改支持265格式的flv,要么265转成264,如…...
Spring Boot 中基于 Reactor 的服务器端事件(SSE)推送机制实践
Spring Boot 3.0 中基于 Reactor 的服务器端事件(SSE)推送机制实践 在现代 Web 应用开发中,实时数据交互越来越成为刚需,从股票行情的实时更新到社交平台的消息即时推送,服务器端事件(Server-Sent Events,简称 SSE)作为一种高效的单向数据传输技术,正发挥着重要作用。…...
CRC实战宝典:从原理到代码,全面攻克循环冗余校验
CRC实战宝典:从原理到代码,全面攻克循环冗余校验 github开源:CRC软硬件协同测试项目 CRC 简介 CRC(循环冗余校验)是一种强大的错误检测技术,广泛应用于数字网络和存储系统。它是确保数据完整性的重要方法…...
【愚公系列】《Python网络爬虫从入门到精通》056-Scrapy_Redis分布式爬虫(Scrapy-Redis 模块)
🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! …...
ZLMediaKit 和 SRS的区别,哪个更好用?
ZLMediaKit 和 SRS(Simple RTMP Server)是两个主流的开源流媒体服务器框架,各自在功能、性能、适用场景等方面存在显著差异。以下是两者的对比分析及选择建议: 一、核心差异对比 协议支持 ZLMediaKit:支持更广泛的流媒…...
【PyTorch】colab上跑VGG(深度学习)数据集是 CIFAR10
跑得结果是测试准确率10%,欠拟合。 import torch import torchvision.datasets from torch import nn from torch.utils.data import DataLoader from torch.utils.tensorboard import SummaryWriter from torchvision import datasets, transformstransform tran…...
pytorch 51 GroundingDINO模型导出tensorrt并使用c++进行部署,53ms一张图
本专栏博客第49篇文章分享了将 GroundingDINO模型导出onnx并使用c++进行部署,并尝试将onnx模型转换为trt模型,fp16进行推理,可以发现推理速度提升了一倍。为此对GroundingDINO的trt推理进行调研,发现 在GroundingDINO-TensorRT-and-ONNX-Inference项目中分享了模型导出onnx…...
编程语言基础 - C++ 面试题
C++ 面试题 tags: c++ 文章目录 C++ 面试题关键字1. const2. static3. this 指针4. inline 内联函数5. volatile6. struct, class7. enum关键字 1. const 修饰变量:该变量不能被改变 修饰指针: 指针常量: 指针本身是常量 TYPE* const pContent;指向常量的指针:指针所指向…...
JVM笔记【一】java和Tomcat类加载机制
JVM笔记一java和Tomcat类加载机制 java和Tomcat类加载机制 Java类加载 * loadClass加载步骤类加载机制类加载器初始化过程双亲委派机制全盘负责委托机制类关系图自定义类加载器打破双亲委派机制 Tomcat类加载器 * 为了解决以上问题,tomcat是如何实现类加载机制的…...
Python----深度学习(全连接与链式求导法则)
一、机器学习和深度学习的区别 机器学习:利用计算机、概率论、统计学等知识,输入数据,让计算机学会新知 识。机器学习的过程,就是训练数据去优化目标函数。 深度学习:是一种特殊的机器学习,具有强大的能力和…...
基于SpringBoot的网上找律师管理系统
博主介绍:java高级开发,从事互联网行业六年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了六年的毕业设计程序开发,开发过上千套毕业设计程序,没有什么华丽的语言࿰…...
《目标检测双雄:YOLO与Faster R-CNN,谁主沉浮?》
在计算机视觉的广阔天地里,目标检测技术宛如一颗璀璨的明星,照亮了无数应用场景。从安防监控中对行人与车辆的精准识别,到自动驾驶领域对道路障碍物的快速判断,再到工业生产里对产品缺陷的严格检测,目标检测无处不在&a…...
CUDA编程中影响性能的小细节总结
一、内存访问优化 合并内存访问:确保相邻线程访问连续内存地址(全局内存对齐访问)。优先使用共享内存(Shared Memory)减少全局内存访问。避免共享内存的Bank Conflict(例如,使用padding或调整访…...
C#学习第17天:序列化和反序列化
什么是序列化? 定义:序列化是指把对象转换为一种可以轻松存储或传输的格式,如JSON、XML或二进制格式。这个过程需要捕获对象的类型信息和数据内容。用途:使得对象可以持久化到文件、发送至网络、或存储在数据库中。 什么是反序列…...
kafka的零拷贝技术
在 Kafka 中,高性能数据传输依赖于操作系统提供的 零拷贝(Zero-Copy) 技术,主要包括 sendfile 和 mmap 两种实现方式。它们的核心目标是减少数据在用户态和内核态之间的拷贝次数,从而提升 I/O 效率。下面详细解析它们的…...
从 0~1 保姆级 详细版 PostgreSQL 数据库安装教程
PostgreSQL数据库安装 PostgreSQL官网 【PostgreSQL官网】 | 【PostgreSQL安装官网_Windows】 安装步骤 step1: 选择与电脑相对应的PostgreSQL版本进行下载。 step2: 双击打开刚才下载好的文件。 step3: 在弹出的setup窗口中点击 …...
MySQL中常用函数的分类及示例
概述 以下是 MySQL 中常用函数的分类及示例,涵盖字符串处理、数值计算、日期操作、条件判断等常见场景: 一、字符串函数 1. CONCAT(str1, str2, ...) 拼接字符串。 SELECT CONCAT(Hello, , World); -- 输出: Hello World2. SUBSTRING(str, start,…...
【论文阅读21】-PSOSVM-CNN-GRU-Attention-滑坡预测(2024-12)
这篇论文主要提出并验证了一种新型的混合智能模型(PSOSVM-CNN-GRU-Attention),用于准确预测滑坡的点位移,并构建可靠的位移预测区间。通过对Baishuihe滑坡和Shuping滑坡的案例分析,展示了该模型的出色性能。 [1] Zai D…...
Shiro-550 动调分析与密钥正确性判断
一、Shiro 简介 Apache Shiro是一个开源安全框架,用于构建 Java 应用程序,提供身份验证、授权、加密和会话管理等功能。 二、Shiro-550(CVE-2016-4437) 1、漏洞原理 Shiro 在用户登陆时提供可选项 RememberMe,若勾选…...
Codeforces Educational Round 177 Div. 2 【B题,C待补
B 二分 题意 样例 5 3 10 3 4 2 1 512 找最右边的L下标即可 思路 二分最靠右的L端点,R端点取最右端(n*k处),找到后,答案就是L的位置(pos),(因为如果pos满足,则pos左边的所有下标都满足 代码 const in…...
【Lua语言】Lua语言快速入门
初始Lua Lua是一种轻量小巧的脚本语言,他使用标准C语言编写并以源代码形式开放。这意味着Lua虚拟机可以很方便的嵌入别的程序中,从而为应用程序提供灵活的扩展和定制功能。同时,在目前脚本引擎中,Lua的运行速度占有绝对优势。 变…...
Matlab画海洋与大气变量的时间序列并带标记面的三维折线图--来源粉丝
Matlab画带标记面的三维折线图–来源粉丝 图片 目标图: 图片 复现: 图片 细节可在代码中更改: 数据构造 clear;clc;close all; % 数据构造 X1 1:8;Y1ones(length(X1),1); X2 X1;Y22*ones(length(X1),1); X3 X1;Y33*ones(length(X1),1); …...
NestJS——多环境配置方案(dotenv、config、@nestjs/config、joi配置校验)
个人简介 👀个人主页: 前端杂货铺 🙋♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…...
RAGFlow在Docker中运行Ollama直接运行于主机的基础URL的地址
基础Url http://host.docker.internal:11434...
python 库 下载 ,整合在一个小程序 UIUIUI
上图 import os import time import threading import requests import subprocess import importlib import tkinter as tk from tkinter import ttk, messagebox, scrolledtext from concurrent.futures import ThreadPoolExecutor, as_completed from urllib.parse import…...
【MySQL】数据库约束
个人主页:♡喜欢做梦 欢迎 👍点赞 ➕关注 ❤️收藏 💬评论 目录 ✨一、数据库的约束 🌟二、数据库约束的分类 🌍 1.非空约束(NOT NULL) 1.定义 2.格式 3.示例: 列的信息可…...
Firewalld防火墙
目录 Firewald 防火墙概述 Firewalld 简介 firewalld 与 iptables service的区别 Firewalld 网络区域 Firewalld 防火墙图形配置方法 服务选项 端口号 协议选项 源端口选项 伪装选项 端口转发 ICMP过滤器 防火墙的配置运行状态 运行时和永久有什么区别 Firewalld 防火墙 firewa…...
使用 TensorFlow 和 Keras 构建 U-Net
U-Net是图像分割领域中最为著名的架构之一。U-Net 因其形状而得名,它是一种全卷积架构,首先将图像收缩,然后将其扩展为输出结果。虽然这种收缩路径构建了一个学习特征的层次结构,但跳过连接有助于在扩展路径中将这些特征转换回相关…...
【网络篇】TCP vs UDP底层区别+网络编程概念
大家好呀 我是浪前 今天讲解的是网络篇的第三章:网络编程概念和TCP&UDP的区别 网络编程概念TCP和UDP的区别 跨主机通信:网络编程插座:网络编程的本质: 网络编程的重要概念:客户端和服务器: 客户端和服务器的交互模…...
如何保存服务器mysql数据库的数据到本地文件
打开mysql命令行如图1 图1 mysql命令行 修改文件保存路径。 在mysql安装目录下,找到my.ini文件,找到secure-file-priv变量配置的地方,修改对应的值,然后重启mysql,此时把文件放到指定路径,再执行导入导出…...
Flutter学习 滚动组件(2):ListView进阶使用
目录 前言:一、实现复杂的ListView列表:1.1 Item布局封装1.2 ListView的使用1.3 增加分割线 二、实现ListView下拉刷新:三、实现上拉加载更多:四、实现下拉刷新、上拉加载更多:五、ListView滚动方向和控制:…...
linux oracle 19c 静默安装
oracle数据库有个比较很抓瞎的事情,不同的版本搭建的大致流程是一样的,但是在实操细节上会有不同,比如操作的脚本位置和配置项等等,这些会变,所以需要时常积累不同版本的文档 这里有一点要说明,之所以使用…...
中间件--ClickHouse-11--部署示例(Linux宿主机部署,Docker容器部署)
一、Linux宿主机部署 1、环境准备 操作系统:推荐使用 CentOS 7/8 或 Ubuntu 18.04/20.04。硬件要求: 至少 2 核 CPU 和 4GB 内存。足够的磁盘空间(根据数据量评估)。CPU需支持SSE4.2指令集(可通过以下命令检查&#…...
AI调试工具有哪些?
一、深度学习框架专用调试工具 TensorBoard • 功能:实时监控训练指标(损失值、准确率)、可视化神经网络结构、分析参数分布和梯度信息 • 适用框架:TensorFlow、PyTorch(通过插件) • 特点:支持…...
Warcraft Logs [Classic] [WCL] BOSS ID query
Warcraft Logs [Classic] [WCL] BOSS ID query 所有副本BOSSID查询 https://wowpedia.fandom.com/wiki/DungeonEncounterID#Retail IDNameMapInstanceIDPatch227High Interrogator GerstahnBlackrock Depths230228Lord RoccorBlackrock Depths230229Houndmaster GrebmarBlackro…...
MySQL——事务
一、什么是事务? 事务(Transaction) 是数据库操作的最小逻辑单元,它由一组不可分割的SQL操作组成。事务的核心目标是确保多个操作要么全部成功,要么全部失败,从而维护数据的完整性。例如,银行转…...
spring Ai---向量知识库(一)
在一些垂直领域以及公司内部信息相关或者实时性相关的大模型应用,就无法直接使用chatGPT。 这个时候,向量知识库就进入了。 通过坐标向量最接近的即为匹配相关答案。 向量模型定义:将文档向量化,保证内容越相似的文本,…...
MACOS 上的 快捷指令怎么用,有哪些分享资源可以用
一、快捷指令的基本概念与历史 快捷指令(Shortcuts)是苹果生态中的自动化工具,最初以第三方应用Workflow(2014年推出)的形式出现,2017年被苹果收购后更名为Shortcuts,并深度集成到iOS、iPadOS和macOS系统中。从macOS Mojave(10.14)开始,快捷指令正式登陆Mac平台,并…...
最长子序列长度(LIS)--个数遍历的二分+贪心优化
B3637 最长上升子序列 - 洛谷 #include<bits/stdc.h> #include<string> using namespace std; #define N 100011 typedef long long ll; typedef pair<int,int> pii; int n; int g[N]; int dp[N]; int ma0; int main() { cin>>n; memset(g,0x3f,sizeo…...
RenderStage::runCameraSetUp
文章目录 RTTosg::Camera::_bufferAttachmentMapRenderStage::BufferComponent和RenderStage::_bufferAttachmentMapCamera::attach(BufferComponent buffer, GLenum internalFormat)Camera::attach(BufferComponent buffer, osg::Texture* texture.....Camera::attach(BufferC…...
突破速率瓶颈:毫米波技术如何推动 5G 网络迈向极限?
突破速率瓶颈:毫米波技术如何推动 5G 网络迈向极限? 引言 5G 网络的普及,已经让我们告别了“加载中”时代,实现了更快的数据传输、更低的延迟和更高的设备连接密度。而在 5G 技术的核心中,毫米波(mmWave&…...
前端面试真题集合(一)
一、Vue的响应式原理 Vue的响应式系统通过数据劫持和依赖追踪实现,核心流程如下: 数据劫持 • Vue 2.x:使用Object.defineProperty递归遍历数据对象,将属性转换为getter/setter,拦截属性的读取和修改操作。 • Vue 3.x:改用Proxy代理对象,支持动态属性添加和数组变化监听…...
聊聊Spring AI Alibaba的ElasticsearchDocumentReader
序 本文主要研究一下Spring AI Alibaba的ElasticsearchDocumentReader ElasticsearchDocumentReader community/document-readers/spring-ai-alibaba-starter-document-reader-elasticsearch/src/main/java/com/alibaba/cloud/ai/document/reader/es/ElasticsearchDocumentR…...
【网络技术_域名解析DNS】三、DNS 中间件实践应用与优化策略
一、DNS 中间件在典型行业的实践应用 1.1 金融行业:保障交易安全与服务稳定 金融行业对网络服务的安全性和稳定性要求极高,DNS 中间件在此领域发挥着不可替代的作用。以某银行线上支付系统为例,在 CentOS 7 环境下部署 DNS 中间件时&…...
Node.js 异步I/O与事件循环深度优化
Node.js 的核心魅力在于其异步、非阻塞I/O模型,这使得它在处理高并发、I/O密集型应用(如Web服务器、API网关、实时通信服务)时表现出色。然而,这种强大的能力并非凭空而来,它深深植根于其独特的**事件循环(…...
npm 常用操作和配置
一、npm 核心操作 1. 初始化项目 npm init # 交互式创建 package.json npm init -y # 跳过提问,直接生成默认 package.json2. 安装依赖 npm install <package> # 安装包到本地 node_modules(生产依赖) npm in…...