首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

机器学习笔记之贝叶斯线性回归(二)推断任务推导过程引言

  • 23-09-05 19:04
  • 2972
  • 7886
blog.csdn.net

机器学习笔记之贝叶斯线性回归——推断任务推导过程

  • 引言
    • 回顾:贝叶斯线性回归——推断任务
    • 推导过程

引言

上一节对贝叶斯算法在线性回归中的任务进行介绍,本节将介绍贝叶斯线性回归推断任务的推导过程。

回顾:贝叶斯线性回归——推断任务

贝叶斯线性回归中的推断任务(Inference)本质上是求解模型参数 W mathcal W W的后验概率结果 P ( W ∣ D a t a ) mathcal P(mathcal W mid Data) P(W∣Data):
其中 D a t a Data Data表示数据集合,包含样本集合 X mathcal X X和对应标签集合 Y mathcal Y Y.
P ( W ∣ D a t a ) = P ( Y ∣ W , X ) ⋅ P ( W ) ∫ W P ( Y ∣ W , X ) ⋅ P ( W ) d W ∝ P ( Y ∣ W , X ) ⋅ P ( W )

P(W∣Data)=P(Y∣W,X)⋅P(W)∫WP(Y∣W,X)⋅P(W)dW∝P(Y∣W,X)⋅P(W)" role="presentation" style="position: relative;">P(W∣Data)=P(Y∣W,X)⋅P(W)∫WP(Y∣W,X)⋅P(W)dW∝P(Y∣W,X)⋅P(W)P(W∣Data)=P(Y∣W,X)⋅P(W)∫WP(Y∣W,X)⋅P(W)dW∝P(Y∣W,X)⋅P(W)
P(W∣Data)​=∫W​P(Y∣W,X)⋅P(W)dWP(Y∣W,X)⋅P(W)​∝P(Y∣W,X)⋅P(W)​
其中 P ( Y ∣ W , X ) mathcal P(mathcal Y mid mathcal W,mathcal X) P(Y∣W,X)是似然(Likelihood),根据线性回归模型的定义, P ( Y ∣ W , X ) mathcal P(mathcal Y mid mathcal W,mathcal X) P(Y∣W,X)服从高斯分布:
各样本之间’独立同分布‘~
Y = W T X + ϵ ϵ ∼ N ( 0 , σ 2 ) P ( Y ∣ W , X ) ∼ N ( W T X , σ 2 ) = ∏ i = 1 N N ( W T x ( i ) , σ 2 )
Y=WTX+ϵϵ∼N(0,σ2)P(Y∣W,X)∼N(WTX,σ2)=∏i=1NN(WTx(i),σ2)" role="presentation" style="position: relative;">YP(Y∣W,X)=WTX+ϵϵ∼N(0,σ2)∼N(WTX,σ2)=∏i=1NN(WTx(i),σ2)Y=WTX+ϵϵ∼N(0,σ2)P(Y∣W,X)∼N(WTX,σ2)=∏i=1NN(WTx(i),σ2)
YP(Y∣W,X)​=WTX+ϵϵ∼N(0,σ2)∼N(WTX,σ2)=i=1∏N​N(WTx(i),σ2)​

