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

Logistic Regression(逻辑回归)、Maximum Likelihood Estimatio(最大似然估计)

Logistic Regression(逻辑回归)、Maximum Likelihood Estimatio(最大似然估计)

  • 逻辑回归(Logistic Regression,LR)
    • 逻辑回归的基本思想
    • 逻辑回归模型
    • 逻辑回归的目标
      • 最大似然估计
      • 优化方法
    • 逻辑回归的损失函数:对数损失
    • 逻辑回归的应用
    • 逻辑回归的优缺点
      • 优点
      • 缺点
    • 逻辑回归的扩展
    • 逻辑回归的实现(Python 示例)
  • 最大似然估计 (Maximum Likelihood Estimation, MLE)
    • 最大似然估计的基本思想
      • 似然函数
      • 对数似然函数
      • 最大化对数似然
    • 通过最大似然估计估计参数
      • 示例 1:估计高斯分布的均值和方差
      • 示例 2:伯努利分布的最大似然估计
    • 最大似然估计的优点和局限
      • 优点
      • 局限
  • 参考资料

逻辑回归(Logistic Regression,LR)

逻辑回归(Logistic Regression) 是一种广泛应用于分类问题的统计方法,尤其用于二分类问题(即预测目标变量有两个类别)。尽管它的名字中带有“回归”二字,但它实际上是一种分类算法。逻辑回归通过对输入特征进行建模,输出一个概率值,表示某个类别的可能性。

逻辑回归的基本思想

逻辑回归试图找出一个合适的数学模型,将输入特征 X = ( x 1 , x 2 , … , x n ) X=(x_1, x_2, …, x_n) X=(x1,x2,,xn) 映射到目标标签 Y Y Y 上。对于二分类问题,目标是根据输入特征预测 Y = 1 Y=1 Y=1 Y = 0 Y=0 Y=0 的概率。

逻辑回归的核心是 逻辑函数(Logistic Function) 或者称为 Sigmoid 函数,它将任何实数映射到 [0, 1] 之间,从而可以解释为概率。

逻辑回归模型

假设输入特征 X = ( x 1 , x 2 , … , x n ) X=(x_1, x_2, …, x_n) X=(x1,x2,,xn) 和权重参数 w = ( w 1 , w 2 , … , w n ) w=(w_1, w_2, …, w_n) w=(w1,w2,,wn),逻辑回归模型的输出是通过一个线性组合加上偏置项,输入到一个 Sigmoid 函数中:
z = w 1 x 1 + w 2 x 2 + ⋯ + w n x n + b z = w_1 x_1 + w_2 x_2 + \dots + w_n x_n + b z=w1x1+w2x2++wnxn+b
然后,将 z z z 通过 Sigmoid 函数 σ ( z ) σ(z) σ(z) 转换为一个概率值:
P ( Y = 1 ∣ X ) = σ ( z ) = 1 1 + e − z P(Y = 1 \mid X) = \sigma(z) = \frac{1}{1 + e^{-z}} P(Y=1X)=σ(z)=1+ez1

其中, σ ( z ) σ(z) σ(z) 是 Sigmoid 函数,它将任何实数 z z z 映射到 (0, 1) 之间,表示一个类别的概率。 P ( Y = 1 ∣ X ) P(Y=1∣X) P(Y=1X) 就是预测样本属于类别1的概率。

  • 如果 P ( Y = 1 ∣ X ) > 0.5 P(Y=1∣X)>0.5 P(Y=1X)>0.5,则预测类别为 1;
  • 如果 P ( Y = 1 ∣ X ) ≤ 0.5 P(Y=1∣X)≤0.5 P(Y=1X)0.5,则预测类别为 0。

在这里插入图片描述

逻辑回归的目标

在逻辑回归中,我们的目标是通过训练数据来学习最优的权重参数 w 1 , w 2 , … , w n w_1, w_2, …, w_n w1,w2,,wn 和偏置项 b b b,使得模型能够准确地预测数据的类别。为此,我们使用最大似然估计(Maximum Likelihood Estimation, MLE)来估计这些参数。

