极大似然估计、最大后验估计、贝叶斯估计

机器学习笔记

第一章 机器学习简介
第二章 感知机
第三章 支持向量机
第四章 朴素贝叶斯分类器
第五章 Logistic回归
第六章 线性回归和岭回归
第七章 多层感知机与反向传播【Python实例】
第八章 主成分分析【PCA降维】
第九章 隐马尔可夫模型
第十章 奇异值分解
第十一章 熵、交叉熵、KL散度
第十二章 什么是范数【向量范数、矩阵范数】
第十三章 熵、交叉熵、KL散度
第十四章 极大似然估计、最大后验估计、贝叶斯估计


文章目录

  • 机器学习笔记
  • 一、贝叶斯公式
  • 二、先验后验
    • 1 定义
    • 2 共轭先验
  • 三、极大似然估计(MLE)
  • 四、最大后验概率估计(MAP)
  • 五、贝叶斯估计
  • 参考资料


本节我们介绍统计学中常用的三种参数估计方法:

  • 极大似然估计(MLE)是统计学中常用的参数估计方法,它基于观测数据,寻找能够最大化给定数据的观测概率(似然函数)的参数值。
  • 最大后验估计(MAP)是贝叶斯统计学中的一种方法,结合了观测数据和先验信息,通过贝叶斯定理计算后验概率,并寻找能最大化后验概率的参数值。
  • 贝叶斯估计是一种基于完全的贝叶斯框架的参数估计方法,通过计算参数的后验分布来进行参数估计,提供了对参数估计的完整概率分布信息。

一、贝叶斯公式

首先我们介绍回顾一下概率论中的几个常用公式.

  1. 条件概率:

P ( A ∣ B ) = P ( A , B ) P ( B ) P(A \mid B)=\frac{P(A, B)}{P(B)} P(AB)=P(B)P(A,B)

​ 转换为乘法形式:
P ( A , B ) = P ( B ) × P ( A ∣ B ) = P ( A ) × P ( B ∣ A ) P(A, B)=P(B) \times P(A \mid B)=P(A) \times P(B \mid A) P(A,B)=P(B)×P(AB)=P(A)×P(BA)

  1. 全概率公式
    如果事件 A 1 , A 2 , A 3 , … , A n A_{1}, A_{2}, A_{3}, \ldots, A_{n} A1,A2,A3,,An 构成一个完备事件组, 即它们两两互不相容(互斥), 其和为 全集; 并且 P ( A i ) P\left(A_{i}\right) P(Ai) 大于 0 , 则对任意事件 B B B
    P ( B ) = P ( B ∣ A 1 ) P ( A 1 ) + … + P ( B ∣ A n ) P ( A n ) = ∑ i = 1 n P ( B ∣ A i ) P ( A i ) P(B)=P\left(B \mid A_{1}\right) P\left(A_{1}\right)+\ldots+P\left(B \mid A_{n}\right) P\left(A_{n}\right)=\sum_{i=1}^{n} P\left(B \mid A_{i}\right) P\left(A_{i}\right) P(B)=P(BA1)P(A1)++P(BAn)P(An)=i=1nP(BAi)P(Ai)

​ 上面的公式称为全概率公式。全概率公式是对复杂事件 A A A 的概率求解问题转化为了在不同情况下发 生的 简单事件的概率的求和问题。

  1. 贝叶斯公式
    由条件概率的乘法形式可得:

P ( A ∣ B ) = P ( B ∣ A ) P ( B ) × P ( A ) P(A \mid B)=\frac{P(B \mid A)}{P(B)} \times P(A) P(AB)=P(B)P(BA)×P(A)

二、先验后验

1 定义

