第一章 统计学习及监督学习概论

统计学习的概述

赫尔伯特-西蒙:如果一个系统能够通过执行某个过程改进它的性能,这就是学习。

统计学习的属性描述
核心计算机系统通过运用数据及统计方法提高系统性能的机器学习
对象数据
前提同类数据具有一定的统计规律性
目的对数据的预测与分析,特别是对位置新数据的预测与分析
方法监督学习、无监督学习、强化学习等组成;基于数据构建概率模型从而对数据进行预测与分析
研究统计学习方法(开发新的学习方法)、统计学习理论(方法的有效性和效率)及统计学习应用(如何应用到实际问题)

统计学习的分类

基本分类

监督学习

定义:从标注数据中学习预测模型的机器学习方法。标注数据表示输入输出的对应关系,预测模型表示给定输入产生相应的输出。监督学习的本质是学习输入到输出的映射的统计规律。

相关名词解释
输入空间输入的可能取值的集合
输出空间输出的可能取值的集合
实例每一个具体的输入
特征空间特征向量存在的空间
样本输入输出对
假设空间模型由输入到输出的映射集合(监督学习的目的在于学习由输入到输出的映射)

关于输入输出空间的说明:

  1. 输入输出空间可以是有限元素的集合,也可以是整个欧氏空间;
  2. 输入输出空间可以是同一空间,也可以是不同空间,往往输出空间远小于输入空间;

关于输入和特征空间的说明:

  1. 有时假设特征空间和输入空间是相同的空间;
  2. 有时假设它们为不同的空间,但此时会将实例从输入空间映射到特征空间。
  3. 模型实际上都是定义在特征空间上的。

关于该系列博客的符号说明:

  1. 输入变量写作 X X X,取值写作 x x x,输出变量写作 Y Y Y,取值写作 y y y
  2. 实例 x x x的特征向量写作 x = ( x ( 1 ) , . . . , x ( n ) ) T x=(x^{(1)},...,x^{(n)})^T x=(x(1),...,x(n))T
  3. x i x_i xi表示第i个实例, x ( i ) x^{(i)} x(i)表示第i个特征;
  4. 训练集表示为 T = ( x 1 , y 1 ) , . . . , ( x n , y n ) T={(x_1,y_1),...,(x_n,y_n)} T=(x1,y1),...,(xn,yn);

关于输入输出变量的说明:

  1. 输入输出变量均为连续变量的预测问题称为回归问题;
  2. 输入输出变量均为离散变量的预测问题称为分类问题。

关于联合概率分布假设的说明:
监督学习假设输入与输出的随机变量遵循联合概率分布P(X,Y)。P(X,Y)表示分布列或者概率密度函数。也就是说其分布函数满足一下性质:

  1. 不减函数;
  2. 右连续;
  3. 矩形法则;
  4. F ( − ∞ , y ) = 0 , F ( x , − ∞ ) = 0 , F ( − ∞ , − ∞ ) = 0 , F ( + ∞ , + ∞ ) = 1 F(-∞,y)=0,F(x,-∞)=0,F(-∞,-∞)=0,F(+∞,+∞)=1 F(,y)=0,F(x,)=0,F(,)=0,F(+,+)=1

监督学习问题的形式化描述:

  1. 首先给定一个训练数据集T, x i , y i x_i,y_i xiyi分别是输入输出的观测值,前者称为输入/实例,后者称为输出。
  2. 监督学习分为学习系统和预测系统。学习过程中,学习系统利用给定的训练数据集,通过学习得到一个模型,表示为条件概率分布 P ^ ( Y ∣ X ) \hat{P}(Y|X) P^(YX)或决策函数 f ( x ) ^ \hat{f(x)} f(x)^,描述输入输出的映射关系。
  3. 在预测过程中,预测系统对于给定的测试样本集中的输入,由模型 y N + 1 = arg max ⁡ y P ( y ∣ x N + 1 ) ^ y_{N+1}=\argmax_y\hat{P(y|x_{N+1})} yN+1=yargmaxP(yxN+1)^ y N + 1 = f ( x N + 1 ) ^ y_{N+1}=\hat{f(x_{N+1})} yN+1=f(xN+1)^给出 y N + 1 y_{N+1} yN+1

无监督学习

