支持向量机公式推导(support vector machine,SVM)

支持向量机学习的基本思想是求解能够正确划分训练集并且几何间隔最大的分离超平面。对线性可分的训练数据集而言,线性可分分离超平面有无穷多个(等价于感知机),但是几何间隔最大的分离超平面是唯一的。这里的间隔最大化又称为硬间隔最大化(与训练数据集近似线性可分时的软间隔最大化相对应)。

间隔最大化的直观解释是:对训练数据集找到几何间隔最大的超平面意味着以充分大的确信度对训练数据进行分类。也就是说不仅将正负实例点分开,而且对最难分的实例点(离超平面最近的点)也有足够大的确信度将它们分开。这样的超平面应该对未知的新实例有很好的分类预测能力。

请添加图片描述

如上图所示,有一堆训练数据的正负样本,标记为: D : { x i , y i } , i = 1 , . . . , l , y i ∈ { − 1 , 1 } , x ∈ R d D: \{x_i, y_i\}, i = 1, ..., l, y_i ∈\{-1, 1\}, x\in {{\mathbb{R}}^{d}} D:{xi,yi},i=1,...,l,yi{1,1},xRd,假设有一个超平面H: w x + b = 0 wx + b = 0 wx+b=0,可以把这些样本正确无误地分割开来,同时存在两个平行于H的超平面H1和H2:
w x + b = 1 w x + b = − 1 \begin{aligned} & wx+b=1 \\ & wx+b=-1 \\ \end{aligned} wx+b=1wx+b=1

使离H最近的正负样本刚好分别落在H1和H2上,这样的样本就是支持向量机。那么其他所有的训练样本都将位于H1和H2之外,也就是满足如下约束:
w : w x + b ≥ 1      f o r      y i = 1 w : w x + b ≤ − 1      f o r      y i = − 1 \begin{aligned} & w:wx+b\ge 1 \ \ \ \ for \ \ \ \ y_i = 1\\ & w:wx+b\le -1 \ \ \ \ for \ \ \ \ y_i = -1\\ \end{aligned} w:wx+b1    for    yi=1w:wx+b1    for    yi=1

写成统一的式子就是:
y i ( w ⋅ x i + b ) − 1 ≥ 0      ( 1 ) y_i(w·x_i+b) - 1 ≥ 0 \ \ \ \ (1) yi(wxi+b)10    (1)
而超平面H1和H2之间的距离可知为:
m a r g i n = 2 ∣ ∣ w ∣ ∣ margin=\frac{2}{||w||} margin=w2