在对一个问题进行研究时, X X X是我们的数据样本, θ \theta θ是模型的参数,则此时贝叶斯公式如下:
P ( θ ∣ X ) = P ( X ∣ θ ) P ( θ ) P ( X ) P(\theta \mid X)=\frac{P(X \mid \theta) P(\theta)}{P(X)} P(θX)=P(X)P(Xθ)P(θ)
每一项的表示如下:
posterior  = likehood  × prior  evidence  \text { posterior }=\frac{\text { likehood } \times \text { prior }}{\text { evidence }}  posterior = evidence  likehood × prior 

  • posterior: 通过样本X得到参数 θ \theta θ 的概率, 也就是后验概率.
  • likehood:通过参数 θ \theta θ 得到样本X的概率, 似然函数, 通常就是我们的数据集的表现.
  • prior:参数 θ \theta θ 的先验概率, 一般是根据人的先验知识来得出的。比如人们倾向于认为抛硬币实验会符合先验分布: beta分布。当我们选择beta分布的参数 α = β = 0.5 \alpha=\beta=0.5 α=β=0.5 时, 代表人们认为抛硬币得到正反面的概率都是 0.5 0.5 0.5.
  • evidence: p ( X ) = ∫ p ( X ∣ θ ) p ( θ ) d θ p(X)=\int p(X \mid \theta) p(\theta) d \theta p(X)=p(Xθ)p(θ)dθ, 样本X发生的概率, 是各种 θ \theta θ 条件下发生的概率的积分.

2 共轭先验

在贝叶斯统计中,如果后验分布与先验分布属于同类,则先验分布与后验分布被称为共轭分布,而先验分布被称为似然函数的共轭先验。下表是一些常见概率分布的先验与后验:

共轭

三、极大似然估计(MLE)

最大似然估计,英文为Maximum Likelihood Estimation,简写为MLE,也叫极大似然估计,是用来估计概率模型参数的一种方法。

极大似然估计的核心思想是: 认为当前发生的事件是概率最大的事件。因此就可以给定的数据集, 使得该数据集发生的概率最大来求得模型中的参数。似然函数如下:
L ( X ∣ θ ) = ∏ x 1 x n p ( x i ∣ θ ) L(X \mid \theta)=\prod_{x_1}^{x_n} p(x_i \mid \theta) L(Xθ)=x1xnp(xiθ)为了便于计算, 对似然函数两边取对数, 生成新的对数似然函数(因为对数函数是单调增函数, 因此求似然函数最大化就可以转换成对数似然函数最大化):
log ⁡ L ( X ∣ θ ) = log ⁡ ∏ x 1 x n p ( x i ∣ θ ) = ∑ x 1 x n log ⁡ p ( x i ∣ θ ) \log L(X \mid \theta)=\log\prod_{x_1}^{x_n} p(x_i \mid \theta)=\sum_{x_1}^{x_n} \log p(x_i \mid \theta) logL(Xθ)=logx1xnp(xiθ)=x1xnlogp(xiθ)求对数似然函数最大化, 可以通过导数为 0 来求解。

:

以抛硬币为例,假设我们有一枚硬币,现在要估计其正面朝上的概率 θ。为了对 θ进行估计,我们进行了10次实验(独立同分布,i.i.d.),这组实验记为 X = x 1 , x 2 … , x 10 X = x_1,x_2… ,x_{10} X=x1,x2,x10,其中正面朝上的次数为6次,反面朝上的次数为4次,结果为 ( 1 , 0 , 1 , 1 , 0 , 0 , 0 , 1 , 1 , 1 ) 。
p ( x i = 1 ∣ θ ) = θ p ( x i = 0 ∣ θ ) = 1 − θ p(x_i=1 \mid \theta)=\theta\qquad p(x_i=0 \mid \theta)=1-\theta p(xi=1θ)=θp(xi=0θ)=1θ
则可以得到似然函数如下:

L ( X ∣ θ ) = ∏ i = 0 10 p ( x i ∣ θ ) = θ 6 ( 1 − θ ) 4 L(X \mid \theta)=\prod_{i=0}^{10} p(x_i \mid \theta)=\theta^6(1-\theta)^4 L(Xθ)=i=010p(xiθ)=θ6(1θ)4

则可通过求导得到 L ( X ∣ θ ) L(X|\theta) L(Xθ)最大时 θ \theta θ的值.其对数似然函数为
f = log ⁡ L ( X ∣ θ ) = 6 log ⁡ θ + 4 log ⁡ ( 1 − θ ) f=\log L(X|\theta)=6\log \theta+4\log(1-\theta) f=logL(Xθ)=6logθ+4log(1θ)
∇ f = 0 \nabla f=0 f=0,可得 θ = 0.6 \theta=0.6 θ=0.6,可以看到通过MLE得到的结果和频率近似概率的结果一致.当实验次数趋于 ∞ \infty 时, θ → 1 2 \theta\to\frac12 θ21.