最大似然估计

假设我们有 m m m 个训练样本,每个样本的输入为 X ( i ) X^{(i)} X(i),标签为 Y ( i ) Y^{(i)} Y(i),其中 i = 1 , 2 , … , m i = 1, 2, \dots, m i=1,2,,m

逻辑回归模型的似然函数是基于每个训练样本的预测概率和真实标签的结合。对于每个样本,预测的概率为 P ( Y = 1 ∣ X ( i ) ) P(Y = 1 \mid X^{(i)}) P(Y=1X(i)),因此整个训练集的似然函数为:
L ( w , b ) = ∏ i = 1 m P ( Y ( i ) ∣ X ( i ) ; w , b ) L(w, b) = \prod_{i=1}^{m} P(Y^{(i)} \mid X^{(i)}; w, b) L(w,b)=i=1mP(Y(i)X(i);w,b)

因为 Y ( i ) Y^{(i)} Y(i) 是 0 或 1,所以可以将似然函数写成:
L ( w , b ) = ∏ i = 1 m [ σ ( z ( i ) ) Y ( i ) ⋅ ( 1 − σ ( z ( i ) ) ) 1 − Y ( i ) ] L(w, b) = \prod_{i=1}^{m} \left[\sigma(z^{(i)})^{Y^{(i)}} \cdot (1 - \sigma(z^{(i)}))^{1 - Y^{(i)}} \right] L(w,b)=i=1m[σ(z(i))Y(i)(1σ(z(i)))1Y(i)]

为了方便优化,通常取对数似然函数(Log-Likelihood),得到:
ℓ ( w , b ) = ∑ i = 1 m [ Y ( i ) log ⁡ σ ( z ( i ) ) + ( 1 − Y ( i ) ) log ⁡ ( 1 − σ ( z ( i ) ) ) ] \ell(w, b) = \sum_{i=1}^{m} \left[Y^{(i)} \log \sigma(z^{(i)}) + (1 - Y^{(i)}) \log (1 - \sigma(z^{(i)})) \right] (w,b)=i=1m[Y(i)logσ(z(i))+(1Y(i))log(1σ(z(i)))]

目标是最大化对数似然函数 ℓ ( w , b ) \ell(w, b) (w,b),即找到使对数似然函数最大化的权重 w w w 和偏置项 b b b

优化方法

我们通常使用梯度下降法(Gradient Descent)来优化对数似然函数。梯度下降法通过计算损失函数(对数似然的负数)对模型参数的梯度来更新参数,以减小损失。

梯度下降更新规则为:
w j ← w j − α ∂ ∂ w j ℓ ( w , b ) w_j \leftarrow w_j - \alpha \frac{\partial}{\partial w_j} \ell(w, b) wjwjαwj(w,b)
b ← b − α ∂ ∂ b ℓ ( w , b ) b \leftarrow b - \alpha \frac{\partial}{\partial b} \ell(w, b) bbαb(w,b)

其中, α \alpha α 是学习率。

逻辑回归的损失函数:对数损失

由于逻辑回归是基于最大似然估计的,因此它的损失函数通常称为对数损失(Log-Loss)或交叉熵损失(Cross-Entropy Loss),公式如下:
L ( w , b ) = − 1 m ∑ i = 1 m [ Y ( i ) log ⁡ ( σ ( z ( i ) ) ) + ( 1 − Y ( i ) ) log ⁡ ( 1 − σ ( z ( i ) ) ) ] \mathcal{L}(w, b) = - \frac{1}{m} \sum_{i=1}^{m} \left[Y^{(i)} \log(\sigma(z^{(i)})) + (1 - Y^{(i)}) \log(1 - \sigma(z^{(i)})) \right] L(w,b)=m1i=1m[Y(i)log(σ(z(i)))+(1Y(i))log(1σ(z(i)))]

