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

专题:Python实现贝叶斯线性回归与MCMC采样数据可视化分析2实例|附代码数据

全文链接:https://tecdat.cn/?p=43897
原文出处:拓端抖音号@拓端tecdat

封面

在数据科学领域,线性回归是拟合变量间线性关系的基础工具,但传统的Frequentist线性回归仅能提供参数的点估计,无法量化参数的不确定性——这在金融风险预测、工业设备状态监测等实际业务场景中往往不够。

在一次设备传感器数据与故障风险的线性拟合需求中,业务方不仅需要知道“传感器值每变化1单位,故障风险变化多少”,更需要了解这一影响程度的可信范围,以制定合理的维护阈值。正是基于这类实际需求,我们将贝叶斯方法引入线性回归,通过概率框架实现不确定性建模,并结合马尔可夫链蒙特卡洛(MCMC)采样解决后验分布无法解析求解的问题。

贝叶斯推断线性回归与R语言预测工人工资数据

本文内容源自过往项目技术沉淀与已通过实际业务校验,项目完整代码与数据已分享至交流社群。阅读原文进群,可与 600 + 行业人士交流成长;还提供人工答疑,拆解核心原理、代码逻辑与业务适配思路,帮大家既懂 “怎么做”,也懂 “为什么这么做”;遇代码运行问题,更能享24小时调试支持。

Python实现贝叶斯线性回归与MCMC Metropolis-Hastings采样分析

1. 引言

本文将从零构建贝叶斯线性回归的完整流程:先回顾Frequentist线性回归的核心理论,再引入贝叶斯更新原理,接着详解MCMC Metropolis-Hastings采样的实现逻辑,最后通过Python生成合成数据集(实际业务中的线性关系数据),完成建模与结果验证,并与Frequentist方法对比参数准确性。

2. 整体流程概览

本文的建模与分析脉络可通过以下流程图清晰呈现:

 

3. 线性回归理论基础

在引入贝叶斯方法前,先回顾Frequentist线性回归的核心内容,这是后续贝叶斯建模的基础。

3.1 参数模型与最小二乘

线性回归假设因变量(如销售额)与自变量(如广告投入)间存在线性关系,模型形式为:
y = β₁x + β₀ + ε
其中,β₁是斜率(自变量对因变量的影响程度),β₀是截距(自变量为0时的因变量基准值),ε是噪声(不可控的随机误差)。
下图展示了线性回归模型的拟合示例,红色直线即为拟合后的线性关系,散点代表实际数据点,直线通过最小化残差(数据点到直线的垂直距离)来贴合数据:

模型参数(β₁、β₀)的求解采用最小二乘法,即最小化残差平方和(RSS):
RSS = Σ(y_i - ŷ_i)²
其中y_i是实际值,ŷ_i是模型预测值(ŷ_i = β₁x_i + β₀)。下图可视化了模型参数与残差的关系,清晰标注了斜率β₁、截距β₀以及单个数据点的残差(实际值与预测值的差值):

最小二乘法的损失函数常用均方误差(MSE),即RSS除以样本量,其可视化如下(呈碗状曲线,曲线的最低点对应使损失最小的最优参数组合):

3.2 模型核心假设

Frequentist线性回归需满足5个关键假设,否则会影响参数估计的准确性,在实际业务数据建模中需逐一验证:

  1. 自变量无误差:自变量(如广告投入、传感器读数)的测量无偏差,非随机变量;
  2. 线性关系:因变量与自变量的关系是线性的(若为非线性,需通过特征变换转化为线性关系);
  3. 误差方差恒定:噪声ε的方差不随自变量变化(若方差随自变量增大而增大,需进行方差稳定变换);
  4. 误差独立性:不同样本的噪声ε互不相关(如时间序列数据需避免自相关);
  5. 无多重共线性:自变量间无冗余的线性关系(如“身高”与“体重”同时作为自变量时,需通过VIF值检测并消除共线性)。

4. 贝叶斯更新与贝叶斯线性回归

贝叶斯方法的核心是“用数据更新先验认知”,这一过程通过贝叶斯定理实现,也是贝叶斯线性回归的理论基础。

4.1 贝叶斯更新原理

贝叶斯定理的公式为:
P(参数|数据) = [P(数据|参数) × P(参数)] / P(数据)
各术语含义与实际业务场景对应如下:

  • 先验P(参数):建模前对参数的认知(如基于行业经验,假设“广告投入对销售额的影响斜率β₁”大概率在2-4之间);
  • 似然P(数据|参数):给定参数时,观测到当前数据的概率(反映参数对数据的解释能力,如某β₁值下,实际销售额与预测销售额的偏差越小,似然越大);
  • 证据P(数据):归一化常数,确保后验是合法的概率分布(MCMC采样中可忽略,因分子分母会抵消);
  • 后验P(参数|数据):结合先验与数据后,对参数的最终认知(如加入100条销售数据后,β₁的可信范围缩小为2.8-3.2,这是贝叶斯建模的核心目标)。

4.2 贝叶斯线性回归模型