四、最大后验概率估计(MAP)

最大后验概率估计,英文为Maximum A Posterior Estimation,简写为MAP。最大似然估计认为使似然函数 P ( X ∣ θ ) P(X \mid \theta) P(Xθ) 最大的参数 θ \theta θ 即为最好的 θ \theta θ, 此时最大似然估计是将 θ \theta θ 看作固定的值, 只是其值未知;最大后验概率分布认为 θ \theta θ 是一个随机变量, 即 θ \theta θ 具有某种概率分布, 称为先验分布, 求解时除了要考虑似然函数 P ( X ∣ θ ) P(X \mid \theta) P(Xθ) 之外, 还要考虑 θ \theta θ 的先验分布 P ( θ ) P(\theta) P(θ), 因此其认为使 P ( X ∣ θ ) P ( θ ) P(X \mid \theta) P(\theta) P(Xθ)P(θ) 取最大值的 θ \theta θ 就是最好的 θ \theta θ 。 最大后验概率估计的公式表示: arg ⁡ max ⁡ θ ⁡ P ( θ ∣ X ) = arg ⁡ max ⁡ θ ⁡ P ( X ∣ θ ) P ( θ ) P ( X ) ∝ arg ⁡ max ⁡ θ ⁡ P ( X ∣ θ ) P ( θ ) . \operatorname{\arg\max_{\theta}} P(\theta \mid X)=\operatorname{\arg\max_{\theta}} \frac{P(X \mid \theta) P(\theta)}{P(X)} \propto \operatorname{\arg\max_{\theta}} P(X \mid \theta) P(\theta). argθmaxP(θX)=argθmaxP(X)P(Xθ)P(θ)argθmaxP(Xθ)P(θ).

  • 此时要最大化的函数变为 P ( X ∣ θ ) P ( θ ) P(X \mid \theta) P(\theta) P(Xθ)P(θ), 由于 X的先验分布 P(X)是固定的 (可通过分析数据获得, 其实我们也不关心 X X X 的分布, 我们关心的是 θ \theta θ )
  • 最大后验概率估计可以看作是正则化的最大似然估计, 当然机器学习或深度学习中的正则项通常是加法, 而在最大后验概率估计中采用的是乘法, P ( θ ) P(\theta) P(θ) 是正则项。在最大似然估计中, 由于认为 θ \theta θ 是固定的, 因此 P ( θ ) = 1 P(\theta)=1 P(θ)=1

:

在抛硬币的例子中, 通常认为 θ = 0.5 \theta=0.5 θ=0.5 的可能性最大, 因此我们用均值为 0.5 0.5 0.5, 方差为 0.1 0.1 0.1 的高斯分布来描述 θ \theta θ先验分布, 当然也可以使用其它的分布来描述 θ \theta θ 的先验分布。 θ \theta θ 的先验分布为:
P ( θ ) = 1 2 π σ e − ( θ − μ ) 2 2 σ 2 = 1 10 2 π e − 50 ( θ − 0.5 ) 2 P(\theta)=\frac{1}{\sqrt{2 \pi} \sigma} e^{-\frac{(\theta-\mu)^{2}}{2 \sigma^{2}}}=\frac{1}{10 \sqrt{2 \pi}} e^{-50(\theta-0.5)^{2}} P(θ)=2π σ1e2σ2(θμ)2=102π 1e50(θ0.5)2