P ( W ) mathcal P(mathcal W) P(W)表示先验分布(Piror Distribution),表示推断前给定的初始分布。这里假设 P ( W ) mathcal P(mathcal W) P(W)同样服从高斯分布:
先验分布 P ( W ) mathcal P(mathcal W) P(W)的完整表达是 P ( W ∣ X ) mathcal P(mathcal W mid mathcal X) P(W∣X),这里 W mathcal W W和样本 X mathcal X X无关,故省略。
P ( W ) ∼ N ( 0 , Σ p r i o r ) mathcal P(mathcal W) sim mathcal N(0,Sigma_{prior}) P(W)∼N(0,Σprior​)
根据指数族分布的共轭性质 以及高斯分布自身的自共轭性质,后验 P ( W ∣ D a t a ) mathcal P(mathcal W mid Data) P(W∣Data)同样服从高斯分布。定义其高斯分布为 N ( μ W , Σ W ) mathcal N(mu_{mathcal W},Sigma_{mathcal W}) N(μW​,ΣW​),具体表达如下:
N ( μ W , Σ W ) ∝ N ( W T X , σ 2 ) ⋅ N ( 0 , Σ p r i o r ) = [ ∏ i = 1 N N ( y ( i ) ∣ W T x ( i ) , σ 2 ) ] ⋅ N ( 0 , Σ p r i o r )
N(μW,ΣW)∝N(WTX,σ2)⋅N(0,Σprior)=[∏i=1NN(y(i)∣WTx(i),σ2)]⋅N(0,Σprior)" role="presentation" style="position: relative;">N(μW,ΣW)∝N(WTX,σ2)⋅N(0,Σprior)=[∏i=1NN(y(i)∣WTx(i),σ2)]⋅N(0,Σprior)N(μW,ΣW)∝N(WTX,σ2)⋅N(0,Σprior)=[∏i=1NN(y(i)∣WTx(i),σ2)]⋅N(0,Σprior)
N(μW​,ΣW​)​∝N(WTX,σ2)⋅N(0,Σprior​)=[i=1∏N​N(y(i)∣WTx(i),σ2)]⋅N(0,Σprior​)​

推断任务的目的就是求解 N ( μ W , Σ W ) mathcal N(mu_{mathcal W},Sigma_{mathcal W}) N(μW​,ΣW​)的分布形式,即求解分布参数 μ W , Σ W mu_{mathcal W},Sigma_{mathcal W} μW​,ΣW​。

推导过程

首先观察似然的概率分布,并进行展开:
需要注意的是: N ( y ( i ) ∣ W T x ( i ) , σ 2 ) ( i = 1 , 2 , ⋯   , N ) mathcal N(y^{(i)} mid mathcal W^Tx^{(i)},sigma^2)(i=1,2,cdots,N) N(y(i)∣WTx(i),σ2)(i=1,2,⋯,N)是一维高斯分布。

P ( Y ∣ W , X ) ∼ ∏ i = 1 N N ( y ( i ) ∣ W T x ( i ) , σ 2 ) = ∏ i = 1 N 1 σ 2 π exp ⁡ [ − 1 2 σ 2 ( y ( i ) − W T x ( i ) ) 2 ]

P(Y∣W,X)∼∏i=1NN(y(i)∣WTx(i),σ2)=∏i=1N1σ2πexp⁡[−12σ2(y(i)−WTx(i))2]" role="presentation" style="position: relative;">P(Y∣W,X)∼∏i=1NN(y(i)∣WTx(i),σ2)=∏i=1N1σ2π−−√exp[−12σ2(y(i)−WTx(i))2]P(Y∣W,X)∼∏i=1NN(y(i)∣WTx(i),σ2)=∏i=1N1σ2πexp⁡[−12σ2(y(i)−WTx(i))2]
P(Y∣W,X)​∼i=1∏N​N(y(i)∣WTx(i),σ2)=i=1∏N​σ2π ​1​exp[−2σ21​(y(i)−WTx(i))2]​
将连乘符号 ∏ prod ∏代入 exp ⁡ exp exp中,并使用矩阵乘法的方式进行描述:
主要是对 ∑ i = 1 N ( y ( i ) − W T x ( i ) ) 2 sum_{i=1}^N left(y^{(i)} - mathcal W^Tx^{(i)} ight)^2 ∑i=1N​(y(i)−WTx(i))2进行变换,变换结果表示如下:传送门
∑ i = 1 N ( y ( i ) − W T x ( i ) ) 2 = ( y ( 1 ) − W T x ( 1 ) , ⋯   , y ( N ) − W T x ( N ) ) ( y ( 1 ) − W T x ( 1 ) ⋮ y ( N ) − W T x ( N ) ) = ( Y T − W T X T ) ( Y − X W ) = ( Y − X W ) T ( Y − X W )
∑i=1N(y(i)−WTx(i))2=(y(1)−WTx(1),⋯,y(N)−WTx(N))(y(1)−WTx(1)⋮y(N)−WTx(N))=(YT−WTXT)(Y−XW)=(Y−XW)T(Y−XW)" role="presentation" style="position: relative;">∑i=1N(y(i)−WTx(i))2=(y(1)−WTx(1),⋯,y(N)−WTx(N))⎛⎝⎜⎜y(1)−WTx(1)⋮y(N)−WTx(N)⎞⎠⎟⎟=(YT−WTXT)(Y−XW)=(Y−XW)T(Y−XW)∑i=1N(y(i)−WTx(i))2=(y(1)−WTx(1),⋯,y(N)−WTx(N))(y(1)−WTx(1)⋮y(N)−WTx(N))=(YT−WTXT)(Y−XW)=(Y−XW)T(Y−XW)
i=1∑N​(y(i)−WTx(i))2​=(y(1)−WTx(1),⋯,y(N)−WTx(N)) ​y(1)−WTx(1)⋮y(N)−WTx(N)​ ​=(YT−WTXT)(Y−XW)=(Y−XW)T(Y−XW)​