Frequentist线性回归将参数(β₁、β₀、ε的方差σ²)视为固定值,而贝叶斯线性回归将其视为随机变量,通过后验分布描述其不确定性。模型形式调整为:
y ~ N(β₁x + β₀, σ²)
即因变量y服从以“线性预测值(β₁x + β₀)”为均值、σ²为方差的正态分布。
贝叶斯线性回归的核心是确定参数(β₁、β₀、σ²)的后验分布,需设定以下3个关键部分:

  1. 先验分布:本文为简化演示,对β₁、β₀、σ²均设定为正态分布(无信息先验或弱信息先验,避免先验过度主导数据,实际业务中可结合专家经验设定强信息先验);
  2. 似然函数:因y服从正态分布,似然函数为各样本正态概率密度的乘积(对数似然下可转化为求和,避免数值溢出);
  3. 后验分布:通过MCMC Metropolis-Hastings采样获取(因后验分布无解析解,需通过随机采样逼近,采样量越大,逼近越准确)。

5. MCMC Metropolis-Hastings采样原理

当后验分布复杂(如高维、非标准分布)时,无法直接计算,MCMC Metropolis-Hastings采样是解决这一问题的常用方法,尤其适用于贝叶斯线性回归的后验推断。

5.1 核心特性

  • Markov性:下一个参数样本仅依赖前一个样本,与更早的样本无关(降低采样复杂度,无需存储所有历史样本);
  • Chain(链):采样结果形成序列,前半段为“burn-in期”(样本不稳定,未收敛到后验分布,需丢弃),后半段为“平稳期”(样本服从后验分布,用于后续分析);
  • Monte Carlo(蒙特卡洛):通过随机采样逼近后验分布(采样量越大,样本的统计特性与后验分布越一致)。

5.2 采样步骤

  1. 初始化参数:随机设定初始参数值(如β₁=1、β₀=10、σ=3,初始值对最终平稳期样本影响极小);
  2. 生成提案参数:基于当前参数,通过提案分布(本文用正态分布,均值为当前参数,标准差控制步长)生成新参数;
  3. 计算接受概率:接受概率=min(1, 后验(提案参数)/后验(当前参数))(后验比=似然比×先验比,因证据抵消,无需计算);
  4. 接受/拒绝提案:生成0-1随机数,若小于接受概率则接受提案参数,否则保留当前参数(确保高后验概率的参数被更多采样);
  5. 迭代:重复步骤2-4,直至采样量足够(本文设为10000次迭代),丢弃burn-in期样本后,剩余样本即为后验分布的近似。

6. Python实现与结果分析

本节通过Python实现贝叶斯线性回归的完整流程,包括合成数据集生成、核心函数定义、MCMC采样、结果可视化与验证,所有代码均添加中文注释,便于理解和复现。

6.1 环境准备与核心函数定义

首先导入所需库(如numpy用于数值计算、matplotlib用于可视化、scipy用于统计分布)。

6.2 合成数据集生成

  • 真实参数:β₁=3(斜率,如广告投入每增加1单位,销售额增加3单位)、β₀=20(截距,如广告投入为0时,基础销售额为20单位)、σ=5(噪声标准差,反映不可控因素的影响);
  • 自变量x:0-30间的100个随机数(模拟实际业务中的自变量取值范围);
  • 因变量y:y=3x+20+正态噪声(均值0,标准差5)(模拟实际数据中的随机波动)。

得到合成数据与Frequentist拟合结果图,可见蓝色拟合线较好地捕捉了红色数据点的线性趋势,Frequentist估计的参数(β₁≈3、β₀≈20)接近真实值,为后续贝叶斯模型验证提供了基准:

6.3 贝叶斯线性回归MCMC采样

设定先验分布后,执行MCMC Metropolis-Hastings采样,获取参数的后验样本(即“结合先验与数据后,参数的可信取值集合”)。

6.3.1 先验分布设定

本文设定弱信息先验(避免先验过度影响数据,适用于“无明确专家经验”的业务场景):

  • β₁(斜率):正态分布N(5.0, 1.0²)(均值5,标准差1,覆盖真实值3的合理范围);
  • β₀(截距):正态分布N(18.0, 2.0²)(均值18,标准差2,覆盖真实值20的合理范围);
  • σ(噪声标准差):正态分布N(7.0, 1.0²)(均值7,标准差1,覆盖真实值5的合理范围)。
    先验分布的可视化代码与结果如下,直观展示建模前对参数的初始认知:
 
  1.  
     
  2.  
    add_plot_grid()
  3.  
    plt.tight_layout()
  4.  
    plt.show()
 
 

先验分布可视化结果如下,红色曲线代表参数的对数概率密度,曲线峰值对应参数的最可能取值(先验均值),曲线宽度反映先验的不确定性(标准差越大,不确定性越高):

6.3.2 MCMC采样执行

设定采样迭代次数为10000次(平衡采样效率与准确性),步长标准差为0.2(控制参数探索速度,步长过大会导致接受率过低,步长过小会导致采样效率低),执行采样并统计接受率(通常接受率在20%-50%为宜,本文接受率约16%,接近合理范围)。

运行代码后,采样接受率输出如下,接受率16.03%接近合理范围,说明采样参数设置(步长等)较为合适:
采样接受率:16.03%(合理范围:20%-50%,本文接近合理范围)
总迭代次数:10000,接受提案数:1603(接受的提案用于更新参数)