定义:从无标注数据中学习预测模型的机器学习问题。无标注数据是自然得到的数据,预测模型表示数据的类别、转换或概率。无监督学习的本质是学习数据中的统计规律或潜在结构。

假设 X \mathbb{X} X是输入空间, Z \mathbb{Z} Z隐式结构空间。要学习的模型表示为函数 z = g ( x ) z=g(x) z=g(x)的条件概率分布 P ( z ∣ x ) P(z|x) P(zx) P ( x ∣ z ) P(x|z) P(xz),其中 x x x是输入, z z z是输出。

无监督学习问题的形式化描述:

  1. 首先给定训练数据表示为 U = x 1 , x 2 , . . . , x N U={x_1,x_2,...,x_N} U=x1,x2,...,xN;
  2. 学习系统从训练数据集学习,得到一个最优模型,表示为 z = g ^ ( x ) z=\hat{g}(x) z=g^(x),条件概率分布 P ^ ( z ∣ x ) \hat{P}(z|x) P^(zx)或者 P ^ ( x ∣ z ) \hat{P}(x|z) P^(xz)
  3. 预测过程中,输入 x N + 1 x_{N+1} xN+1:由模型 z N + 1 = g ^ ( x N + 1 ) z_{N+1}=\hat{g}(x_{N+1}) zN+1=g^(xN+1)或者 z N + 1 = arg max ⁡ z P ^ ( z N + 1 ∣ x N + 1 ) z_{N+1}=\argmax_z\hat{P}(z_{N+1}|x_{N+1}) zN+1=zargmaxP^(zN+1xN+1)进行聚类或者降维; arg max ⁡ P ^ ( x N + 1 ∣ z N + 1 ) \argmax\hat{P}(x_{N+1}|z_{N+1}) argmaxP^(xN+1zN+1)给出输入的概率,进行概率估计。

强化学习、半监督学习、主动学习

略。

按模型分类

概率模型与非概率模型

学习类型概率模型非概率模型
监督学习 P ( y ∣ x ) P(y|x) P(yx) f ( x ) f(x) f(x)
无监督学习 P ( z ∣ x ) , P ( x ∣ z ) P(z|x),P(x|z) P(zx),P(xz) g ( x ) g(x) g(x)
概率模型非概率模型
决策树、朴素贝叶斯、隐马尔可夫模型、条件随机场…感知机、支持向量机、k近邻、Adaboost、k均值

逻辑斯蒂回归既是概率模型也可看作是非概率模型。

概率模型和非概率模型的表示可以相互转化(条件概率分布最大化得到函数,函数归一化得到条件概率分布)。

两者的区别在于模型的内部结构。概率模型可以表示为联合概率分布的形式。概率模型的代表是概率图模型。基本概率公式是其中的核心: 边 际 分 布 公 式 / 加 法 公 式 : P ( x ) = ∑ y P ( x , y ) 边际分布公式/加法公式:P(x)=\sum_yP(x,y) /P(x)=yP(x,y) 乘 法 公 式 : P ( x , y ) = P ( x ) P ( x ∣ y ) 乘法公式:P(x,y)=P(x)P(x|y) P(x,y)=P(x)P(xy)

线性模型和非线形模型

特别是非概率模型,可以分为线性模型和非线形模型。如果函数为 y = f ( x ) y=f(x) y=f(x)或者 z = g ( x ) z=g(x) z=g(x)是线性函数,则称模型是线性模型,否则称为非线形模型。

线性模型非线性模型
感知机、线性支持向量机、k近邻、k均值核函数支持向量机、Adaboost、神经网络(深度学习)

参数化模型和非参数化模型

参数化模型假设模型参数的维度固定,模型可以由有限维参数完全刻画;非参数化模型假设模型参数的维度不固定或者无穷大,随着数据量的增大而增大。

参数化模型非参数化模型
感知机、朴素贝叶斯、逻辑斯蒂回归、k均值决策树、支持向量机、AdaBoost、k近邻

按算法分类

分为在线学习与批量学习。

在线学习指的是每次接受一个样本,进行预测,然后学习模型,并不断重复操作的机器学习。

批量学习一次接受所有数据,学习模型,之后进行预测。

统计学习方法三要素

方法=模型+策略+算法