对数损失衡量的是预测的概率分布与真实标签之间的差距。损失函数的值越小,模型的预测越准确。

逻辑回归的应用

逻辑回归适用于以下场景:

  • 二分类问题:例如,电子邮件分类(垃圾邮件与非垃圾邮件)、医疗诊断(是否患病)、银行贷款申请(是否批准)等。
  • 多分类问题:通过多项式逻辑回归(Multinomial Logistic Regression)扩展,可以处理多类问题,常用于文本分类或图像分类。

逻辑回归的优缺点

优点

  • 简单易懂:逻辑回归是一种线性模型,易于理解和实现。
  • 高效:逻辑回归在训练数据量较小的情况下能表现得很好,计算速度较快。
  • 概率输出:它不仅提供类别预测,还提供每个类别的概率,这对于很多应用场景非常有用。
  • 可解释性强:模型参数(即权重)能够反映特征对预测结果的影响,便于进行模型解释。

缺点

  • 线性假设:逻辑回归假设特征和目标之间的关系是线性的。如果数据呈现非线性关系,逻辑回归可能无法很好地拟合数据。
  • 对异常值敏感:逻辑回归对异常值比较敏感,异常值可能会影响模型的性能。
  • 特征相关性问题:逻辑回归对特征之间的相关性较为敏感,强相关的特征可能会导致多重共线性问题。

逻辑回归的扩展

  • 多项式逻辑回归(Multinomial Logistic Regression):用于多分类问题,模型的输出不是一个概率,而是多个类别的概率分布。
  • 正则化(Regularization):为了防止过拟合,可以在逻辑回归中加入L1或L2正则化项。L1正则化能生成稀疏解,L2正则化可以避免过大权重的出现。

逻辑回归的实现(Python 示例)

使用 scikit-learn 库,可以非常方便地实现逻辑回归模型:

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
from sklearn.metrics import accuracy_score, classification_report# 加载鸢尾花数据集
data = load_iris()
X = data.data  # 特征数据
y = data.target  # 标签数据# 将标签转为二分类问题:1. "Setosa"(类别 0),2. 非 "Setosa"(类别 1)
y_binary = (y == 0).astype(int)# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y_binary, test_size=0.3, random_state=42)# 创建逻辑回归模型
model = LogisticRegression()# 训练模型
model.fit(X_train, y_train)# 打印训练后的模型参数
print(f"模型的权重 (w): {model.coef_}")
print(f"模型的偏置 (b): {model.intercept_}")# 用测试集进行预测
y_pred = model.predict(X_test)# 计算模型的准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"模型的准确率: {accuracy * 100:.2f}%")# 输出分类报告(精确率、召回率、F1分数等)
print("\n分类报告:")
print(classification_report(y_test, y_pred))

最大似然估计 (Maximum Likelihood Estimation, MLE)

最大似然估计(MLE) 是一种常用的统计方法,用于估计模型参数,使得在给定数据下,模型的概率最大化。简单来说,最大似然估计旨在找到最有可能生成观测数据的参数值。

MLE 是一种 参数估计方法,广泛应用于许多机器学习和统计建模中,尤其在 监督学习概率模型 中应用广泛。

主要作用是利用已知的样本结果,反推最有可能(最大概率)导致这样结果的参数值。

当“模型已定,参数未知”时,通过若干次试验,观察其结果,利用试验结果得到某个参数值能够使样本出现的概率为最大,则称为极大似然估计。

最大似然估计的基本思想

假设我们有一组观测数据,记为 X = { x 1 , x 2 , … , x n } X = \{x_1, x_2, \dots, x_n\} X={x1,x2,,xn},这些数据来自某个概率分布,该分布有一个参数 θ \theta θ。我们的目标是通过最大化 似然函数 来估计参数 θ \theta θ

具体来说,假设我们已知数据的分布类型(比如高斯分布、伯努利分布等),但我们并不知道分布的具体参数。最大似然估计就是通过寻找一个参数 θ \theta θ使得给定这个参数下,观测到的数据的概率最大