6.4 结果可视化与验证

6.4.1 参数采样链分析

采样链的平稳性是判断MCMC是否收敛的关键——需丢弃前半段的burn-in期样本(本文设为250个,即前250次迭代的样本未收敛,需删除),保留平稳期样本用于后续分析(平稳期样本服从后验分布,反映参数的可信取值)。

 
  1.  
    # 设定burn-in期样本数(前250个样本未收敛,需丢弃;可通过视觉观察调整)
  2.  
    burn_in = 250
  3.  
    stable_params = params_chain[burn_in:] # 平稳期样本(用于后续分析的有效样本)
  4.  
    # 可视化参数采样链(观察收敛性,判断burn-in期是否合理)
  5.  
    fig, axes = plt.subplots(3, 1, figsize=(12, 10))
 
 

采样链可视化结果如下,可见burn-in期后(250次迭代后),红色曲线趋于平稳(无明显上升/下降趋势),且参数值围绕真实值(绿色线)和Frequentist估计值(蓝色线)波动,说明采样已收敛,平稳期样本有效:


相关文章

相关文章

R语言用贝叶斯线性回归、贝叶斯模型平均 (BMA)来预测工人工资

原文链接:http://tecdat.cn/?p=24141


 
6.4.2 参数空间分布分析

通过散点图展示平稳期内β₁与β₀的联合分布(即“斜率与截距同时取某值的概率”),高密集区域即为参数的高概率区域(反映参数的可信组合),可直观看到参数的不确定性范围(密集区域越集中,参数不确定性越低)。

参数联合分布结果如下,可见平稳期样本(彩色点)集中在真实值(绿色星号)附近,形成高密集区域,且Frequentist估计值(蓝色方形)也落在该区域内,说明贝叶斯模型的参数后验分布准确捕捉了真实参数的位置,不确定性范围合理:

7. 结论

本文基于Python从零构建了贝叶斯线性回归的完整流程,通过MCMC Metropolis-Hastings采样解决了后验分布无法解析求解的问题,并通过合成数据集(模拟实际业务线性数据)验证了模型的准确性,主要结论与业务价值如下:

  1. 不确定性量化:贝叶斯线性回归相比Frequentist方法,不仅能提供参数的点估计,还能通过后验分布量化参数的不确定性(如β₁的可信范围为2.8-3.2),这对金融风险预测、设备故障阈值设定等需“风险把控”的业务场景至关重要;
  2. 采样方法有效性:MCMC Metropolis-Hastings采样是逼近复杂后验分布的实用工具,通过合理设置提案分布(正态分布)与burn-in期(250次迭代),可获得稳定的后验样本,采样结果收敛且准确;
  3. 结果可靠性:基于合成数据集的验证表明,贝叶斯模型的参数后验分布能准确逼近真实值,且Frequentist估计值落在高概率区域内,说明模型在“线性关系拟合”场景中可靠性高,可迁移至实际业务数据。
  4. 本文的建模思路与代码可直接应用于“自变量-因变量线性关联”的业务场景(如广告投入预测销售额、温度预测能耗、传感器数据预测设备状态等),如需完整代码、数据及更多业务案例,可加入交流社群与600+行业人士共同探讨实践。

Python实现贝叶斯线性回归参数估计及预测置信区间量化

在数据科学落地场景中,企业常需基于线性关系做预测——比如某互联网公司想通过“用户每日使用时长(x)”预测“月留存率(t)”,传统线性回归虽能给出“使用时长每增1小时,留存率增0.5%”的点估计,却无法回答“这个0.5%的可信范围是多少”。这种不确定性量化的缺失,会导致业务决策风险失控。我们曾为该企业提供咨询服务时,正是用贝叶斯线性回归解决了这一问题——通过概率框架将参数视为随机变量,结合历史数据更新认知,最终给出带置信区间的预测结果。
本文改编自项目的技术沉淀,聚焦“已知噪声精度”这一实用场景(如业务中通过长期数据已明确随机波动的方差),用共轭先验简化后验分布计算(避免复杂积分),通过Python实现参数后验更新与预测置信区间量化。

全文通过数据集(业务中的线性关联数据)验证方法有效性,从理论到代码逐步拆解,确保学生能理解并复现。本贝叶斯线性回归完整项目代码和数据文件已分享在交流社群,阅读原文进群和600+行业人士共同交流和成长

1 核心理论简化

1.1 目标变量建模

业务中需预测的目标变量(如留存率t),可表示为“输入x与参数w的函数”加随机噪声ε,即:
t = f(x,w) + ε
其中:

  • ε是不可控噪声(如用户突发行为),假设服从均值为0、精度为β(精度=1/方差)的正态分布,即ε~N(0,β⁻¹);
  • f(x,w)是线性模型(参数w线性组合),结合基函数φ_j(x)(如φ_n(x)=sin(nx),可处理非线性关系),简化为:
    f(x,w) = w₀ + w₁φ₁(x) + ... + w_{M-1}φ_{M-1}(x)
    令φ₀(x)=1(常数项),可写成向量形式:f(x,w) = w^Tφ(x)(w是参数向量,φ(x)是基函数向量)。
    最终,目标变量t的概率分布为:
    t ~ N(w^Tφ(x), β⁻¹)
    我们的核心目标是:基于历史数据D,求新输入x对应的t的预测分布p(t|x,D),而非仅求w的点估计。