1 2 σ 2 frac{1}{2sigma^2} 2σ21​和 i i i无关,拿到连加号外面, I mathcal I I表示单位矩阵。
= 1 ( 2 π ) N 2 σ N exp ⁡ [ − 1 2 σ 2 ∑ i = 1 N ( y ( i ) − W T x ( i ) ) 2 ] = 1 ( 2 π ) N 2 σ N exp ⁡ [ − 1 2 ( Y − X W ) T σ − 2 I ( Y − X W ) ]
=1(2π)N2σNexp⁡[−12σ2∑i=1N(y(i)−WTx(i))2]=1(2π)N2σNexp⁡[−12(Y−XW)Tσ−2I(Y−XW)]" role="presentation" style="position: relative;">=1(2π)N2σNexp[−12σ2∑i=1N(y(i)−WTx(i))2]=1(2π)N2σNexp[−12(Y−XW)Tσ−2I(Y−XW)]=1(2π)N2σNexp⁡[−12σ2∑i=1N(y(i)−WTx(i))2]=1(2π)N2σNexp⁡[−12(Y−XW)Tσ−2I(Y−XW)]
​=(2π)2N​σN1​exp[−2σ21​i=1∑N​(y(i)−WTx(i))2]=(2π)2N​σN1​exp[−21​(Y−XW)Tσ−2I(Y−XW)]​