似然函数

给定数据集 X = { x 1 , x 2 , … , x n } X = \{x_1, x_2, \dots, x_n\} X={x1,x2,,xn} 和模型的参数 θ \theta θ似然函数(Likelihood Function)表示在给定参数 θ \theta θ 下,观察到数据的概率。假设数据集中的样本独立且同分布(i.i.d.),则似然函数可以表示为:
L ( θ ; X ) = P ( X ∣ θ ) = ∏ i = 1 n P ( x i ∣ θ ) L(\theta; X) = P(X \mid \theta) = \prod_{i=1}^{n} P(x_i \mid \theta) L(θ;X)=P(Xθ)=i=1nP(xiθ)

其中, P ( x i ∣ θ ) P(x_i \mid \theta) P(xiθ) 是在参数 θ \theta θ 下,样本 x i x_i xi 出现的概率。

对数似然函数

由于似然函数通常涉及乘法,计算起来可能会很复杂。为了解决这个问题,我们通常使用 对数似然函数,因为对数函数是单调递增的,因此最大化似然函数和最大化对数似然函数是等价的。对数似然函数为:
ℓ ( θ ; X ) = log ⁡ L ( θ ; X ) = ∑ i = 1 n log ⁡ P ( x i ∣ θ ) \ell(\theta; X) = \log L(\theta; X) = \sum_{i=1}^{n} \log P(x_i \mid \theta) (θ;X)=logL(θ;X)=i=1nlogP(xiθ)

对数似然函数将乘积转化为求和,计算更为简便。

最大化对数似然

最大似然估计的目标是找到一个参数值 θ ^ \hat{\theta} θ^,使得对数似然函数最大化,即:
θ ^ = arg ⁡ max ⁡ θ ℓ ( θ ; X ) \hat{\theta} = \arg\max_\theta \ell(\theta; X) θ^=argθmax(θ;X)

这就是最大似然估计的核心思想:通过找到参数 θ \theta θ 使得在该参数下,数据的对数似然值最大。

通过最大似然估计估计参数

示例 1:估计高斯分布的均值和方差

假设我们有一个来自高斯分布的数据集 X = { x 1 , x 2 , … , x n } X = \{x_1, x_2, \dots, x_n\} X={x1,x2,,xn},我们想通过最大似然估计来估计其 均值 μ \mu μ方差 σ 2 \sigma^2 σ2

高斯分布的概率密度函数为:
P ( x ∣ μ , σ 2 ) = 1 2 π σ 2 exp ⁡ ( − ( x − μ ) 2 2 σ 2 ) P(x \mid \mu, \sigma^2) = \frac{1}{\sqrt{2\pi \sigma^2}} \exp\left( -\frac{(x - \mu)^2}{2\sigma^2} \right) P(xμ,σ2)=2πσ2 1exp(2σ2(xμ)2)

根据似然函数的定义,数据集的似然函数为:
L ( μ , σ 2 ; X ) = ∏ i = 1 n 1 2 π σ 2 exp ⁡ ( − ( x i − μ ) 2 2 σ 2 ) L(\mu, \sigma^2; X) = \prod_{i=1}^{n} \frac{1}{\sqrt{2\pi \sigma^2}} \exp\left( -\frac{(x_i - \mu)^2}{2\sigma^2} \right) L(μ,σ2;X)=i=1n2πσ2 1exp(2σ2(xiμ)2)

对似然函数取对数得到对数似然函数:
ℓ ( μ , σ 2 ; X ) = ∑ i = 1 n [ − 1 2 log ⁡ ( 2 π σ 2 ) − ( x i − μ ) 2 2 σ 2 ] \ell(\mu, \sigma^2; X) = \sum_{i=1}^{n} \left[ -\frac{1}{2} \log(2\pi \sigma^2) - \frac{(x_i - \mu)^2}{2\sigma^2} \right] (μ,σ2;X)=i=1n[21log(2πσ2)2σ2(xiμ)2]