1.2 共轭先验简化后验计算

传统贝叶斯计算中,后验p(w|D) = [p(D|w)p(w)]/p(D),但p(D)(证据)需积分计算,复杂度高。为此引入共轭先验——选择与似然函数形式一致的先验,使后验与先验形式相同,无需计算p(D)。
在“已知噪声精度β”场景下:

  1. 先验p(w):设为正态分布N(m₀, S₀),m₀是w的初始均值(如业务经验假设w₁≈0),S₀是初始协方差(反映先验不确定性);
  2. 似然p(D|w):基于t~N(w^Tφ(x), β⁻¹),独立样本的似然是各样本概率乘积;
  3. 后验p(w|D):仍为正态分布N(m_N, S_N),更新公式简化为:
  • 协方差逆:S_N⁻¹ = S₀⁻¹ + βΦ^TΦ(Φ是基函数矩阵,每行对应一个样本的φ(x));
  • 均值:m_N = S_N(S₀⁻¹m₀ + βΦ^Tt)(t是目标变量向量)。
    这种更新方式可实时迭代——新数据到来时,前一次后验作为新先验,无需重新计算历史数据,适合业务中增量建模。

2 Python实践实现

2.1 环境准备与关键函数

保留核心代码,改变量名(如a_0→true_intercept,a_1→true_slope)

2.2 数据集

基于已知真实参数生成数据,模拟业务中“输入-输出”的线性关联,噪声标准差已知(对应β=1/噪声方差):

 
  1.  
     
  2.  
    # 5. 初始化贝叶斯线性回归模型
  3.  
    blr_model = BayesianLinearReg(mean_prior, cov_prior, beta)
 
 

3 结果分析与可视化

3.1 业务数据与真实关系可视化

先看生成的业务数据(含噪声)与真实线性关系的对比,直观理解数据分布:

 
  1.  
    # 可视化业务数据与真实函数
  2.  
    blr_model.plot_data_pred(x_business, t_business, [true_intercept, true_slope])
 
 


上图中,蓝色散点是模拟的业务数据(如不同用户的“使用时长-留存率”),红色实线是真实线性关系。可见数据围绕真实关系波动,波动幅度由已知噪声决定——这和业务中“输入相同但输出有差异”的现象一致。

3.2 先验分布可视化(建模前的参数认知)

建模前,我们对参数w₀(截距)、w₁(斜率)的认知用先验分布表示,此时无业务数据,先验为弱信息正态分布:


上图中,颜色越深表示参数组合的概率越高,黑色十字是真实参数。可见先验分布中心在(0,0)(初始假设),真实参数虽不在中心,但有一定概率被覆盖——这符合“无业务经验时,不轻易排除合理参数范围”的原则。

3.3 1个样本的后验更新(数据如何改变认知)

用1个业务样本更新先验,观察后验分布变化——这模拟业务中“获取第一条数据后,参数认知如何调整”:


对比先验分布,1个样本后,后验分布更集中(不确定性降低),且中心向真实参数(黑色十字)靠近——这说明“哪怕一条数据,也能优化参数认知”。再看基于后验的参数采样线:

 
  1.  
    # 可视化1个样本后的后验采样线(5条线,反映参数不确定性)
  2.  
    blr_model.plot_data_pred(x_sample, t_sample, [true_intercept, true_slope], sample_lines=5)
 
 


上图中,黑色虚线是基于后验采样的参数对应的线,可见线条围绕真实函数(红线)波动,且在样本点附近更集中——这符合业务直觉:“数据点附近的预测更可信”。

3.4 预测置信区间(量化不确定性)

基于1个样本的后验,计算t的预测置信区间(±1σ),这是业务中最实用的输出——如“使用时长x=0时,留存率t的95%置信区间是[0.2,0.8]”:

 
  1.  
    # 可视化1个样本后的预测置信区间(±1σ)
  2.  
    blr_model.plot_data_pred(x_sample, t_sample, [true_intercept, true_slope], stdevs=1)
 
 


上图中,绿色线是±1σ置信区间,区间在样本点附近最窄(不确定性最低),远离样本点时变宽(不确定性升高)——这提示业务:“对无数据覆盖的输入,预测需谨慎”。

3.5 更多样本的后验更新(数据越多越可信)

增加样本量至2个、10个、1000个,观察后验分布和置信区间变化——模拟业务中“数据积累过程对参数认知的影响”:

3.5.1 2个样本的结果
 
  1.  
    # 重置模型(避免前序更新影响)
  2.  
    blr_model = BayesianLinearReg(mean_prior, cov_prior, beta)
  3.  
    sample_count = 2
  4.  
    x_sample = x_business[:sample_count]
  5.  
    t_sample = t_business[:sample_count]
  6.  
    # 可视化2个样本与真实函数
  7.  
    blr_model.plot_data_pred(x_sample, t_sample, [true_intercept, true_slope])
 
 

 
  1.  
    # 更新后验并可视化
  2.  
    blr_model.update_posterior(x_sample, t_sample)
  3.  
    blr_model.plot_param_contour(x_range=[-0.5,0.1], y_range=[0.2,0.8],
  4.  
    true_params=[true_intercept, true_slope], sample_count=sample_count)
 
 

 
  1.  
    # 可视化2个样本后的采样线与置信区间
  2.  
    blr_model.plot_data_pred(x_sample, t_sample, [true_intercept, true_slope], sample_lines=5, stdevs=1)
 
 