观察上式,上式同样也是高斯分布的表达格式,这也从侧面证明后验概率 P ( Y ∣ W , X ) mathcal P(mathcal Y mid mathcal W,mathcal X) P(Y∣W,X)确实服从高斯分布。上述高斯分布格式可化简为:
中间的项 σ − 2 I sigma^{-2} mathcal I σ−2I表示’精度矩阵‘。需要注意~
P ( Y ∣ W , X ) ∼ N ( X W , σ 2 I ) mathcal P(mathcal Y mid mathcal W,mathcal X) sim mathcal N(mathcal Xmathcal W,sigma^2 mathcal I) P(Y∣W,X)∼N(XW,σ2I)
至此,后验分布 P ( W ∣ D a t a ) mathcal P(mathcal W mid Data) P(W∣Data)可表示为:
P ( W ∣ D a t a ) ∝ N ( X W , σ 2 I ) ⋅ N ( 0 , Σ p r i o r ) mathcal P(mathcal W mid Data) propto mathcal N(mathcal X mathcal W,sigma^2 mathcal I) cdot mathcal N(0,Sigma_{prior}) P(W∣Data)∝N(XW,σ2I)⋅N(0,Σprior​)
言归正传,如何求解 μ W , Σ W mu_{mathcal W},Sigma_{mathcal W} μW​,ΣW​?
对上式进行如下转换:
这里只关心与 W mathcal W W相关的项,其他的项均视作常数。
P ( W ∣ D a t a ) ∝ { 1 ( 2 π ) N 2 σ N exp ⁡ [ − 1 2 ( Y − X W ) T σ − 2 I ( Y − X W ) ] } ⋅ { 1 ( 2 π ) p 2 ∣ Σ p r i o r ∣ 1 2 [ − 1 2 W T Σ p r i o r − 1 W ] } ∝ exp ⁡ [ − 1 2 ( Y − X W ) T σ − 2 I ( Y − X W ) ] ⋅ exp ⁡ [ − 1 2 W T Σ p r i o r − 1 W ] = exp ⁡ { − 1 2 σ 2 ( Y T − W T X T ) ( Y − X W ) − 1 2 W T Σ p r i o r − 1 W }
P(W∣Data)∝{1(2π)N2σNexp⁡[−12(Y−XW)Tσ−2I(Y−XW)]}⋅{1(2π)p2|Σprior|12[−12WTΣprior−1W]}∝exp⁡[−12(Y−XW)Tσ−2I(Y−XW)]⋅exp⁡[−12WTΣprior−1W]=exp⁡{−12σ2(YT−WTXT)(Y−XW)−12WTΣprior−1W}" role="presentation" style="position: relative;">P(W∣Data)∝{1(2π)N2σNexp[−12(Y−XW)Tσ−2I(Y−XW)]}⋅{1(2π)p2|Σprior|12[−12WTΣ−1priorW]}∝exp[−12(Y−XW)Tσ−2I(Y−XW)]⋅exp[−12WTΣ−1priorW]=exp{−12σ2(YT−WTXT)(Y−XW)−12WTΣ−1priorW}P(W∣Data)∝{1(2π)N2σNexp⁡[−12(Y−XW)Tσ−2I(Y−XW)]}⋅{1(2π)p2|Σprior|12[−12WTΣprior−1W]}∝exp⁡[−12(Y−XW)Tσ−2I(Y−XW)]⋅exp⁡[−12WTΣprior−1W]=exp⁡{−12σ2(YT−WTXT)(Y−XW)−12WTΣprior−1W}
P(W∣Data)​∝{(2π)2N​σN1​exp[−21​(Y−XW)Tσ−2I(Y−XW)]}⋅{(2π)2p​∣Σprior​∣21​1​[−21​WTΣprior−1​W]}∝exp[−21​(Y−XW)Tσ−2I(Y−XW)]⋅exp[−21​WTΣprior−1​W]=exp{−2σ21​(YT−WTXT)(Y−XW)−21​WTΣprior−1​W}​

思路:使用配方法,将上式化简为 1 2 ( W − μ W ) T Σ W − 1 ( W − μ W ) frac{1}{2}(mathcal W - mu_{mathcal W})^TSigma_{mathcal W}^{-1}(mathcal W - mu_{mathcal W}) 21​(W−μW​)TΣW−1​(W−μW​)的格式,从而求出 μ W , Σ W − 1 mu_{mathcal W},Sigma_{mathcal W}^{-1} μW​,ΣW−1​。
我们先对 1 2 ( W − μ W ) T Σ W − 1 ( W − μ W ) frac{1}{2}(mathcal W - mu_{mathcal W})^TSigma_{mathcal W}^{-1}(mathcal W - mu_{mathcal W}) 21​(W−μW​)TΣW−1​(W−μW​)进行展开:用 Δ Delta Δ表示。
这里的 μ W T Σ W − 1 W mu_{mathcal W}^T Sigma_{mathcal W}^{-1} mathcal W μWT​ΣW−1​W和 W T Σ W − 1 μ W mathcal W^TSigma_{mathcal W}^{-1}mu_{mathcal W} WTΣW−1​μW​互为转置并且均表示实数,因而有: μ W T Σ W − 1 W = W T Σ W − 1 μ W mu_{mathcal W}^T Sigma_{mathcal W}^{-1} mathcal W = mathcal W^TSigma_{mathcal W}^{-1}mu_{mathcal W} μWT​ΣW−1​W=WTΣW−1​μW​.
Δ = − 1 2 [ W T Σ W − 1 W − μ W T Σ W − 1 W − W T Σ W − 1 μ W + μ W T Σ W − 1 μ W ] = − 1 2 [ W T Σ W − 1 W − 2 μ W T Σ W − 1 W + μ W T Σ W − 1 μ W ]
Δ=−12[WTΣW−1W−μWTΣW−1W−WTΣW−1μW+μWTΣW−1μW]=−12[WTΣW−1W−2μWTΣW−1W+μWTΣW−1μW]" role="presentation" style="position: relative;">Δ=−12[WTΣ−1WW−μTWΣ−1WW−WTΣ−1WμW+μTWΣ−1WμW]=−12[WTΣ−1WW−2μTWΣ−1WW+μTWΣ−1WμW]Δ=−12[WTΣW−1W−μWTΣW−1W−WTΣW−1μW+μWTΣW−1μW]=−12[WTΣW−1W−2μWTΣW−1W+μWTΣW−1μW]
Δ​=−21​[WTΣW−1​W−μWT​ΣW−1​W−WTΣW−1​μW​+μWT​ΣW−1​μW​]=−21​[WTΣW−1​W−2μWT​ΣW−1​W+μWT​ΣW−1​μW​]​