为了最大化对数似然函数,我们分别对 μ \mu μ σ 2 \sigma^2 σ2 求导,并令其为 0,得到最大似然估计的参数值。

  1. μ \mu μ 求导:
    ∂ ℓ ∂ μ = ∑ i = 1 n x i − μ σ 2 = 0 \frac{\partial \ell}{\partial \mu} = \sum_{i=1}^{n} \frac{x_i - \mu}{\sigma^2} = 0 μ=i=1nσ2xiμ=0
    解得:
    μ ^ = 1 n ∑ i = 1 n x i \hat{\mu} = \frac{1}{n} \sum_{i=1}^{n} x_i μ^=n1i=1nxi
    这就是样本均值的最大似然估计。

  2. σ 2 \sigma^2 σ2 求导:
    ∂ ℓ ∂ σ 2 = − n 2 σ 2 + 1 2 σ 4 ∑ i = 1 n ( x i − μ ) 2 = 0 \frac{\partial \ell}{\partial \sigma^2} = -\frac{n}{2\sigma^2} + \frac{1}{2\sigma^4} \sum_{i=1}^{n} (x_i - \mu)^2 = 0 σ2=2σ2n+2σ41i=1n(xiμ)2=0
    解得:

σ 2 ^ = 1 n ∑ i = 1 n ( x i − μ ^ ) 2 \hat{\sigma^2} = \frac{1}{n} \sum_{i=1}^{n} (x_i - \hat{\mu})^2 σ2^=n1i=1n(xiμ^)2
这就是样本方差的最大似然估计。

示例 2:伯努利分布的最大似然估计

假设我们有一组来自 伯努利分布 的观测数据。伯努利分布的概率质量函数为:
P ( x ∣ p ) = p x ( 1 − p ) 1 − x P(x \mid p) = p^x (1 - p)^{1 - x} P(xp)=px(1p)1x

其中, x ∈ { 0 , 1 } x \in \{0, 1\} x{0,1} p p p 是成功的概率。

假设我们有 n n n 个独立的伯努利试验观测值 X = { x 1 , x 2 , … , x n } X = \{x_1, x_2, \dots, x_n\} X={x1,x2,,xn},我们要估计参数 p p p。则似然函数为:
L ( p ; X ) = ∏ i = 1 n p x i ( 1 − p ) 1 − x i L(p; X) = \prod_{i=1}^{n} p^{x_i} (1 - p)^{1 - x_i} L(p;X)=i=1npxi(1p)1xi

对其取对数得到对数似然函数:
ℓ ( p ; X ) = ∑ i = 1 n [ x i log ⁡ p + ( 1 − x i ) log ⁡ ( 1 − p ) ] \ell(p; X) = \sum_{i=1}^{n} \left[ x_i \log p + (1 - x_i) \log(1 - p) \right] (p;X)=i=1n[xilogp+(1xi)log(1p)]

最大化对数似然函数,求导并令其为 0:
∂ ℓ ∂ p = ∑ i = 1 n x i p − 1 − x i 1 − p = 0 \frac{\partial \ell}{\partial p} = \sum_{i=1}^{n} \frac{x_i}{p} - \frac{1 - x_i}{1 - p} = 0 p=i=1npxi1p1xi=0

解得:
p ^ = 1 n ∑ i = 1 n x i \hat{p} = \frac{1}{n} \sum_{i=1}^{n} x_i p^=n1i=1nxi

这就是样本中 1 的比例的最大似然估计。

最大似然估计的优点和局限

优点

  • 一致性:随着样本数量 n n n 的增加,最大似然估计趋近于真实的参数值(在大样本下是无偏的)。
  • 有效性:MLE 是在满足正则条件下具有最小方差的估计量(在大样本下)。
  • 广泛适用:最大似然估计可以用于各种类型的概率分布,不仅限于常见的分布(如高斯分布、伯努利分布等)。