3.5.2 10个样本的结果
 
  1.  
    # 重置模型
  2.  
    blr_model = BayesianLinearReg(mean_prior, cov_prior, beta)
  3.  
    sample_count = 10
  4.  
    x_sample = x_business[:sample_count]
  5.  
    t_sample = t_business[:sample_count]
  6.  
    # 可视化10个样本与真实函数
  7.  
    blr_model.plot_data_pred(x_sample, t_sample, [true_intercept, true_slope])
 
 

 
  1.  
    # 更新后验并可视化
  2.  
    blr_model.update_posterior(x_sample, t_sample)
  3.  
    blr_model.plot_param_contour(x_range=[-0.4,-0.2], y_range=[0.4,0.6],
  4.  
    true_params=[true_intercept, true_slope], sample_count=sample_count)
 
 

 
  1.  
    # 可视化10个样本后的采样线与置信区间
  2.  
    blr_model.plot_data_pred(x_sample, t_sample, [true_intercept, true_slope], sample_lines=5, stdevs=1)
 
 

3.5.3 1000个样本的结果(全量业务数据)


从2个到1000个样本,后验分布越来越集中,最终几乎完全覆盖真实参数;置信区间越来越窄,采样线与真实函数几乎重合——这验证了“数据越多,参数认知越确定”的业务常识,也说明方法的有效性。

3.6 噪声与参数不确定性的区分

预测置信区间的方差由两部分组成:σ²_N = 1/β + φ(x)^T S_N φ(x),前者是数据噪声方差(不可消除),后者是参数不确定性方差(可通过增加数据降低)。可视化两者的对比:


上图中,红色虚线是纯噪声区间(不可消除),绿色实线是预测置信区间——1000个样本后,预测区间与噪声区间几乎重合,说明参数不确定性已降至最低,此时预测的不确定性主要来自数据本身的噪声(业务中需接受这一波动)。

3.7 基于预测分布生成业务数据

最后,基于训练好的模型生成新的业务数据,验证其与真实数据的一致性——这模拟“用模型生成符合业务规律的 synthetic 数据,辅助数据增强”:


上图中,红色散点是模型生成的数据,与蓝色原始业务数据分布一致,均围绕真实函数波动——这说明模型已完全学习到业务数据的线性规律,可用于数据增强(如业务数据量不足时,生成 synthetic 数据辅助建模)。

结论

本文基于Python实现了“已知噪声精度”场景下的贝叶斯线性回归,核心价值在于:

  1. 简化计算:用共轭先验(正态分布)避免复杂积分,后验更新仅需矩阵运算,适合业务工程落地;
  2. 量化不确定性:通过预测置信区间区分“数据噪声”与“参数不确定性”,为业务决策提供风险边界(如“留存率预测下限≥30%时,可投入推广”);
  3. 增量建模:后验可作为新先验,支持实时接收业务数据并更新参数,无需重新训练。
    该方法可直接迁移至用户留存预测、设备能耗预测等线性关联场景。如需完整代码、数据及更多业务案例,可加入交流社群,与600+行业人士共同探讨贝叶斯方法的实际应用。

相关文章:

专题:Python实现贝叶斯线性回归与MCMC采样数据可视化分析2实例|附代码数据

全文链接:https://tecdat.cn/?p=43897原文出处:拓端抖音号@拓端tecdat在数据科学领域,线性回归是拟合变量间线性关系的基础工具,但传统的Frequentist线性回归仅能提供参数的点估计,无法量化参数的不确定性——这在金融风险预测、工业设备状态监测等实际业务场景中往往不够…...

威联通NAS如何导入本地docker镜像

威联通NAS如何导入本地docker镜像 【前言】:有一段时间没有维护NAS docker了,笔记本电脑坏了更换后重新配置开发环境,也就没去折腾这些,有些命令忘记了,重新整理一下,输出驱动输入,还可能帮助到。欢迎大家一起友好讨论, 祝好: 【摘要】:本文主要围绕威联通NAS如何导入…...

2025.9.17

卷2选择 位运算 位运算的优先级很低,没有括号时运算顺序靠后。...

mysql库缺失

mysql库缺失libncurses.so.5和libtinfo.so.5 报错信息: mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory;mysql: error while loading shared libraries: libtinfo.so.5: cannot open shared obj…...

flask简单路由(视图函数)

简单路由(视图函数) 简单返回html @app.route(/tmp) def tmp_page(): # 函数名为tmp_page,对应url_for(tmp_page)return render_template(tmp.html)@app.route(/Custom_routing) def Custom_routing_page(): return render_template(/Custom_routing/index.html) # Custom…...

【学习笔记】拉格朗日插值