下面围绕监督学习展开论述这三要素。

模型

在监督学习的过程中,模型就是所要学习的条件概率分布或决策函数

假设空间中的模型一般有无穷多个,假设空间表示为 F = { f ∣ Y = f ( X ) } \mathbb{F}=\{f|Y=f(X)\} F={fY=f(X)},其中 X , Y X,Y X,Y是输入输出空间上的变量。此时假设空间是由一个参数向量决定的函数族: F = { f ∣ Y = f θ ( X ) , θ ∈ R n } \mathbb{F}=\{f|Y=f_\theta(X),\theta\in\mathbb{R}^n\} F={fY=fθ(X),θRn}
假设空间也可表示为条件概率的形式。

策略

统计学习的目的在于从数据中学习统计规律,具体而言是从假设空间中选出最优模型。

策略的含义是统计学系需要考虑按照什么样的准则学习或选择最优模型。

损失函数和风险函数

损失函数度量模型一次预测的好坏,风险函数度量平均一以下模型预测的好坏。

监督学习中输出值 f ( X ) f(X) f(X)和真实值Y会有一定的偏差,因此需要用一个损失函数或者代价函数来度量预测错误的程度。损失函数是 f ( X ) , Y f(X),Y f(X),Y的非负实值函数,记为 L ( f ( X ) , Y ) L(f(X),Y) L(f(X),Y)