局限

  • 计算复杂度高:当样本量大或分布复杂时,最大似然估计的计算可能非常复杂,需要使用数值优化方法。
  • 模型假设的依赖性:MLE 假设我们知道数据的分布类型,如果选择了错误的模型分布,估计结果可能会偏差。
  • 需要大量数据:对于小样本数据,最大似然估计可能会导致过拟合,或者估计不准确。

参考资料

Simplifying Logistic Regression — A Beginner’s Guide with a Real-world Practical Example

【五分钟机器学习】机器分类的基石:逻辑回归Logistic Regression

最大似然估计(通俗讲解)

相关文章:

Logistic Regression(逻辑回归)、Maximum Likelihood Estimatio(最大似然估计)

Logistic Regression(逻辑回归)、Maximum Likelihood Estimatio(最大似然估计) 逻辑回归(Logistic Regression,LR)逻辑回归的基本思想逻辑回归模型逻辑回归的目标最大似然估计优化方法 逻辑回归…...

Vue文字转语音实现

在开发流程中,面对语音支持的需求,小规模语音内容或许可以通过预处理后播放来轻松应对,但当涉及大量语音时,这一方法就显得繁琐低效了。为此,智慧的开发者们总能找到便捷的解决方案——利用Web技术实现语音播放&#x…...

Docker快速部署RabbitMq

在外网服务器拉取镜像 docker pull arm64v8/rabbitmq:3.8.9-management或者拉去我的服务器的 docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/linux_arm64_rabbitmq:3.8.9-management重新命名 docker tag registry.cn-hangzhou.aliyuncs.com/qiluo-images/lin…...

glog在vs2022 hello world中使用

准备工作 设置dns为阿里云dns 223.5.5.5,下载cmake,vs2022,git git clone https://github.com/google/glog.git cd glog mkdir build cd build cmake .. 拷贝文件 新建hello world并设置 设置预处理器增加GLOG_USE_GLOG_EXPORT;GLOG_NO_AB…...

[241129] Docker Desktop 4.36 发布:企业级管理功能、WSL 2 增强 | Smile v4.0.0 发布

目录 Docker Desktop 4.36 发布:企业级管理功能、WSL 2 和 ECI 增强Smile v4.0.0 发布!Java 机器学习库迎来重大升级 Docker Desktop 4.36 发布:企业级管理功能、WSL 2 和 ECI 增强 Docker Desktop 4.36 带来了强大的更新,简化了…...

CentOS使用chrony服务进行时间同步源设置脚本

CentOS使用chrony服务进行时间同步源设置脚本 #!/bin/bash# Created: 2024-11-26 # Function: Check and Set OS time sync source to 10.0.11.100 # FileName: centos_set_time_source_to_ad.sh # Creator: Anster # Usage: # curl http://webserver-ip/scripts/centos_set…...

Git仓库迁移到远程仓库(源码、分支、提交)

单个迁移仓库 一、迁移仓库 1.准备工作 > 手动在电脑创建一个临时文件夹,CMD进入该目录 > 远程仓库上创建一个同名的空仓库 2.CMD命令:拉取旧Git仓库(包含提交、分支、源码) $ git clone --bare http://git.domain.cn/…...

【算法刷题指南】优先级队列

🌈个人主页: 南桥几晴秋 🌈C专栏: 南桥谈C 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据…...

使用pymupdf提取PDF文档中的文字和其颜色

最近我在捣鼓一个PDF文件,想把它里面的文字和文字颜色给提取出来。后来发现有个叫pymupdf的库能搞定这事儿。操作起来挺简单的,pymupdf的示例文档里就有现成的代码可以参考。 how-to-extract-text-with-color 我本地的测试代码如下: impor…...

贪心算法题

0简介 0.1什么是贪心算法 贪心算法是用贪婪(鼠目寸光)的角度,找到解决问题的最优解 贪心策略:(从局部最优 --> 整体最优) 1把解决问题的过程分为若干步; 2解决每一个问题时,都选择当前“看上去”最优的解法; 3“…...