EZ、什么是拉格朗日插值? 众所周知,\(n+1\) 个点可以唯一确定一个 \(n\) 次多项式。 拉格朗日插值法要解决的就是给定 \(n+1\) 个点确定一个多项式 \(f(x)\),求出在自变量 \(x=k\) 时多项式的取值。 拉格朗日插值法的思想和 CRT 非常像——把每一个维度独立拆开来。 考虑对一…...

一种基于动作指令交互的动态活体检测技术,提升人脸识别安全性

在当今数字化时代,人脸识别技术已广泛应用于金融支付、门禁考勤、手机解锁等关键场景,其便捷性深受用户青睐。然而,随之而来的安全风险也日益凸显:高精度的照片、屏幕翻拍、甚至3D面具等攻击手段层出不穷,令传统的静态人脸识别技术面临严峻挑战。为了构筑更加坚固的安全防…...

[系统] Windows 已有office版本和visio不兼容的解决方案

最近IC相关论文想用VISIO来画图,但是遇到了如下痛点:VISIO软件的安装必须与现有Office一致,例如现有word等均为32bit,VISIO也必须使用32bit的安装包; 同为32/64bit安装时报错“Office 16 Click-to-Run Extensibility Component”,这种情况需要输入regedit,打开注册表,依…...

CF 2127F Hamed and AghaBalaSar

通过枚举破除限制,贡献拆分,等价思考,容斥怎么拆贡献又把自己拆乱了,我也是完蛋了。 首先考虑这个 \(f(a)\) 是什么。 发现跳(仅限第一个操作)的时候形如 \(x\to nxt(x)\to nxt(nxt(x))\to \cdots\),贡献就为 \((a_{nxt(x)} - a_x) + (a_{nxt(nxt(x))} - a_{nxt(x)})\)。…...

AT_agc055_b [AGC055B] ABC Supremacy

一眼为学了 trick 不会用。 这种题考虑钦定代表元两边往中间靠。 你思考一下发现任意一个 \(ABC, BCA, CAB\) 可以在序列里任意乱跑,于是你可以把起始状态和最终状态的这种东西全部提前,我们只需要看剩下的部分是否一样就好。 属于是脑电波题。...

“Sequential Thinking MCP Server 和codex等AI工具本身任务拆解功能对比

从你提供的文件内容来看,这个工具是一个名为“Sequential Thinking MCP Server”的工具,它用于通过结构化的思考过程解决问题。以下是对它与Codex或Claude Code CLI本身任务拆解功能的不同之处的分析: 功能定位Sequential Thinking MCP Server:专注于通过动态和反思性的思考…...

基于错误xsleak 悬空标记 运用css利用帧计数 -- Pure leak ASIS CTF 2025

基于错误xsleak 悬空标记 运用css利用帧计数 -- Pure leak ASIS CTF 2025pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courie…...

网易伏羲:当算法遇见社交,解码游戏世界的连接密码

日前,2025游戏安全与创新大会圆满召开,大会以“AI融合创新”与“全链路安全防护”为双主线,聚焦游戏策划与运营核心问题,深度解析AI与游戏结合的提效、玩法及体验升级路径;同时直面开发、运营、发行、支付、出海等阶段的关键挑战,涵盖作弊、合规、欺诈等议题,助力从业者…...

在 CentOS 7 上安装Nginx和配置http代理

1. 安装 EPEL 仓库 NGINX 不在 CentOS 的默认仓库中,因此首先需要安装 EPEL(Extra Packages for Enterprise Linux) 仓库。sudo yum install epel-release2. 安装 NGINX 通过 yum 包管理工具安装 NGINX。sudo yum install nginx3. 启动 NGINX 服务sudo systemctl start ngin…...

题解:P2624 [HNOI2008] 明明的烦恼

题解:P2624 [HNOI2008] 明明的烦恼 不会 $prufer$ 序列的请右转树的计数,先将 $prufer$ 序列掌握再做这题。 设有 $n$ 个节点,$deg_i$ 为每个节点的度数,由上题可得,此时可能的无根树的方案为: $$\frac{(n-2)!}{\prod_{i=1}^{n}(deg_i-1)!}$$ 但是这题只给了我们部分节点…...

在AI技术快速实现创想的时代,挖掘新需求成为核心竞争力——某知名DevOps学习平台需求洞察

该篇文章无摘要a.内容描述 该项目是一个结构化的DevOps学习资源,旨在帮助用户建立DevOps基础知识的系统化理解。核心功能定位是通过90天的学习计划,系统性地覆盖DevOps原则、流程和工具链的关键领域,包括DevOps基础、DevSecOps安全主题以及社区分享内容。 关键应用场景包括:…...

Windows Powershell 获取版本version

前言全局说明一、 1.源码 $PSVersionTable.PSVersion2.结果免责声明:本号所涉及内容仅供安全研究与教学使用,如出现其他风险,后果自负。参考、来源: https://www.cnblogs.com/music-liang/p/18813922 作者:悟透原文链接:https://www.cnblogs.com/wutou/p/19097392来源:博…...

XXL-JOB (1)

XXL-JOB (1)# 1 测试...

记录---Vue3对接UE,通过MQTT完成通讯