在最大似然估计中, 已知似然函数为 P ( X ∣ θ ) = θ 6 ( 1 − θ ) 4 P(X \mid \theta)=\theta^{6}(1-\theta)^{4} P(Xθ)=θ6(1θ)4, 因此:
P ( X ∣ θ ) P ( θ ) = θ 6 × ( 1 − θ ) 4 × 1 10 2 π × e − 50 ( θ − 0.5 ) 2 P(X \mid \theta) P(\theta)=\theta^{6} \times(1-\theta)^{4} \times \frac{1}{10 \sqrt{2 \pi}} \times e^{-50(\theta-0.5)^{2}} P(Xθ)P(θ)=θ6×(1θ)4×102π 1×e50(θ0.5)2
转换为对数函数:
ln ⁡ ( P ( X ∣ θ ) P ( θ ) ) = ln ⁡ ( θ 6 × ( 1 − θ ) 4 × 1 10 2 π × e − 50 ( θ − 0.5 ) 2 ) \ln (P(X \mid \theta) P(\theta))=\ln \left(\theta^{6} \times(1-\theta)^{4} \times \frac{1}{10 \sqrt{2 \pi}} \times e^{-50(\theta-0.5)^{2}}\right) ln(P(Xθ)P(θ))=ln(θ6×(1θ)4×102π 1×e50(θ0.5)2)
ln ⁡ ( P ( X ∣ θ ) P ( θ ) ) ′ = 0 \ln (P(X \mid \theta) P(\theta)) \prime=0 ln(P(Xθ)P(θ))=0, 可得:
100 θ 3 − 150 θ 2 + 40 θ + 6 = 0 100 \theta^{3}-150 \theta^{2}+40 \theta+6=0 100θ3150θ2+40θ+6=0
由于 0 ≤ θ ≤ 1 0 \leq \theta \leq 1 0θ1, 解得: θ ^ ≈ 0.529 \hat{\theta} \approx 0.529 θ^0.529 .可以看到MAP得到的估计值比MLE更准确,因为MAP用了先验的信息.

五、贝叶斯估计

贝叶斯估计是最大后验估计的进一步扩展,贝叶斯估计同样假定θ是一个随机变量,但贝叶斯估计并不是直接估计出θ的某个特定值,而是估计θ的分布,并且在贝叶斯估计中,先验分布 P(X)是不可忽略的,这是贝叶斯估计与最大后验概率估计不同的地方。
贝叶斯公式:
P ( θ ∣ X ) = P ( X ∣ θ ) P ( θ ) P ( X ) P(\theta \mid X)=\frac{P(X \mid \theta) P(\theta)}{P(X)} P(θX)=P(X)P(Xθ)P(θ)在连续型随机变量中, 由于 P ( X ) = ∫ Θ P ( X ∣ θ ) P ( θ ) d θ P(X)=\int_{\Theta} P(X \mid \theta) P(\theta) d \theta P(X)=ΘP(Xθ)P(θ)dθ, 因此贝叶斯公式变为:
P ( θ ∣ X ) = P ( X ∣ θ ) P ( θ ) ∫ Θ P ( X ∣ θ ) P ( θ ) d θ P(\theta \mid X)=\frac{P(X \mid \theta) P(\theta)}{\int_{\Theta} P(X \mid \theta) P(\theta) d \theta} P(θX)=ΘP(Xθ)P(θ)dθP(Xθ)P(θ)
从上面的公式中可以看出, 贝叶斯估计的求解非常复杂, 因此选择合适的先验分布就非常重要。一 般来说, 计算积分 ∫ θ P ( X ∣ θ ) P ( θ ) d θ \int_{\theta} P(X \mid \theta) P(\theta) d \theta θP(Xθ)P(θ)dθ 是不可能的。

:

对于这个抛硬币的例子来说, 如果使用共轭先验分布, 就可以更好的解决这个问题。二项分布参数的共轭先验是Beta分布, 由于 θ \theta θ 的似然函数服从二项分布, 因此在贝叶斯估计中, 假设 θ \theta θ 的先验分布服从 P ( θ ) ∼ Beta ⁡ ( α , β ) P(\theta) \sim \operatorname{Beta}(\alpha, \beta) P(θ)Beta(α,β), Beta分布的概率密度公式为:
f ( x ; α , β ) = 1 B ( α , β ) x α − 1 ( 1 − x ) β − 1 f(x ; \alpha, \beta)=\frac{1}{B(\alpha, \beta)} x^{\alpha-1}(1-x)^{\beta-1} f(x;α,β)=B(α,β)1xα1(1x)β1
因此, 贝叶斯公式可写作:
P ( θ ∣ X ) = P ( X ∣ θ ) P ( θ ) ∫ Θ P ( X ∣ θ ) P ( θ ) d θ = θ 6 ( 1 − θ ) 4 θ α − 1 ( 1 − θ ) β − 1 B ( α , β ) ∫ Θ θ 6 ( 1 − θ ) 4 θ α − 1 ( 1 − θ ) β − 1 B ( α , β ) d θ = θ α + 6 − 1 ( 1 − θ ) β + 4 − 1 ∫ Θ θ α + 6 − 1 ( 1 − θ ) β + 4 − 1 d θ = θ α + 6 − 1 ( 1 − θ ) β + 4 − 1 B ( α + 6 − 1 , β + 4 − 1 ) = B e t a ( θ ∣ α + 6 − 1 , β + 4 − 1 ) = B eta ⁡ ( θ ∣ α + 6 , β + 4 ) \begin{aligned} P(\theta \mid X) &=\frac{P(X \mid \theta) P(\theta)}{\int_{\Theta} P(X \mid \theta) P(\theta) d \theta} \\ &=\frac{\theta^{6}(1-\theta)^{4} \frac{\theta^{\alpha-1}(1-\theta)^{\beta-1}}{B(\alpha, \beta)}}{\int_{\Theta} \theta^{6}(1-\theta)^{4} \frac{\theta^{\alpha-1}(1-\theta)^{\beta-1}}{B(\alpha, \beta)} d \theta} \\ &=\frac{\theta^{\alpha+6-1}(1-\theta)^{\beta+4-1}}{\int_{\Theta} \theta^{\alpha+6-1}(1-\theta)^{\beta+4-1} d \theta} \\ &=\frac{\theta^{\alpha+6-1}(1-\theta)^{\beta+4-1}}{B(\alpha+6-1, \beta+4-1)} \\ &=B e t a(\theta \mid \alpha+6-1, \beta+4-1) \\ &=B \operatorname{eta}(\theta \mid \alpha+6, \beta+4) \end{aligned} P(θX)=ΘP(Xθ)P(θ)dθP(Xθ)P(θ)=Θθ6(1θ)4B(α,β)θα1(1θ)β1dθθ6(1θ)4B(α,β)θα1(1θ)β1=Θθα+61(1θ)β+41dθθα+61(1θ)β+41=B(α+61,β+41)θα+61(1θ)β+41=Beta(θα+61,β+41)=Beta(θα+6,β+4)
从上面的公式可以看出, P ( θ ∣ X ) ∼ B e t a ( θ ∣ α + 6 , β + 4 ) P(\theta \mid X) \sim B e t a(\theta \mid \alpha+6, \beta+4) P(θX)Beta(θα+6,β+4),所以后验概率也是 β \beta β分布 。其中 B B B 函数, 也称 B e t a B e t a Beta 函数, 是一 个Q常量, 用来使整个概率的积分为 1 。

Beta ⁡ ( θ ∣ α + 6 , β + 4 ) \operatorname{Beta}(\theta \mid \alpha+6, \beta+4) Beta(θα+6,β+4) 就是贝叶斯估计的结果。

如果使用贝叶斯估计得到的 θ分布存在一个有限均值,则可以用后验分布的期望作为 θ的估计值。

贝叶斯估计要解决的不是如何估计参数, 而是用来估计新测量数据出现的概率, 对于新出现的数据 x ~ \tilde{x} x~ :
P ( x ~ ∣ X ) = ∫ Θ P ( x ~ ∣ θ ) P ( θ ∣ X ) d θ = ∫ Θ P ( x ~ ∣ θ ) P ( X ∣ θ ) P ( θ ) P ( X ) d θ P(\tilde{x} \mid X)=\int_{\Theta} P(\tilde{x} \mid \theta) P(\theta \mid X) d \theta=\int_{\Theta} P(\tilde{x} \mid \theta) \frac{P(X \mid \theta) P(\theta)}{P(X)} d \theta P(x~X)=ΘP(x~θ)P(θX)dθ=ΘP(x~θ)P(X)P(Xθ)P(θ)dθ
贝叶斯估计的求解步骤:

  • 确定参数的似然函数
  • 确定参数的先验分布, 应是后验分布的共轭先验
  • 确定参数的后验分布函数
  • 根据贝叶斯公式求解参数的后验分布

参考资料

  1. 贝叶斯估计、最大似然估计、最大后验概率估计
  2. 最大似然估计、最大后验估计、贝叶斯估计的对比

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/620206.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【随笔】Git 高级篇 -- 获取远程分支数据 git fetch(二十七)

💌 所属专栏:【Git】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! 💖 欢迎大…