其中二次项是 − 1 2 W T Σ W − 1 W - frac{1}{2}mathcal W^TSigma_{mathcal W}^{-1} mathcal W −21​WTΣW−1​W,一次项是 μ W T Σ W − 1 W mu_{mathcal W}^T Sigma_{mathcal W}^{-1} mathcal W μWT​ΣW−1​W,常数项是 − 1 2 μ W T Σ W − 1 μ W -frac{1}{2}mu_{mathcal W}^TSigma_{mathcal W}^{-1} mu_{mathcal W} −21​μWT​ΣW−1​μW​。对比这三项去寻找目标结果的相应项。
对上式完全展开:
观察 Y T X W mathcal Y^Tmathcal Xmathcal W YTXW和 W T X T Y mathcal W^Tmathcal X^Tmathcal Y WTXTY这两项,它们是互为转置,并且均表示实数。因此有: Y T X W = W T X T Y mathcal Y^Tmathcal Xmathcal W = mathcal W^Tmathcal X^Tmathcal Y YTXW=WTXTY。
P ( W ∣ D a t a ) ∝ exp ⁡ { − 1 2 σ 2 ( Y T Y − Y T X W − W T X T Y + W T X T X W ) − 1 2 W T Σ p i r o r − 1 W } = exp ⁡ { − 1 2 σ 2 ( Y T Y − 2 Y T X W + W T X T X W ) − 1 2 W T Σ p i r o r − 1 W }
P(W∣Data)∝exp⁡{−12σ2(YTY−YTXW−WTXTY+WTXTXW)−12WTΣpiror−1W}=exp⁡{−12σ2(YTY−2YTXW+WTXTXW)−12WTΣpiror−1W}" role="presentation" style="position: relative;">P(W∣Data)∝exp{−12σ2(YTY−YTXW−WTXTY+WTXTXW)−12WTΣ−1pirorW}=exp{−12σ2(YTY−2YTXW+WTXTXW)−12WTΣ−1pirorW}P(W∣Data)∝exp⁡{−12σ2(YTY−YTXW−WTXTY+WTXTXW)−12WTΣpiror−1W}=exp⁡{−12σ2(YTY−2YTXW+WTXTXW)−12WTΣpiror−1W}
P(W∣Data)​∝exp{−2σ21​(YTY−YTXW−WTXTY+WTXTXW)−21​WTΣpiror−1​W}=exp{−2σ21​(YTY−2YTXW+WTXTXW)−21​WTΣpiror−1​W}​

  • 观察:该式中的二次项有:
    − 1 2 σ 2 W T X T X W − 1 2 W T Σ p r i o r − 1 W = − 1 2 [ W T ( σ − 2 X T X + Σ p r i o r − 1 ) W ] - frac{1}{2sigma^2} mathcal W^Tmathcal X^Tmathcal Xmathcal W - frac{1}{2} mathcal W^TSigma_{prior}^{-1}mathcal W = - frac{1}{2} left[mathcal W^T left(sigma^{-2} mathcal X^Tmathcal X + Sigma_{prior}^{-1} ight) mathcal W ight] −2σ21​WTXTXW−21​WTΣprior−1​W=−21​[WT(σ−2XTX+Σprior−1​)W]
    对比一下 Δ Delta Δ可以发现: Σ W − 1 = σ − 2 X T X + Σ p r i o r − 1 Sigma_{mathcal W}^{-1} = sigma^{-2} mathcal X^Tmathcal X + Sigma_{prior}^{-1} ΣW−1​=σ−2XTX+Σprior−1​。
    这里令 A = Σ W − 1 mathcal A = Sigma_{mathcal W}^{-1} A=ΣW−1​。
    { − 1 2 [ W T ( σ − 2 X T X + Σ p r i o r − 1 ) W ] − 1 2 W T Σ W − 1 W
    {−12[WT(σ−2XTX+Σprior−1)W]−12WTΣW−1W" role="presentation" style="position: relative;">{−12[WT(σ−2XTX+Σ−1prior)W]−12WTΣ−1WW{−12[WT(σ−2XTX+Σprior−1)W]−12WTΣW−1W
    {−21​[WT(σ−2XTX+Σprior−1​)W]−21​WTΣW−1​W​
  • 同理,该式中的一次项只有一项:
    − 1 2 σ 2 ⋅ ( − 2 ) Y T X W = Y T X σ 2 W - frac{1}{2sigma^2} cdot (-2)mathcal Y^Tmathcal Xmathcal W = frac{mathcal Y^Tmathcal X}{sigma^2}mathcal W −2σ21​⋅(−2)YTXW=σ2YTX​W
    对比一下 Δ Delta Δ可以发现: μ W T Σ W − 1 = μ W T A = Y T X σ 2 mu_{mathcal W}^TSigma_{mathcal W}^{-1} = mu_{mathcal W}^T mathcal A = frac{mathcal Y^Tmathcal X}{sigma^2} μWT​ΣW−1​=μWT​A=σ2YTX​
    { Y T X σ 2 W μ W T Σ W − 1 W
    {YTXσ2WμWTΣW−1W" role="presentation" style="position: relative;">{YTXσ2WμTWΣ−1WW{YTXσ2WμWTΣW−1W
    {σ2YTX​WμWT​ΣW−1​W​

此时我们不需要在去观察’常数项部分‘。因为仅需要求解 μ W mu_{mathcal W} μW​和 Σ W Sigma_{mathcal W} ΣW​.此时已经得到了两个方程:
{ μ W T Σ W − 1 = Y T X σ 2 Σ W − 1 = A

{μWTΣW−1=YTXσ2ΣW−1=A" role="presentation" style="position: relative;">{μTWΣ−1W=YTXσ2Σ−1W=A{μWTΣW−1=YTXσ2ΣW−1=A
{μWT​ΣW−1​=σ2YTX​ΣW−1​=A​
解这个方程,有:
{ μ W = A − 1 X T Y σ 2 Σ W − 1 = A
{μW=A−1XTYσ2ΣW−1=A" role="presentation" style="position: relative;">{μW=A−1XTYσ2Σ−1W=A{μW=A−1XTYσ2ΣW−1=A
{μW​=σ2A−1XTY​ΣW−1​=A​

至此, μ W , Σ W − 1 mu_{mathcal W},Sigma_{mathcal W}^{-1} μW​,ΣW−1​均已求解,那么后验概率分布 P ( W ∣ D a t a ) mathcal P(mathcal W mid Data) P(W∣Data)表示为:
P ( W ∣ D a t a ) ∼ N ( μ W , Σ W ) { μ W = A − 1 X T Y σ 2 Σ W = A − 1 A = X T X σ 2 + Σ p i r o r − 1

P(W∣Data)∼N(μW,ΣW){μW=A−1XTYσ2ΣW=A−1A=XTXσ2+Σpiror−1" role="presentation" style="position: relative;">P(W∣Data)∼N(μW,ΣW)⎧⎩⎨⎪⎪⎪⎪μW=A−1XTYσ2ΣW=A−1A=XTXσ2+Σ−1pirorP(W∣Data)∼N(μW,ΣW){μW=A−1XTYσ2ΣW=A−1A=XTXσ2+Σpiror−1
P(W∣Data)∼N(μW​,ΣW​)⎩ ⎨ ⎧​μW​=σ2A−1XTY​ΣW​=A−1A=σ2XTX​+Σpiror−1​​​

下一节将介绍预测任务(Prediction)。

相关参考:
机器学习-贝叶斯线性回归(3)-推导Inference

注:本文转载自blog.csdn.net的静静的喝酒的文章"https://blog.csdn.net/qq_34758157/article/details/128054812"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top