🧑‍💻 写在开头 点赞 + 收藏 === 学会🤣🤣🤣概述一个基于Vue3的实时视频流显示系统,主要用于连接和显示Unreal Engine (UE) 服务器的实时渲染内容。该页面集成了PixelStreaming技术和MQTT通信协议,提供了完整的视频流控制和交互功能。主要功能实时视频流显示:连接…...

《Real-Time Rendering》第一章 介绍

开篇实时渲染涉及在计算机上快速地生成图像,它是计算机图形学中最高交互性的领域。一张图像出现在屏幕上,观察者会行动或反应,这些反馈接着会影响后续要生成的图像。这种反应和渲染的循环发生在足够快的速率,让观察者看不到单独的图像,而是沉浸于一个动态的过程中。图像被…...

公益站Agent Router注册送200刀额度竟然是真的

昨天看到说Agent Router邀请注册送100美刀,我就点了别人的链接,使用github注册了一个,确实得到了额度。但是我去聊天那里,发现会有错误,以为这个不好用:但是今天测试了一下在Claude Code确实能用,而且速度也还可以!!感兴趣的朋友也快来试试吧!! 邀请链接:https://a…...

数据集中valid的作用

简单来说,valid(或 val)文件夹的存在是为了在模型训练过程中,定期、独立地评估模型的性能,以便进行模型调优、防止过拟合和选择最佳模型。它是机器学习工作流中至关重要的一环。 一般的数据集结构:1. Train(训练集)目的:这是模型“学习”所用的主要数据。模型通过反复…...

深入 RocketMQ 核心源码:从环境搭建到高可用设计的全方位解析

深入 RocketMQ 核心源码:从环境搭建到高可用设计的全方位解析 在分布式系统中,消息队列是实现异步通信、解耦服务与削峰填谷的关键组件,而 RocketMQ 凭借其高吞吐、低延迟与高可用的特性,成为众多企业的首选。本文将从源码角度出发,带大家一步步揭开 RocketMQ 的神秘面纱,…...

从零到顶会:NLP科研实战手册 - 实践

从零到顶会:NLP科研实战手册 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important;…...

单例模式

饿汉式(单例对象立即加载) 懒汉式(单例对象延时加载)...

apache修改默认位置

1、修改apache2.conf文件 <Directory 自定义目录/xx/xx/xx>   Options Indexes FollowSymLinks   AllowOverride None   Require all granted</Directory> 2、修改sites-available/000-default.conf文件 #DocumentRoot /var/www/html DocumentRoot 自定义目录…...

实用指南:YOLOv11的旋转目标检测改进-(扩展检测头支持旋转框预测,适配遥感场景)

实用指南:YOLOv11的旋转目标检测改进-(扩展检测头支持旋转框预测,适配遥感场景)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &q…...

肝不好能喝酒吗

一般肝脏不好的患者不建议喝酒,可能会加重不适症状,影响健康。 肝脏是人体的重要器官,负责处理和代谢许多物质。如果肝脏不健康或受损,饮酒可能会产生负面影响,并导致一系列不适症状,甚至加重肝脏疾病。因此肝脏不好的人群不建议饮酒,以免对身体健康造成不良影响。 酒精…...

ROS中如何将日志格式设置为行号的形式

export RCUTILS CONSOLE OUTPUT FORMAT=[{function name}:{line_number}]:{message}...

USB相关的sysfs文件(重要的)【转】

https://www.cnblogs.com/linhaostudy/p/18388902 阅读目录前言 目录内容详解常见的 USB 相关目录及其含义1. /sys/bus/usb 目录下的含义1.1 /sys/bus/usb/devices/usb11-0:1.0 1-1.1:1.0结构图 设备信息bDeviceClass version busnum & devnum dev bMaxPower idVendor &…...

25上第一周

《数学之美》第三章以“语言模型与中文信息处理”为核心,通过讲述统计语言模型如何破解中文分词、语音识别等难题,展示了数学在解决复杂问题时的优雅与力量。作者用“马尔可夫链”将看似无序的汉字序列转化为可计算的概率问题,这种化繁为简的思维令我得到了许多感悟。尤其当…...

深入解析:RxJava在Android中的应用

深入解析:RxJava在Android中的应用pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; …...

模型选择与配置说明

模型选择与配置说明(Detection / Recognition / Classification) 本文系统说明本项目在“检测(det)/识别(rec)/分类(cls)”三条子任务上的模型选择思路、备选方案对比、输入尺寸与性能取舍、部署格式(ONNX/MNN)、以及在 GUI 与代码层面的配置方式。目标是让读者理解“…...

梯度下降算法

Gradient Descent 梯度下降一、核心思想:一个最经典的比喻 想象一下,你是一个蒙着眼睛的登山者,被困在一片漆黑的山林中。你的目标是走到山谷的最低点(寻找最低点)。 你会怎么做?你会用脚感受一下周围的地面,找出哪个方向是“下坡”最陡的。然后朝着那个最陡的下坡方向迈…...

002_文本分类任务的问答

1、下面代码中,random_state作为随机种子作用是什么? train_x, valid_x, train_y, valid_y = model_selection.train_test_split(trainDF[text], trainDF[label], test_size=0.25, random_state=42)这段代码的作用是随机把数据分为两个部分 计算机的“随机数”其实是 伪随机数…...

车牌识别