常见的损失函数描述
0-1损失函数 L ( Y , f ( X ) ) = { 1 , Y ≠ f ( X ) 0 , Y = f ( X ) L(Y,f(X))=\{\begin{aligned}1,Y\not=f(X)\\0,Y=f(X)\end{aligned} L(Y,f(X))={1,Y=f(X)0,Y=f(X)
平方损失函数 L ( Y , f ( X ) ) = ( Y − f ( X ) ) 2 L(Y,f(X))=(Y-f(X))^2 L(Y,f(X))=(Yf(X))2
绝对损失函数 L ( Y , f ( X ) ) = ∣ Y − f ( X ) ∣ L(Y,f(X))=|Y-f(X)| L(Y,f(X))=Yf(X)
对数损失函数 L ( Y , P ( Y ∣ X ) ) = − log ⁡ P ( Y ∣ X ) L(Y,P(Y|X))=-\log P(Y|X) L(Y,P(YX))=logP(YX)

损失函数实际上二维随机变量的函数,其数学期望为: R e x p ( f ) = E P [ L ( Y , f ( X ) ) ] = ∫ X × Y L ( y , f ( x ) ) P ( x , y ) d x d y R_{exp}(f)=E_P[L(Y,f(X))]=\int_{\mathbb{X}\times\mathbb{Y}}L(y,f(x))P(x,y)dxdy Rexp(f)=EP[L(Y,f(X))]=X×YL(y,f(x))P(x,y)dxdy

这称为风险函数/期望损失/期望风险

那么学习的目的就是选择期望风险最小的模型。因为联合概率分布是未知的,所以期望风险不能直接计算。(如果X、Y、f都是已知的,这个风险损失直接分分钟算出啦)所以才需要进行学习。

下面将其与数理统计联系起来:
给定一个训练集 T = { ( x , y 1 ) , . . . , ( x , y n ) } T=\{(x,y_1),...,(x,y_n)\} T={(x,y1),...,(x,yn)},其平均损失统计量称为经验风险/经验损失,记作 R e m p ( f ) = 1 N ∑ i = 1 N L ( y i , f ( x i ) ) R_{emp}(f)=\frac{1}{N}\sum_{i=1}^NL(y_i,f(x_i)) Remp(f)=N1i=1NL(yi,f(xi))

不妨认为 L L L的分布是独立同分布的,那么根据辛钦大数定律,随着N趋向于无穷,经验风险依概率收敛于期望风险。

很自然的想法是通过经验风险估计期望风险
然而现实中训练样本数目有限,所以用经验风险估计期望风险并不理想,要对经验风险进行一定的矫正。这关系到监督学习的两个基本策略:经验风险最小化和结构风险最小化。

经验风险最小化与结构风险最小化

经验风险最小化的策略认为:经验风险最小的模型就是最优模型。

按照经验风险最小化(ERM)求解最优模型就是求解最优化问题: m i n f ∈ F 1 N ∑ i = 1 N L ( y i , f ( x i ) ) min_{f\in\mathbb{F}}\frac{1}{N}\sum_{i=1}^NL(y_i,f(x_i)) minfFN1i=1NL(yi,f(xi))
当样本容量足够大时,经验风险最小化能有很好的学习效果。当模型是条件概率分布、损失函数是对数损失函数时,经验风险最小化等价于极大似然估计(根据当前样本点,找到使经验损失最小的模型)。

结构风险最小化(SRM)是为了防止过拟合而提出的策略,其认为结构风险小的就是好的。结构风险最小化等价于正则化。结构风险在经验风险上加上了表示模型复杂度的正则化项: R s r m ( f ) = 1 N ∑ i = 1 N L ( y i , f ( x i ) ) + λ J ( f ) R_{srm}(f)=\frac{1}{N}\sum_{i=1}^NL(y_i,f(x_i))+\lambda J(f) Rsrm(f)=N1i=1NL(yi,f(xi))+λJ(f)
J ( f ) J(f) J(f)为模型的复杂度,是定义在假设空间上的泛函。 λ \lambda λ用于权衡经验风险和模型复杂度。

关键名词:损失函数、风险函数/期望损失/期望风险、经验风险、结构风险。

算法

算法是指学习模型的具体计算方法。

如果统计学习基于训练数据集,根据学习策略从假设空间选择最优模型,最后考虑用什么样的算法求解最优模型。那么统计学习就归结为最优化问题。

模型评估与模型选择(进一步探讨策略)

训练误差与测试误差

当损失函数给定时,基于损失函数的模型的训练误差和模型的测试误差就自然成为学习方法评估的标准。

统计学习方法采用的损失函数未必是评估时采用的损失函数。

训练误差是关于训练数据集的平均损失,测试误差也是同理。当损失是0-1损失时,就成为了误差率: e t e s t = 1 N ′ ∑ i = 1 N ′ I ( y i ≠ f ^ ( x i ) ) e_{test}=\frac{1}{N'}\sum_{i=1}^{N'}I(y_i\not =\hat{f}(x_i)) etest=N1i=1NI(yi=f^(xi))
相应的,还有准确率: r t e s t = 1 N ′ ∑ i = 1 N ′ I ( y i = f ^ ( x i ) ) r_{test}=\frac{1}{N'}\sum_{i=1}^{N'}I(y_i=\hat{f}(x_i)) rtest=N1i=1NI(yi=f^(xi))

测试误差度量了模型对未知数据的预测能力,也称为泛化能力。

过拟合与模型选择

如果假设空间存在一个真模型,那么我们希望训练得到的模型逼近真模型。

如果一味追求提高对训练数据的预测能力,所选模型的复杂度则往往会比真模型更高,这种现象称为过拟合。

过拟合指的是学习时选择的模型所包含的参数过多,以至出现这一模型对已知数据预测得很好,但对未知数据预测得很差的现象。

以一元曲线拟合为例

假设给定一个训练数据集T(特征标签对)。

我们的模型定义为一个M次多项式函数。目标是选择最有可能产生T中数据的M次多项式函数。

设M次多项式为 f M ( x , w ) = w 0 + w 1 x + w 2 x 2 + . . . + w M x M f_M(x,w)=w_0+w_1x+w_2x^2+...+w_Mx^M fM(x,w)=w0+w1x+w2x2+...+wMxM

其中 w i w_i wi为函数的参数,其组成的向量称为一个参数空间。

可以采用先确定模型复杂度(多项式最高次数)再经验风险最小化的策略。

我们采用平方损失函数,其经验风险最小化的函数为: L ( w ) = 1 2 ∑ i = 1 N ( f ( x i , w ) − y i ) 2 L(w)=\frac{1}{2}\sum_{i=1}^N(f(x_i,w)-y_i)^2 L(w)=21i=1N(f(xi,w)yi)2

显然这是一个无约束的优化问题,可以采用最小二乘法的方法求解。

可以看到:
在这里插入图片描述

可以看到,我们固定的最高次数/模型参数越大/多,模型越复杂,当超过真模型的复杂度时,出现了严重的过拟合。

也就是说,随着模型复杂程度提高,训练误差不断减小,测试误差先减小后增大。

综上所述,模型选择的最优化时选择复杂度适当的模型,以达到使测试误差最小的学习目的。

正则化与交叉验证(优化策略(过拟合)的方法)

正则化与交叉验证是两种常用的模型选择方法。

正则化

正则化是结构风险最小化策略的实现,是在经验风险上加一个正则化项。正则化项一般是模型复杂度的单调递增函数,模型越复杂,正则化值就越大。

常见的结构风险函数有:

  1. 基于L1范数: λ ∥ w ∥ 1 \lambda\|w\|_1 λw1
  2. 基于L2范数: λ ∥ w ∥ 2 \lambda\|w\|_2 λw2

正则化的作用是同时选择经验风险和模型复杂度同时较小的模型。

正则化符合奥卡姆剃刀原理:在所有可能选择的模型中,能够很好解释已知数据且十分简单才是最好的模型。从贝叶斯估计的角度来看,正则化项对应于模型的先验概率

交叉验证

如果样本数据充足,进行模型选择的一种简单方法是随机将数据集切分成三个部分:训练集、验证集和测试集。

训练集用于训练模型,验证集用于模型的选择,测试集用于最终对学习方法的评估。

简单交叉验证

  1. 随机将已给数据分为两部分:训练集、测试集。
  2. 用训练集在各种条件下(不同参数个数、超参数)训练模型;
  3. 在测试集上评价各个模型的测试误差,选出测试误差最小的模型。

这里测试集代替了训练集的作用。

S折交叉验证

  1. 随机将数据切分为S个互不相交、大小相同的子集;
  2. 利用S-1个子集的数据训练模型,剩下的子集测试模型;
  3. 将这一过程重复S次,选出平均测试误差最小的模型。

留一交叉验证

S折交叉验证的特殊情况,即S=N。

泛化能力(理论性的模型评估)

泛化误差

模型评估评的是模型对未知数据的预测能力,也称为泛化能力。所采用的测试误差往往依赖于测试数据集。统计学习理论常识从理论上对学习方法的泛化能力进行分析。

泛化误差的定义:
如果学到的模型是 f ^ \hat{f} f^,那么用这个模型对未知数据预测的误差即为泛化误差:
R e x p ( f ^ ) = E P [ L ( Y , f ^ ( X ) ) ] = ∫ X × Y L ( y , f ^ ( x ) ) d x d y R_{exp}(\hat{f})=E_P[L(Y,\hat{f}(X))]=\int_{\mathbb{X}\times\mathbb{Y}}L(y,\hat{f}(x))dxdy Rexp(f^)=EP[L(Y,f^(X))]=X×YL(y,f^(x))dxdy
泛化误差就是所学习得到的模型的期望风险。

泛化误差的上界

在介绍泛化误差上界之前,先介绍Hoeffding不等式
X 1 , . . . , X n X_1,...,X_n X1,...,Xn是独立随机变量,且 X i ∈ [ a i , b i ] X_i\in [a_i,b_i] Xi[ai,bi] X ˉ \bar{X} Xˉ是其经验均值,对任意 t > 0 t\gt0 t>0,以下不等式成立:
P [ X ˉ − E ( X ˉ ) ≥ t ] ≤ e x p ( − 2 N 2 t 2 ∑ i = 1 N ( b i − a i ) 2 ) P[\bar{X}-E(\bar{X})\ge t]\le exp(-\frac{2N^2t^2}{\sum_{i=1}^N(b_i-a_i)^2}) P[XˉE(Xˉ)t]exp(i=1N(biai)22N2t2)
P [ E ( X ˉ ) − X ˉ ≥ t ] ≤ e x p ( − 2 N 2 t 2 ∑ i = 1 N ( b i − a i ) 2 ) P[E(\bar{X})-\bar{X}\ge t]\le exp(-\frac{2N^2t^2}{\sum_{i=1}^N(b_i-a_i)^2}) P[E(Xˉ)Xˉt]exp(i=1N(biai)22N2t2)

在这里再复习一下切比雪夫不等式 P ( ∣ X − μ ∣ ≥ ε ) ≤ σ 2 ε 2 P(|X-\mu|\ge \varepsilon)\le \frac{\sigma^2}{\varepsilon^2} P(Xμε)ε2σ2,马尔可夫、切比雪夫、切尔诺夫、霍夫丁不等式的详细推导参照这篇文章

接下来,介绍二分类问题的泛化误差上界
关于 f f f的期望风险和经验风险分别为: R ( f ) = E [ L ( Y , f ( X ) ) ] , R ^ ( f ) 1 N ∑ i = 1 N L ( y i ) f ( x i ) R(f)=E[L(Y,f(X))],\hat{R}(f)\frac{1}{N}\sum_{i=1}^NL(y_i)f(x_i) R(f)=E[L(Y,f(X))],R^(f)N1i=1NL(yi)f(xi)
经验风险最小化最小化函数是 f N = arg min ⁡ f ∈ F R ^ ( f ) f_N=\argmin_{f\in \mathbb{F}}\hat R(f) fN=fFargminR^(f)
其中 f N f_N fN是依赖于训练数据集的样本容量的。 f N f_N fN的泛化能力(理论层面上)/泛化误差定义为 R ( f N ) = E [ L ( Y , f N ( X ) ) ] R(f_N)=E[L(Y,f_N(X))] R(fN)=E[L(Y,fN(X))]

于是,泛化上界定义为:对于二分类问题,当假设空间是有限个函数的集合(包含d个函数)时,对任意一个函数 f f f,至少以概率 1 − δ , 0 < δ < 1 1-\delta,0\lt \delta\lt 1 1δ,0<δ<1,以下不等式成立 R ( f ) ≤ R ^ ( f ) + ε ( d , N , δ ) , ε ( d , N , δ ) = 1 2 N ( log ⁡ d + log ⁡ 1 δ ) R(f)\le \hat R(f)+\varepsilon(d,N,\delta),\varepsilon(d,N,\delta)=\sqrt{\frac{1}{2N}(\log d+\log\frac{1}{\delta})} R(f)R^(f)+ε(d,N,δ),ε(d,N,δ)=2N1(logd+logδ1)
说明:

  1. 右侧第一项是训练误差,训练误差越小,泛化误差也越小;
  2. 第二项是N的单调递减函数,当N趋于无穷时趋于0;
  3. 第二项也是 log ⁡ d \sqrt{\log d} logd 阶的函数,包含的函数越多,值越大;
  4. 这里只是有限个函数情况下的泛化误差上界,对一半的假设空间要找到泛化误差界就不简单了;
  5. 根据证明过程 δ = d e x p ( − 2 N 2 ε 2 ) \delta=dexp(-2N^2\varepsilon^2) δ=dexp(2N2ε2)

在机器学习中,霍夫丁不等式(损失肯定在[0,1])可以写为 P ( R ( f ) − R ^ ( f ) ≥ t ) ≤ e x p ( − 2 N 2 ε 2 ) P(R(f)-\hat R(f)\ge t)\le exp(-2N^2\varepsilon^2) P(R(f)R^(f)t)exp(2N2ε2)

生成模型和判别模型(监督学习的模型分类)

监督学习方法可以分为生成方法和判别方法。所学到的模型分别称为生成模型和判别模型。

类型描述
生成模型原理上由数据学习联合概率分布,然后求出条件概率分布作为预测的模型,这一整个过程可以抽象为 P ( Y ∣ X ) = P ( X , Y ) P ( X ) P(Y|X)=\frac{P(X,Y)}{P(X)} P(YX)=P(X)P(X,Y),该模型表示了给定输入,产生Y的生成关系。典型的生成模型有朴素贝叶斯方法和隐马尔可夫模型
判别模型由数据直接学习决策函数或者条件概率分布作为预测模型,即判别模型。判别方法关心的是对给定的输入X,应该预测什么样的Y,比如逻辑斯蒂回归、支持向量机等。
类型优点缺点
生成模型可以还原出联合概率分布;收敛速度快,当样本容量增加时,学到的模型可以更快收敛于真实模型;存在隐变量时,仍然可以用生成模型判别模型的优点是生成模型所缺的
判别模型直接学习决策函数/条件概率分布,面对预测,准确率高;由于是直接的学习,所以可以对数据进行各种程度上的抽象、定义特征并使用特征,简化学习问题生成模型的优点是判别模型所缺的
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

右边是我女神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值