Python 3 教程第33篇(MySQL - mysql-connector 驱动)

Python MySQL - mysql-connector 驱动 MySQL 是最流行的关系型数据库管理系统,如果你不熟悉 MySQL,可以阅读我们的 MySQL 教程。 本章节我们为大家介绍使用 mysql-connector 来连接使用 MySQL, mysql-connector 是 MySQL 官方提供的驱动器。…...

23种设计模式之外观模式

目录 1. 简介2. 代码2.1 SelectFoodService (选择食品)2.2 PayService (支付服务)2.3 TakeService (制作服务)2.4 OrderService (下单服务)2.5 Food (食品)2.6 TackingSystem (外观类)2.7 Test (测试类) 3. 优缺点3. 总结 1. 简介…...

GateWay使用手册

好的&#xff0c;下面是优化后的版本。为了提高可读性和规范性&#xff0c;我对内容进行了结构化、简化了部分代码&#xff0c;同时增加了注释说明&#xff0c;便于理解。 1. 引入依赖 在 pom.xml 中添加以下依赖&#xff1a; <dependencies><!-- Spring Cloud Gate…...

MySQL1.0

1.数据库的三大范式 范式是为了使数据库设计更加合理&#xff0c;规范&#xff0c;减少数据冗余和数据不一致等问题指定的一系列规则。 第一范式&#xff1a;第一范式要求数据表中的每一列都是不可分割的原子数据项。例如&#xff1a;有一个学生信息表&#xff0c;包含 “学生…...

IDEA使用HotSwapHelper进行热部署

目录 前言JDK1.8特殊准备DECVM安装插件安装与配置参考文档相关下载 前言 碰到了一个项目&#xff0c;用jrebel启动项目时一直报错&#xff0c;不用jrebel时又没问题&#xff0c;找不到原因&#xff0c;又不想放弃热部署功能 因此思考能否通过其他方式进行热部署&#xff0c;找…...

简单web项目自定义部署Dockerfile

本意就是弄清楚如何做web自定义项目的镜像。 基础镜像是java:8u261-jdk&#xff0c;其中java路径为/opt/java webdemo1.0.0.1-SNAPSHOT.jar文件里面已经包含了lib文件。 可以设置PATH也可以不设置&#xff0c;但是建议设置JAVA_HOME FROM swr.cn-north-4.myhuaweicloud.com…...

基础Web安全|SQL注入

基础Web安全 URI Uniform Resource Identifier&#xff0c;统一资源标识符&#xff0c;用来唯一的标识一个资源。 URL Uniform Resource Locator&#xff0c;统一资源定位器&#xff0c;一种具体的URI&#xff0c;可以标识一个资源&#xff0c;并且指明了如何定位这个资源…...

SpringBoot -拦截器Interceptor、过滤器 Filter 及设置

Spring Boot拦截器&#xff08;Interceptor&#xff09;的概念 - 在Spring Boot中&#xff0c;拦截器是一种AOP的实现方式。它主要用于<font style"color:#DF2A3F;">拦截请求</font>&#xff0c;在请求处理之前和之后执行特定的代码逻辑。与过滤器不同的…...

C++小问题

怎么分辨const修饰的是谁 是限定谁不能被改变的&#xff1f; 在C中&#xff0c;const关键字的用途和位置非常关键&#xff0c;它决定了谁不能被修改。const可以修饰变量、指针、引用等不同的对象&#xff0c;并且具体的作用取决于const的修饰位置。理解const的规则能够帮助我们…...

avcodec_alloc_context3,avcodec_open2,avcodec_free_context,avcodec_close

avcodec_alloc_context3 是创建编解码器上下文&#xff0c;需要使用 avcodec_free_context释放 需要使用avcodec_free_context 释放 /** * Allocate an AVCodecContext and set its fields to default values. The * resulting struct should be freed with avcodec_free_co…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

C++.OpenGL (14/64)多光源(Multiple Lights)

多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时&#xff0c;显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...