代码随想录算法训练营DAY27|C++回溯算法Part.3|39.组合总和、40.组合总和II、组合问题小总结、131.分割回文串

文章目录 39.组合总和思路伪代码实现剪枝优化CPP代码普通版本剪枝版本 40.组合总和II思路伪代码CPP代码不采用used数组的去重方法 组合问题小总结131.分割回文串思路伪代码CPP代码 39.组合总和 力扣题目链接 文章讲解:39.组合总和 视频讲解:Leetcode:39.…

数据结构——顺序表——数组元素和与数字和的绝对差

数据结构——顺序表——数组元素和与数字和的绝对差 class Solution { public:int differenceOfSum(vector<int>& nums) {int a 0;int b 0;for(int i 0; i < nums.size(); i){a a nums[i];while(nums[i]){b b (nums[i] % 10);nums[i] nums[i] / 10;}}retu…

常见的Linux命令

linux操作系统 ctrl鼠标滚动 放大缩小字体 cd /目录进入目录下 ls查看当前目录下的所有内容 tar -zxvf 压缩包名字 对压缩包进行解压 sync将数据由内存同步到硬盘上 shutdown关机指令 shutdown -h 10 /10 表示十分钟后关机 shutdown -h now 表示现在关机 shutdown -h…

OpenCV4.9图像金字塔

目标 在本教程中&#xff0c;您将学习如何&#xff1a; 使用 OpenCV 函数 pyrUp()和 pyrDown()对给定图像进行下采样或上采样。 理论 注意 下面的解释属于 Bradski 和 Kaehler 的 Learning OpenCV 一书。 通常&#xff0c;我们需要将图像转换为与原始图像不同的大小。为此…

springboot上传模块到私服,再用pom引用下来

有时候要做一个公司的公共服务模块。不能说大家都直接把代码粘贴进去&#xff0c;因为会需要维护很多份&#xff1b;这样就剩下两个方式了。 方式一&#xff1a;自己独立部署一个公共服务的服务&#xff0c;全公司都调用&#xff0c;通过http、rpc或者grpc的方式&#xff0c;这…

用 Python 写 3D 游戏,太赞了!

vizard介绍 Vizard是一款虚拟现实开发平台软件&#xff0c;从开发至今已走过十个年头。它基于C/C&#xff0c;运用新近OpenGL拓展模块开发出的高性能图形引擎。当运用Python语言执行开发时&#xff0c;Vizard同时自动将编写的程式转换为字节码抽象层(LAXMI)&#xff0c;进而运…

msf后门流量分析

前言 分析msf后门的流量主要是分析其数据包的特征&#xff0c;然后msf后门有三种类型。分别是tcp、http、https&#xff0c;这里就说一下这三种类型的数据包的特征&#xff0c;其实也是比较简单的。还有一点&#xff0c;在实验之前记得把病毒防护关了&#xff0c;以防拦截流量…

The 0-1 Knapsack Problem KNAPSACK

Problem Let U {u1, u2, . . . , un} be a set of n items to be packed in a knapsack of size C. For 1 ≤ j ≤ n, let sj and vj be the size and value of the jth item, respectively. Here C and sj, vj , 1 ≤ j ≤ n, are all positive integers. Each item should e…

水库之大坝安全监测系统解决方案

一、系统介绍 水库之大坝安全监测系统主要包括渗流监测系统、流量监测系统、雨量监测系统、沉降监测系统组成。每一个监测系统由监测仪器及自动化数据采集装置&#xff08;内置通信装置、防雷设备&#xff09;、附件&#xff08;电缆、通信线路、电源线路&#xff09;等组成&a…

node.js服务器静态资源处理

前言&#xff1a;node.js服务器动态资源处理见 http://t.csdnimg.cn/9D8WN 一、什么是node.js服务器静态资源&#xff1f; 静态资源服务器指的是不会被服务器的动态运行所改变或者生成的文件. 它最初在服务器运行之前是什么样子, 到服务器结束运行时, 它还是那个样子. 比如平…

github 双因素验证

环境 华为手机 下载app 华为应用市场下载 输入对应验证码&#xff0c;然后一路下一步即可 联系方式 手机&#xff1a;13822161573 微信&#xff1a;txsolarterms QQ&#xff1a;419396409