车牌识别方案对比与实现总结(GUI 三方法:lock / test / rec2) 本文面向实际工程应用,系统梳理当前 GUI 集成的三种车牌识别方法(lock、test、rec2)的技术亮点、设计思路、模型选择、实现过程与关键代码,帮助快速理解与持续优化。目标是:在统一界面中,对比“传统候选+文…...

告别人工标注瓶颈!Reward-RAG:用 CriticGPT 打造更懂人类偏好的检索模型

Reward-RAG: Enhancing RAG with Reward Driven Supervision 全文摘要 本文介绍了一种名为Reward-RAG的新方法,旨在通过奖励驱动监督增强Retrieval-Augmented Generation(RAG)模型。与以往的RAG方法不同,该方法使用了CriticGPT训练了一个专门的奖励模型,并利用该模型生成合…...

在AI技术快速实现创想的时代,挖掘前端学习新需求成为关键——某知名编程教育平台需求洞察

本文分析了一个包含50个前端项目的编程学习资源,涵盖交互设计、动画效果和实用工具等多种类型,通过用户反馈发现了界面优化、功能扩展和教学改进等方面的潜在需求。a.内容描述 该项目是一个包含50个独立前端项目的编程学习资源,核心功能定位在于通过实际项目练习帮助开发者掌…...

Latex 中百分号怎么打

Latex 中百分号怎么打 由于 % 被用作注释符,所以前面 + \ 进行转义 \(\frac{285.5}{1-2.7\%}\)...

文件上传-条件竞争绕过

条件竞争原理: 条件竞争的逻辑是代码逻辑问题:当我们文件上传到服务器时,先对文件进行保存,然后对文件的后缀名进行判断,符合白名单的保存,不符合就删除,但在删除之前,有另一个对服务器发起的请求,要访问这个文件,那么就可能造成文件被读取和访问。这就是条件竞争。 …...

9.17 CSP-S模拟23/多校A层冲刺NOIP2024模拟赛19 改题记录

HZOJ 写在前面 连着三天吃三坨。本来想着今天大凶忌参加模拟赛然后没模拟赛挺好的,然后7:57临时通知加场,难道这就是大凶?好吧打就打吧,没想到真差点爆零。粗看没一道题可做怀疑自己的水平了然后赛后猛然醒悟是自己蠢如猪。其实这篇前面应该还有两篇,但是奈何这套改完得比…...

C++ 并发

C++ 并发编程是现代软件开发中的核心技术,主要用于利用多核处理器提升程序性能。C++11 及后续标准引入了完善的并发库(<thread>、<mutex>、<condition_variable> 等),使开发者能更安全地编写多线程程序。 1、std::thread std::thread 是 C++11 引入的线程…...

UML 5章

UML是建模语言,能够用面向对象的方法描述任何类型的系统 UML时序图:他通过对象之间发送消息的时间顺序显示多个对象之间的动态协作,重在对象之间的交互,强调时间顺序例UML状态图例...

《微服务事务管理》 - 教程

《微服务事务管理》 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; font-siz…...

python之socket udp服务器实现

import socket# 1. 创建 UDP Socket (SOCK_DGRAM 表示 UDP) receiver_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 2. 绑定地址和端口 receiver_address = (, 1883) # 端口号 9999 receiver_socket.bind(receiver_address)print("UDP 接收方已启动,等待…...

kylin SP3安装mysql 8.4.5

环境:OS:kylin SP3mysql:8.4.5 glibc2.17,建议安装glibc.2.28版本 查看系统glibc版本[root@localhost ~]# ldd --versionldd (GNU libc) 2.28Copyright (C) 2018 自由软件基金会。这是一个自由软件;请见源代码的授权条款。本软件不含任何没有担保;甚至不保证适销性或者适合某…...

Unity中是否可以禁用GC

1)Unity中可以禁用GC吗2)项目是URP管线,渲染模块CPU耗时高,经排查主要是Batches数过高,应怎样进一步排查和优化渲染批次这是第445篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习。 UWA社区主页:co…...

经典SQL语句大全

经典SQL语句大全一、基础1、说明:创建数据库CREATE DATABASE database-name2、说明:删除数据库drop database dbname3、说明:备份sql server--- 创建 备份数据的 deviceUSE masterEXEC sp_addumpdevice disk, testBack, c:\mssql7backup\MyNwind_1.dat--- 开始 备份BACKUP D…...

IvorySQL 与 deepin 完成兼容性认证,共创开源生态新篇章

近日,IvorySQL 与 deepin 操作系统成功完成了兼容性适配认证。这一里程碑式的成就标志着 IvorySQL 在国产操作系统生态中的进一步深化,为用户提供更稳定、高效的数据库解决方案。deepin 简介 深度操作系统 deepin 是一款以“简洁、美观、易用”著称的国产 Linux 发行版,拥有…...

在 Nginx 上搭建静态站点

1、新建站点的配置文件 vi /etc/nginx/conf.d/www.xxx.com.conf2、写入如下内容: server {listen 80;#listen [::]:80;server_name www.xxx.com; # 这里可以写你的域名,或者 _ 表示匹配所有 root /var/www/www.xxx.com; # 你的静态文件目录 index index.html index.htm;locat…...