SVM的任务就是寻找一个超平面H把样本无误地分割成两部分,并且使H1和H2的距离最大。要找到这样的超平面,只需最大化间隔 margin们也就是最小化 ∣ ∣ w ∣ ∣ 2 ||w||^2 w2。于是可以构造如下的条件极值问题:
{ min ⁡ ∣ ∣ w ∣ ∣ 2 2 s t .   y i ( w i    ⁣ ⁣ ⋅  ⁣ ⁣   x i + b ) − 1 ≥ 0  (2) \left\{ \begin{matrix} \min \frac{||w|{{|}^{2}}}{2} \\ st.\text{ }{{\text{y}}_{i}}({{w}_{i}}\text{ }\!\!\cdot\!\!\text{ }{{x}_{i}}+b)-1\ge 0\text{ (2)} \\ \end{matrix} \right. {min2w2st. yi(wi  xi+b)10 (2)

对于不等式约束的条件极值问题,可以用拉格朗日方法求解。而拉格朗日方程的构造规则是:用约束方程乘以非负的拉格朗日系数,然后再从目标函数中减去。于是得到拉格朗日方程如下:
L ( w , b , α i ) = 1 2 ∣ ∣ w ∣ ∣ 2 − ∑ i = 1 l α i ( y i ( w    ⁣ ⁣ ⋅  ⁣ ⁣   x i + b ) − 1 ) = 1 2 ∣ ∣ w ∣ ∣ 2 − ∑ i = 1 l α i y i ( w    ⁣ ⁣ ⋅  ⁣ ⁣   x i + b ) + ∑ i = 1 l α i      ( 3 ) \begin{aligned} L(w,b,\alpha_i ) & =\frac{1}{2}||w|{{|}^{2}}-\sum\limits_{i=1}^{l}{{{\alpha }_{i}}({{y}_{i}}(w\text{ }\!\!\cdot\!\!\text{ }{{\text{x}}_{i}}+b)-1)} \\ & =\frac{1}{2}||w|{{|}^{2}}-\sum\limits_{i=1}^{l}{{{\alpha }_{i}}{{y}_{i}}(w\text{ }\!\!\cdot\!\!\text{ }{{\text{x}}_{i}}+b)}+\sum\limits_{i=1}^{l}{{{\alpha }_{i}}} \ \ \ \ (3)\\ \end{aligned} L(w,b,αi)=21w2i=1lαi(yi(w  xi+b)1)=21w2i=1lαiyi(w  xi+b)+i=1lαi    (3)

其中
α i ≥ 0      ( 4 ) {{\alpha }_{i}}\ge 0 \ \ \ \ (4) αi0    (4)

那么我们要处理的规划问题就变为:
min ⁡ w , b   max ⁡ α i ≥ 0   L ( w , b , a i )      ( 5 ) \underset{w,b}{\mathop{\min }}\,\underset{{{\alpha }_{i}}\ge 0}{\mathop{\max }}\,L(w,b,{{a}_{i}})\ \ \ \ (5) w,bminαi0maxL(w,b,ai)    (5)

上式才是严格的不等式约束的拉格朗日条件极值的表达式。对于这一步的变换,很多文章都没有多做表述,或者理解有偏差,从而影响了读者后续的推演。在此我将详细地一步步推导,以解困惑。

(5)式是一个凸规划问题,其意义是先对α求偏导,令其等于0消掉α,然后再对w和b求L的最小值。要直接求解(5)式是有难度的,通过消去拉格朗日系数来化简方程,对我们的问题无济于事。所幸这个问题可以通过拉格朗日对偶问题来解决,为此我们把(5)式做一个等价变换:
min ⁡ w , b   max ⁡ α i ≥ 0   L ( w , b , a i ) = max ⁡ α i ≥ 0   min ⁡ w , b   L ( w , b , a i ) \underset{w,b}{\mathop{\min }}\,\underset{{{\alpha }_{i}}\ge 0}{\mathop{\max }}\,L(w,b,{{a}_{i}})=\underset{{{\alpha }_{i}}\ge 0}{\mathop{\max }}\,\underset{w,b}{\mathop{\min }}\,L(w,b,{{a}_{i}}) w,bminαi0maxL(w,b,ai)=αi0maxw,bminL(w,b,ai)
上式即为对偶变换,这样就把这个凸优化问题转换成了对偶问题:
max ⁡ α i ≥ 0   min ⁡ w , b   L ( w , b , a i )      ( 6 ) \underset{{{\alpha }_{i}}\ge 0}{\mathop{\max }}\,\underset{w,b}{\mathop{\min }}\,L(w,b,{{a}_{i}}) \ \ \ \ (6) αi0maxw,bminL(w,b,ai)    (6)

其意义是:原凸规划问题可以转化为先对w和b求偏导,令其等于0消掉w和b,然后再对α求L的最大值。下面我们就来求解(6)式,为此我们先计算w和b的偏导数。由(3)式有:
∂ L ( w , b , a i ) ∂ w = w − ∑ i = 1 l α i y i x i ∂ L ( w , b , a i ) ∂ b = − ∑ i = 1 l α i y i      ( 7 ) \begin{aligned} & \frac{\partial L(w,b,{{a}_{i}})}{\partial w}=w-\sum\limits_{i=1}^{l}{{{\alpha }_{i}}{{y}_{i}}{{x}_{i}}} \\ & \frac{\partial L(w,b,{{a}_{i}})}{\partial b}=-\sum\limits_{i=1}^{l}{{{\alpha }_{i}}{{y}_{i}}} \\ \end{aligned} \ \ \ \ (7) wL(w,b,ai)=wi=1lαiyixibL(w,b,ai)=i=1lαiyi    (7)

为了让L在w和b上取到最小值,令(7)式的两个偏导数分别为0,于是得到:
∑ i = 1 l α i y i x i = w ∑ i = 1 l α i y i = 0      ( 8 ) \begin{aligned} & \sum\limits_{i=1}^{l}{{{\alpha }_{i}}{{y}_{i}}{{x}_{i}}}=w \\ & \sum\limits_{i=1}^{l}{{{\alpha }_{i}}{{y}_{i}}=0} \\ \end{aligned} \ \ \ \ (8) i=1lαiyixi=wi=1lαiyi=0    (8)

将(8)代回(3)式,可得:
min ⁡ w , b   L ( w , b , α i ) = 1 2 ∣ ∣ w ∣ ∣ 2 − w ⋅ ∑ i = 1 l α i y i x i − b ∑ i = 1 l α i y i + ∑ i = 1 l α i = 1 2 ∣ ∣ w ∣ ∣ 2 − w ⋅ w − b ⋅ 0 + ∑ i = 1 l α i = ∑ i = 1 l α i − 1 2 ∣ ∣ w ∣ ∣ 2 = ∑ i = 1 l α i − 1 2 ∑ i = 1 l ∑ j = 1 l α i α j y i y j ( x i ⋅ x j )      ( 9 ) \begin{aligned} \underset{w,b}{\mathop{\min }}\,L(w,b,{{\alpha }_{i}}) & =\frac{1}{2}||w|{{|}^{2}}-w\cdot \sum\limits_{i=1}^{l}{{{\alpha }_{i}}{{y}_{i}}{{x}_{i}}}-b\sum\limits_{i=1}^{l}{{{\alpha }_{i}}{{y}_{i}}}+\sum\limits_{i=1}^{l}{{{\alpha }_{i}}} \\ & =\frac{1}{2}||w|{{|}^{2}}-w\cdot w-b\cdot 0+\sum\limits_{i=1}^{l}{{{\alpha }_{i}}} \\ & =\sum\limits_{i=1}^{l}{{{\alpha }_{i}}}-\frac{1}{2}||w|{{|}^{2}} \\ & =\sum\limits_{i=1}^{l}{{{\alpha }_{i}}}-\frac{1}{2}\sum\limits_{i=1}^{l}{\sum\limits_{j=1}^{l}{{{\alpha }_{i}}}}{{\alpha }_{j}}{{y}_{i}}{{y}_{j}}({{x}_{i}}\cdot {{x}_{j}}) \\ \end{aligned} \ \ \ \ (9) w,bminL(w,b,αi)=21w2wi=1lαiyixibi=1lαiyi+i=1lαi=21w2wwb0+i=1lαi=i=1lαi21w2=i=1lαi21i=1lj=1lαiαjyiyj(xixj)    (9)

再把(9)代入(6)式有:
max ⁡ α ≥ 0   min ⁡ w , b   L ( w , b , α i ) = max ⁡ α i ≥ 0   ( ∑ i = 1 l α i − 1 2 ∑ i = 1 l ∑ j = 1 l α i α j y i y j ( x i ⋅ x j ) )      ( 10 ) \underset{\alpha \ge 0}{\mathop{\max }}\,\underset{w,b}{\mathop{\min }}\,L(w,b,{{\alpha }_{i}})=\underset{{{\alpha }_{i}}\ge 0}{\mathop{\max }}\,(\sum\limits_{i=1}^{l}{{{\alpha }_{i}}}-\frac{1}{2}\sum\limits_{i=1}^{l}{\sum\limits_{j=1}^{l}{{{\alpha }_{i}}}}{{\alpha }_{j}}{{y}_{i}}{{y}_{j}}({{x}_{i}}\cdot {{x}_{j}})) \ \ \ \ (10) α0maxw,bminL(w,b,αi)=αi0max(i=1lαi21i=1lj=1lαiαjyiyj(xixj))    (10)

考虑到(8)式,我们的对偶问题就变为:
{ max ⁡ α i ≥ 0   { ∑ i = 1 l α i − 1 2 ∑ i = 1 l ∑ j = 1 l α i α j y i y j ( x i ⋅ x j ) } s t . ∑ i = 1 l α i y i = 0 α i ≥ 0      ( 11 ) \left\{ \begin{matrix} \begin{matrix} \underset{{{\alpha }_{i}}\ge 0}{\mathop{\max }}\,\{\sum\limits_{i=1}^{l}{{{\alpha }_{i}}}-\frac{1}{2}\sum\limits_{i=1}^{l}{\sum\limits_{j=1}^{l}{{{\alpha }_{i}}}}{{\alpha }_{j}}{{y}_{i}}{{y}_{j}}({{x}_{i}}\cdot {{x}_{j}})\} \\ st.\sum\limits_{i=1}^{l}{{{\alpha }_{i}}{{y}_{i}}=0} \\ \end{matrix} \\ {{\alpha }_{i}}\ge 0 \\ \end{matrix} \right. \ \ \ \ (11) αi0max{i=1lαi21i=1lj=1lαiαjyiyj(xixj)}st.i=1lαiyi=0αi0    (11)

核函数

常用核函数
1. 线性核函数

线性核函数(Linear Kernel)其实就是我们的原公式,表达式为:
K ( x , z ) = x ⋅ z K(x,z)=x\cdot z K(x,z)=xz
也就是说,线性可分SVM我们可以和线性不可分SVM归为一类,区别仅仅在于线性可分SVM用的是线性核函数。

2. 多项式合函数

多项式核函数(Polynomial Kernel)是线性不可分SVM常用的核函数之一,表达式为:
K ( x , z ) = ( γ x ⋅ z + r ) d K(x,z)={{(\gamma x\cdot z+r)}^{d}} K(x,z)=(γxz+r)d
其中, γ , r , d \gamma ,r,d γ,r,d 都需要自己调参定义。

3. 高斯核函数

高斯核函数(Gaussian Kernel),在SVM中也称为径向基核函数(Radial Basis Function,RBF),它是非线性分类SVM最主流的核函数。libsvm默认的核函数就是它。表达式为:
K ( x , z ) = exp ⁡ ( − γ ∣ ∣ x − z ∣ ∣ 2 ) K(x,z)=\exp (-\gamma ||x-z|{{|}^{2}}) K(x,z)=exp(γxz2)
其中, γ \gamma γ 大于 0,需要自己调参定义。

4. sigmoid 核函数

Sigmoid核函数(Sigmoid Kernel)也是线性不可分SVM常用的核函数之一,表达式为:
K ( x , z ) = tanh ⁡ ( γ x ⋅ z + r ) K(x,z)=\tanh (\gamma x\cdot z+r) K(x,z)=tanh(γxz+r)
其中, γ , r \gamma ,r γ,r 都需要自己调参定义

我们假设整个问题的最优解是 w ∗ , b ∗ , α ∗ w^*, b^*, \alpha^* w,b,α,接下来进行求解。

求解 α ∗ \alpha^* α

对于(11)式
{ max ⁡ α i ≥ 0   ( ∑ i = 1 l α i − 1 2 ∑ i = 1 l ∑ j = 1 l α i α j y i y j ( x i ⋅ x j ) ) s t . ∑ i = 1 l α i y i = 0 α i ≥ 0      ( 11 ) \left\{ \begin{matrix} \begin{matrix} \underset{{{\alpha }_{i}}\ge 0}{\mathop{\max }}\,(\sum\limits_{i=1}^{l}{{{\alpha }_{i}}}-\frac{1}{2}\sum\limits_{i=1}^{l}{\sum\limits_{j=1}^{l}{{{\alpha }_{i}}}}{{\alpha }_{j}}{{y}_{i}}{{y}_{j}}({{x}_{i}}\cdot {{x}_{j}})) \\ st.\sum\limits_{i=1}^{l}{{{\alpha }_{i}}{{y}_{i}}=0} \\ \end{matrix} \\ {{\alpha }_{i}}\ge 0 \\ \end{matrix} \right. \ \ \ \ (11) αi0max(i=1lαi21i=1lj=1lαiαjyiyj(xixj))st.i=1lαiyi=0αi0    (11)

这个优化式子比较复杂,里面有 l l l 个变量组成的向量 α 需要在目标函数极小化的时候求出。直接优化时很难的。这时候需要用 SMO 算法进行求解。

下面简单介绍一下 SMO 思想,不具体阐述公式推导,详细推导过程可以参考链接[4]

SMO算法则采用了一种启发式的方法。它每次只优化两个变量,将其他的变量都视为常数。由于 ∑ i = 1 l α i y i = 0 \sum\limits_{i=1}^{l}{{{\alpha }_{i}}{{y}_{i}}=0} i=1lαiyi=0 。假如将 α 3 , α 4 , . . . , α l {{\alpha }_{3}},{{\alpha }_{4}},...,{{\alpha }_{l}} α3,α4,...,αl 固定,那么 α 1 , α 2 {{\alpha }_{1}},{{\alpha }_{2}} α1,α2 之间的关系也确定了。这样SMO算法将一个复杂的优化算法转化为一个比较简单的两变量优化问题。

最后可以求出 α ∗ \alpha^* α

求解 w ∗ , b ∗ w^*, b^* w,b

需要指出的一点是,(2)式的条件极值问题能够转化为(5)式的凸规划问题,其中隐含着一个约束,即:
α i ( y i ( w ⋅ x i + b ) − 1 ) = 0      ( 12 ) {{\alpha }_{i}}({{y}_{i}}(w\cdot {{x}_{i}}+b)-1)=0 \ \ \ \ (12) αi(yi(wxi+b)1)=0    (12)

这个约束是这样得来的,如果(2)和(5)等效,必有:
max ⁡ α i ≥ 0   L ( w , b , α i ) = 1 2 ∣ ∣ w ∣ ∣ 2 \underset{{{\alpha }_{i}}\ge 0}{\mathop{\max }}\,L(w,b,{{\alpha }_{i}})=\frac{1}{2}||w|{{|}^{2}} αi0maxL(w,b,αi)=21w2

把(3)式代入上式中,得到:
1 2 ∣ ∣ w ∣ ∣ 2 = max ⁡ α i ≥ 0   { 1 2 ∣ ∣ w ∣ ∣ 2 − ∑ i = 1 l α i ( y i ( w ⋅ x i + b ) − 1 ) } = 1 2 ∣ ∣ w ∣ ∣ 2 − min ⁡ α i ≥ 0   { ∑ i = 1 l α i ( y i ( w ⋅ x i + b ) − 1 ) } \begin{aligned} \frac{1}{2}||w|{{|}^{2}} & =\underset{{{\alpha }_{i}}\ge 0}{\mathop{\max }}\,\{\frac{1}{2}||w|{{|}^{2}}-\sum\limits_{i=1}^{l}{{{\alpha }_{i}}({{y}_{i}}(w\cdot {{x}_{i}}+b)-1)}\} \\ & =\frac{1}{2}||w|{{|}^{2}}-\underset{{{\alpha }_{i}}\ge 0}{\mathop{\min }}\,\{\sum\limits_{i=1}^{l}{{{\alpha }_{i}}({{y}_{i}}(w\cdot {{x}_{i}}+b)-1)}\} \\ \end{aligned} 21w2=αi0max{21w2i=1lαi(yi(wxi+b)1)}=21w2αi0min{i=1lαi(yi(wxi+b)1)}

化简得到:
min ⁡ α i ≥ 0   { ∑ i = 1 l α i ( y i ( w ⋅ x i + b ) − 1 ) } = 0      ( 13 ) \underset{{{\alpha }_{i}}\ge 0}{\mathop{\min }}\,\{\sum\limits_{i=1}^{l}{{{\alpha }_{i}}({{y}_{i}}(w\cdot {{x}_{i}}+b)-1)}\}=0 \ \ \ \ (13) αi0min{i=1lαi(yi(wxi+b)1)}=0    (13)

又因为约束(1)和(4),有:
α i ( y i ( w ⋅ x i + b ) − 1 ) ≥ 0 {{\alpha }_{i}}({{y}_{i}}(w\cdot {{x}_{i}}+b)-1)\ge 0 αi(yi(wxi+b)1)0

所以要使(13)式成立,只有令: α i ( y i ( w ⋅ x i + b ) − 1 ) = 0 {{\alpha }_{i}}({{y}_{i}}(w\cdot {{x}_{i}}+b)-1) = 0 αi(yi(wxi+b)1)=0,由此得到(12)式的约束。该约束的意义是:如果一个样本是支持向量,则其对应的拉格朗日系数非零;如果一个样本不是支持向量,则其对应的拉格朗日系数一定为0。由此可知大多数拉格朗日系数都是0。

接下来我们要用到上面求出的一些公式
∑ i = 1 l α i y i x i = w      ( 8 ) α i ( y i ( w ⋅ x i + b ) − 1 ) = 0      ( 11 ) α i ≥ 0      ( 11 ) max ⁡ α i ≥ 0   { ∑ i = 1 l α i − 1 2 ∑ i = 1 l ∑ j = 1 l α i α j y i y j ( x i ⋅ x j ) }      ( 12 ) \begin{aligned} & \sum\limits_{i=1}^{l}{{{\alpha }_{i}}{{y}_{i}}{{x}_{i}}}=w \ \ \ \ (8)\\ & {{\alpha }_{i}}({{y}_{i}}(w\cdot {{x}_{i}}+b)-1)=0 \ \ \ \ (11)\\ & {{\alpha }_{i}}\ge 0 \ \ \ \ (11) \\ & \underset{{{\alpha }_{i}}\ge 0}{\mathop{\max }}\,\{\sum\limits_{i=1}^{l}{{{\alpha }_{i}}}-\frac{1}{2}\sum\limits_{i=1}^{l}{\sum\limits_{j=1}^{l}{{{\alpha }_{i}}}}{{\alpha }_{j}}{{y}_{i}}{{y}_{j}}({{x}_{i}}\cdot {{x}_{j}})\} \ \ \ \ (12)\\ \end{aligned} i=1lαiyixi=w    (8)αi(yi(wxi+b)1)=0    (11)αi0    (11)αi0max{i=1lαi21i=1lj=1lαiαjyiyj(xixj)}    (12)

由 KTT 条件可以退出不可能所有的 α i \alpha_i αi 都是0,如果所有的 α i \alpha_i αi 都是 0 的话,那么 w ∗ = 0 w^* = 0 w=0,这显然是错误的,所以至少有一个 α > 0 \alpha > 0 α>0,这个时候根据(11)可以得到:
1 − y i ( w ∗ ⋅ x i + b ∗ ) = 0      ( 14 ) 1 - {{y}_{i}}(w^*\cdot {{x}_{i}}+b^*) = 0 \ \ \ \ (14) 1yi(wxi+b)=0    (14)

将(8) w ∗ = ∑ i = 1 l α ∗ i y i x i w^* = \sum\limits_{i=1}^{l}{{{\alpha^* }_{i}}{{y}_{i}}{{x}_{i}}} w=i=1lαiyixi 代入 (14)可以得到:
1 − y j ( ∑ i = 1 l α ∗ i y i x i ⋅ x j + b ∗ ) = 0 1 - {{y}_{j}}(\sum\limits_{i=1}^{l}{{{\alpha^* }_{i}}{{y}_{i}}{{x}_{i}}}\cdot {{x}_{j}}+b^*) = 0 1yj(i=1lαiyixixj+b)=0

要先把 b 解出来,先消除 y i y_i yi,因为 y i y_i yi 为标签, y i = ± 1 y_i = \pm 1 yi=±1,所以 y i 2 = 1 y_i^2 = 1 yi2=1,上式左右两边同时乘以 y i y_i yi,可以解出:
b ∗ = y j − ∑ i = 1 l α ∗ i y i ( x i x j ) {{b}^{*}}={{y}_{j}}-\sum\limits_{i=1}^{l}{{{\alpha }^{*}}_{i}{{y}_{i}}({{x}_{i}}} {{x}_{j}}) b=yji=1lαiyi(xixj)

SVM算法的主要优点有:

  1. 解决高维特征的分类问题和回归问题很有效,在特征维度大于样本数时依然有很好的效果。
  2. 仅仅使用一部分支持向量来做超平面的决策,无需依赖全部数据。
  3. 有大量的核函数可以使用,从而可以很灵活的来解决各种非线性的分类回归问题。
  4. 样本量不是海量数据的时候,分类准确率高,泛化能力强。

SVM算法的主要缺点有:

  1. 如果特征维度远远大于样本数,则SVM表现一般。
  2. SVM在样本量非常大,核函数映射维度非常高时,计算量过大,不太适合使用。
  3. 非线性问题的核函数的选择没有通用标准,难以选择一个合适的核函数。
  4. SVM对缺失数据敏感。

参考链接;
[1]支持向量机(SVM)的详细推导过程及注解(一)
[2]手动推导SVM
[3]【关于 支持向量机】那些你不知道的事
[4]博客园刘建平Pinard:支持向量机原理(四)SMO算法原理
[5]博客园刘建平Pinard:支持向量机原理(五)线性支持回归

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值