2021-07-13

Datawhale组队学习之集成学习——Task1 数学基础

集成学习

高等数学

  1. 函数的定义
    定义:设数集 D ⊂ R ,  则称映射  f : D → R  为定义在  D  上的函数,通常简记为  D \subset {\mathbf{R}}, \text { 则称映射 } f: D \rightarrow \mathbf{R} \text { 为定义在 } D \text { 上的函数,通常简记为 } DR, 则称映射 f:DR 为定义在 D 上的函数,通常简记为 
    y = f ( x ) , x ∈ D y=f(x), x \in D y=f(x),xD
    函数定义中,对每个 x ∈ D x \in D xD,按对应法则 f f f,总有唯一确定的值 y y y 与之对应, 这个值称为函数 f f f x x x 处的函数值,记作 f ( x ) , f(x), f(x), y = f ( x ) . y=f(x) . y=f(x). 因变量 y y y 与自变量 x x x 之间的这种依赖关系,通常称为函数关系. 函数值 f ( x ) f(x) f(x) 的全体所构成的集合称为函数 f f f 的值域,记作 R f R_{f} Rf f ( D ) , f(D), f(D),
    R f = f ( D ) = { y ∣ y = f ( x ) , x ∈ D } R_{f}=f(D)=\{y \mid y=f(x), x \in D\} Rf=f(D)={yy=f(x),xD}
    说白了,函数就是实数集到实数集的一个映射,如:
    y = ∣ x ∣ = { x , x ⩾ 0 − x , x < 0 y=|x|=\left\{\begin{array}{ll} x, & x \geqslant 0 \\ -x, & x<0 \end{array}\right. y=x={x,x,x0x<0
    的定义域 D = ( − ∞ , + ∞ ) , D=(-\infty,+\infty), D=(,+), 值域 R f = [ 0 , + ∞ ) R_{f}=[0,+\infty) Rf=[0,+)

  2. 复合函数
    设函数 y = f ( u ) y=f(u) y=f(u) 的定义城为 D f , D_{f}, Df, 函数 u = g ( x ) u=g(x) u=g(x) 的定义域为 D x , D_{x}, Dx, 且其值域 R g ⊂ D t , R_{g} \subset D_{t}, RgDt, 则由下式确定的函数
    y = f [ g ( x ) ] , x ∈ D x y=f[g(x)], \quad x \in D_{x} y=f[g(x)],xDx
    称为由函数 u = g ( x ) u=g(x) u=g(x) 与函数 y = f ( u ) y=f(u) y=f(u) 构成的复合函数,它的定义域为 D x D_{x} Dx ,变量 u u u 称为中间变量。

例子:物体运动的动能为 E = m v 2 / 2 , E=m v^{2} / 2, E=mv2/2, 而自由落体的速度为 v = g t , v=g t, v=gt, 所以自由落体的动能是时间 t t t 的复合函数 :
E = 1 2 m g 2 t 2 E=\frac{1}{2} m g^{2} t^{2} E=21mg2t2
3. 导数
定义:设函数 y = f ( x ) y=f(x) y=f(x) 在点 x 0 x_{0} x0 的某个邻域内有定义,当自变量 x x x x 0 x_{0} x0 处取得增量
Δ x \Delta x Δx ;如果 Δ y \Delta y Δy Δ x \Delta x Δx 之比当 Δ x → 0 \Delta x \rightarrow 0 Δx0 时的 极限存在, 则称函数 y = y= y= f ( x ) f(x) f(x) 在点 x 0 x_{0} x0 处可导,并称这个极限为函数 y = f ( x ) y=f(x) y=f(x) 在点 x 0 x_{0} x0 处的导数,记为 f ′ ( x 0 ) , f^{\prime}\left(x_{0}\right), f(x0),
f ′ ( x 0 ) = lim ⁡ Δ , x → 0 Δ y Δ x = lim ⁡ Δ x → 0 f ( x 0 + Δ x ) − f ( x 0 ) Δ x f^{\prime}\left(x_{0}\right)=\lim _{\Delta, x \rightarrow 0} \frac{\Delta y}{\Delta x}=\lim _{\Delta x \rightarrow 0} \frac{f\left(x_{0}+\Delta x\right)-f\left(x_{0}\right)}{\Delta x} f(x0)=Δ,x0limΔxΔy=Δx0limΔxf(x0+Δx)f(x0)
也可记作 y ′ ∣ x = x 0 \left.y^{\prime}\right|_{x=x_{0}} yx=x0, d y   d x ∣ x = x 0 \left.\frac{\mathrm{d} y}{\mathrm{~d} x}\right|_{x=x_{0}}  dxdyx=x0 .

若函数 y = f ( x ) y=f(x) y=f(x) 的导数 y ′ = f ′ ( x ) y^{\prime}=f^{\prime}(x) y=f(x) 可导,则称 f ′ ( x ) f^{\prime}(x) f(x) 的导数为 f ( x ) f(x) f(x) 的二阶导数,记作 y ′ ′ y^{\prime \prime} y d 2 y d x 2 , \frac{d^{2} y}{d x^{2}}, dx2d2y,
y ′ ′ = ( y ′ ) ′  或  d 2 y d x 2 = d d x ( d y d x ) y^{\prime \prime}=\left(y^{\prime}\right)^{\prime} \text { 或 } \frac{d^{2} y}{d x^{2}}=\frac{d}{d x}\left(\frac{d y}{d x}\right) y=(y)  dx2d2y=dxd(dxdy)
类似地,二阶导数的导数称为三阶导数,依次类推。二阶和二阶以上的导数统称为高阶导数

定义:
设二元函数 = f ( x , y ) =f(x, y) =f(x,y) 在点 ( x 0 , y 0 ) \left(x_{0}, y_{0}\right) (x0,y0) 的某一邻域内有定义,当固定在 y 0 y_{0} y0 而x在 x 0 x_{0} x0 处有增量 Δ x \Delta x Δx时, 相应的函数有增量 Δ x z = f ( x 0 + Δ x , y 0 ) − f ( x 0 , y 0 ) . \Delta_{x} z=f\left(x_{0}+\Delta x, y_{0}\right)-f\left(x_{0}, y_{0}\right) . Δxz=f(x0+Δx,y0)f(x0,y0).
如果 lim ⁡ Δ x → 0 Δ x z Δ x \lim _{\Delta x \rightarrow 0} \frac{\Delta_{x} z}{\Delta x} limΔx0ΔxΔxz 存在,就称此极限为函数 z = f ( x , y ) z=f(x, y) z=f(x,y)
在点( x 0 , y 0 ) \left.x_{0}, y_{0}\right) x0,y0) 处对x的偏导数.
记作 ∂ z ∂ x ∣ ( x 0 , y 0 ) , ∂ f ∂ x ∣ ( x 0 , y 0 ) , z x ∣ ( x 0 , y 0 ) , f x ( x 0 , y 0 ) . \frac{\partial z}{\partial x}\left|\left(x_{0}, y_{0}\right), \frac{\partial f}{\partial x}\right|\left(x_{0}, y_{0}\right)^{, z_{x} \mid\left(x_{0}, y_{0}\right)}, f_{x}\left(x_{0}, y_{0}\right) . xz(x0,y0),xf(x0,y0),zx(x0,y0),fx(x0,y0).
∂ z ∂ x ∣ ( x 0 , y 0 ) = lim ⁡ Δ x → 0 Δ x z Δ x = lim ⁡ Δ x → 0 f ( x 0 + Δ x , y 0 ) − f ( x 0 , y 0 ) Δ x \left.\frac{\partial z}{\partial x}\right|_{\left(x_{0}, y_{0}\right)}=\lim _{\Delta x \rightarrow 0} \frac{\Delta_{x} z}{\Delta x}=\lim _{\Delta x \rightarrow 0} \frac{f\left(x_{0}+\Delta x, y_{0}\right)-f\left(x_{0}, y_{0}\right)}{\Delta x} xz(x0,y0)=limΔx0ΔxΔxz=limΔx0Δxf(x0+Δx,y0)f(x0,y0)

  1. 梯度向量
    梯度的本意是一个向量(矢量),表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模)。
    定义:设二元函数 z = f ( x , y ) z=f(x, y) z=f(x,y) 在平面区域D上具有一阶连续偏导数,则对于每一个点P(x, y)都可定出一个向量 { ∂ f ∂ x , ∂ f ∂ y } = f x ( x , y ) i ˉ + f y ( x , y ) j ˉ , \left\{\frac{\partial f}{\partial x}, \frac{\partial f}{\partial y}\right\}=f_{x}(x, y) \bar{i}+f_{y}(x, y) \bar{j}, {xf,yf}=fx(x,y)iˉ+fy(x,y)jˉ, 该函数就称为函数 z = f ( x , y ) z=f(x, y) z=f(x,y) 在点P ( x , y ) (\mathrm{x}, \mathrm{y}) (x,y) 的梯度,记作gradf ( x , y ) (\mathrm{x}, \mathrm{y}) (x,y)
    ∇ f ( x , y ) \nabla f(x, y) f(x,y),即有:
    gradf ⁡ ( x , y ) = ∇ f ( x , y ) = { ∂ f ∂ x , ∂ f ∂ y } = f x ( x , y ) i ˉ + f y ( x , y ) j ˉ \operatorname{gradf}(\mathrm{x}, \mathrm{y})=\nabla f(x, y)=\left\{\frac{\partial f}{\partial x}, \frac{\partial f}{\partial y}\right\}=f_{x}(x, y) \bar{i}+f_{y}(x, y) \bar{j} gradf(x,y)=f(x,y)={xf,yf}=fx(x,y)iˉ+fy(x,y)jˉ
    其中 ∇ = ∂ ∂ x i ˉ + ∂ ∂ y j ˉ \nabla=\frac{\partial}{\partial x} \bar{i}+\frac{\partial}{\partial y} \bar{j} =xiˉ+yjˉ 称为(二维的)向量微分算子或Nabla算子, ∇ f = ∂ f ∂ x i ˉ + ∂ f ∂ y j ˉ \nabla f=\frac{\partial f}{\partial x} \bar{i}+\frac{\partial f}{\partial y} \bar{j} f=xfiˉ+yfjˉ

  2. 雅克比矩阵(Jacobian矩阵)
    假设 F : R n → R m F: \mathbb{R}_{n} \rightarrow \mathbb{R}_{m} F:RnRm 是一个从n维欧氏空间映射到到m维欧氏空间的函数。
    这个函数由m个实函数组成:
    y 1 ( x 1 , ⋯   , x n ) , ⋯   , y m ( x 1 , ⋯   , x n ) y_{1}\left(x_{1}, \cdots, x_{n}\right), \cdots, y_{m}\left(x_{1}, \cdots, x_{n}\right) y1(x1,,xn),,ym(x1,,xn) 。这些函数的偏导数(如果存在)可以组成一个m行n列的矩阵,这个矩阵就是所谓的雅可 比矩阵:
    [ ∂ y 1 ∂ x 1 ⋯ ∂ y 1 ∂ x n ⋮ ⋱ ⋮ ∂ y m ∂ x 1 ⋯ ∂ y m ∂ x n ] \left[\begin{array}{ccc} \frac{\partial y_{1}}{\partial x_{1}} & \cdots & \frac{\partial y_{1}}{\partial x_{n}} \\ \vdots & \ddots & \vdots \\ \frac{\partial y_{m}}{\partial x_{1}} & \cdots & \frac{\partial y_{m}}{\partial x_{n}} \end{array}\right] x1y1x1ymxny1xnym
    可见,梯度向量是雅克比矩阵的特例!

  3. 海森矩阵(Hessian 矩阵)
    黑塞矩阵(Hessian Matrix),又译作海森矩阵、海瑟矩阵、海塞矩阵等,是一个多元函数的二阶偏导数构成的方阵,描述了函数的局部曲率。
    在数学中,海森矩阵(Hessian matrix 或 Hessian)是一个自变量为向量的实值函数的二阶偏导数组成的方块矩阵,假設有一实数函数
    f ( x 1 , x 2 , … , x n ) f\left(x_{1}, x_{2}, \ldots, x_{n}\right) f(x1,x2,,xn)
    如果 f f f 所有的二阶偏导数都存在,那么 f f f 的海森矩阵的第 i j i j ij 项,即:
    H ( f ) i j ( x ) = D i D j f ( x ) H(f)_{i j}(x)=D_{i} D_{j} f(x) H(f)ij(x)=DiDjf(x)
    其中 x = ( x 1 , x 2 , … , x n ) , x=\left(x_{1}, x_{2}, \ldots, x_{n}\right), x=(x1,x2,,xn),
    H ( f ) = [ ∂ 2 f ∂ x 1 2 ∂ 2 f ∂ x 1 ∂ x 2 ⋯ ∂ 2 f ∂ x 1 ∂ x n ∂ 2 f ∂ x 2 ∂ x 1 ∂ 2 f ∂ x 2 2 ⋯ ∂ 2 f ∂ x 2 ∂ x n ⋮ ⋮ ⋱ ⋮ ∂ 2 f ∂ x n ∂ x 1 ∂ 2 f ∂ x n ∂ x 2 ⋯ ∂ 2 f ∂ x n 2 ] H(f)=\left[\begin{array}{cccc} \frac{\partial^{2} f}{\partial x_{1}^{2}} & \frac{\partial^{2} f}{\partial x_{1} \partial x_{2}} & \cdots & \frac{\partial^{2} f}{\partial x_{1} \partial x_{n}} \\ \frac{\partial^{2} f}{\partial x_{2} \partial x_{1}} & \frac{\partial^{2} f}{\partial x_{2}^{2}} & \cdots & \frac{\partial^{2} f}{\partial x_{2} \partial x_{n}} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial^{2} f}{\partial x_{n} \partial x_{1}} & \frac{\partial^{2} f}{\partial x_{n} \partial x_{2}} & \cdots & \frac{\partial^{2} f}{\partial x_{n}^{2}} \end{array}\right] H(f)=x122fx2x12fxnx12fx1x22fx222fxnx22fx1xn2fx2xn2fxn22f
    实际上,Hessian矩阵是梯度向量g(x)对自变量x的Jacobian矩阵。

  4. 函数极值问题

一元函数框架下:

1.判定极值的一阶充分条件:
设函数 f ( x ) f(x) f(x) x 0 x_{0} x0 处连续,且在 x 0 x_{0} x0 的某去心邻域 U ( x 0 , δ ) U\left(x_{0}, \delta\right) U(x0,δ) 内可导
(1) 若 x ∈ ( x 0 − δ , x 0 ) x \in\left(x_{0}-\delta, x_{0}\right) x(x0δ,x0) 时, f ′ ( x ) > 0 , f^{\prime}(x)>0, f(x)>0, x ∈ ( x 0 , x 0 + δ ) x \in\left(x_{0}, x_{0}+\delta\right) x(x0,x0+δ) 时, f ′ ( x ) < 0 , f^{\prime}(x)<0, f(x)<0, f ( x ) f(x) f(x) x 0 x_{0} x0 处取得极大值;
(2) 若 x ∈ ( x 0 − δ , x 0 ) x \in\left(x_{0}-\delta, x_{0}\right) x(x0δ,x0) 时, f ′ ( x ) < 0 f^{\prime}(x)<0 f(x)<0,而 x ∈ ( x 0 , x 0 + δ ) x \in\left(x_{0}, x_{0}+\delta\right) x(x0,x0+δ) 时, f ′ ( x ) > 0 f^{\prime}(x)>0 f(x)>0,则 f ( x ) f(x) f(x) x 0 x_{0} x0 处取得极小值
(3) 若 x ∈ U ˙ ( x 0 , δ ) x \in \dot{U}\left(x_{0}, \delta\right) xU˙(x0,δ) 时, f ′ ( x ) f^{\prime}(x) f(x) 的符号保持不变,则 f ( x ) f(x) f(x) x 0 x_{0} x0 处没有极值

2.判定极值的二阶充分条件:
设函数 f ( x ) f(x) f(x) x 0 x_{0} x0 处具有二阶导数且 f ′ ( x 0 ) = 0 , f ′ ′ ( x 0 ) ≠ 0 f^{\prime}\left(x_{0}\right)=0, \quad f^{\prime \prime}\left(x_{0}\right) \neq 0 f(x0)=0,f(x0)=0 那么:
(1) 当 f ′ ′ ( x 0 ) < 0 f^{\prime \prime}\left(x_{0}\right)<0 f(x0)<0 时,函数 f ( x ) f(x) f(x) x 0 x_{0} x0 处取得极大值;
(2) 当 f ′ ′ ( x 0 ) > 0 f^{\prime \prime}\left(x_{0}\right)>0 f(x0)>0 时,函数 f ( x ) f(x) f(x) x 0 x_{0} x0 处取得极小值.

多元函数框架下:
定理:(二元函数取得极值的充分条件)如果函数 z = f ( x , y ) z=f(x, y) z=f(x,y) 在点 ( x 0 , y 0 ) \left(x_{0}, y_{0}\right) (x0,y0) 的某邻域内具有连续的二阶偏导数, ( x 0 , y 0 ) \left(x_{0}, y_{0}\right) (x0,y0) 是它的驻点,令:
A = f x x ( x 0 , y 0 ) , B = f x y ( x 0 , y 0 ) , C = f y y ( x 0 , y 0 ) Δ = B 2 − A C \begin{array}{c} A=f_{x x}\left(x_{0}, y_{0}\right), B=f_{x y}\left(x_{0}, y_{0}\right), C=f_{y y}\left(x_{0}, y_{0}\right) \\ \Delta=B^{2}-A C \end{array} A=fxx(x0,y0),B=fxy(x0,y0),C=fyy(x0,y0)Δ=B2AC
则:
(1)当 Δ < 0 \Delta<0 Δ<0 时, f ( x , y ) f(x, y) f(x,y) ( x 0 , y 0 ) \left(x_{0}, y_{0}\right) (x0,y0) 取得极值. 其中 A > 0 A>0 A>0 时取极小值, A < 0 A<0 A<0 时取极大值.
(2)当 Δ > 0 \Delta>0 Δ>0 时, f ( x 0 , y 0 ) f\left(x_{0}, y_{0}\right) f(x0,y0) 不是极值.
(3)当 Δ = 0 \Delta=0 Δ=0 时, 不能确定,需进一步判断.

更加严谨的表述:
设n多元实函数 f ( x 1 , x 2 , ⋯   , x n ) f\left(x_{1}, x_{2}, \cdots, x_{n}\right) f(x1,x2,,xn) 在点 M 0 ( a 1 , a 2 , … , a n ) M_{0}\left(a_{1}, a_{2}, \ldots, a_{n}\right) M0(a1,a2,,an) 的邻域内有二阶连续偏导,若有:
∂ f ∂ x j ∣ ( a 1 , a 2 , … , a n ) = 0 , j = 1 , 2 , … , n \left.\frac{\partial f}{\partial x_{j}}\right|_{\left(a_{1}, a_{2}, \ldots, a_{n}\right)}=0, j=1,2, \ldots, n xjf(a1,a2,,an)=0,j=1,2,,n
并且
A = [ ∂ 2 f ∂ x 1 2 ∂ 2 f ∂ x 1 ∂ x 2 ⋯ ∂ 2 f ∂ x 1 ∂ x n ∂ 2 f ∂ x 2 ∂ x 1 ∂ 2 f ∂ x 2 2 ⋯ ∂ 2 f ∂ x 2 ∂ x n ⋮ ⋮ ⋱ ⋮ ∂ 2 f ∂ x n ∂ x 1 ∂ 2 f ∂ x n ∂ x 2 ⋯ ∂ 2 f ∂ x n 2 ] A=\left[\begin{array}{cccc} \frac{\partial^{2} f}{\partial x_{1}^{2}} & \frac{\partial^{2} f}{\partial x_{1} \partial x_{2}} & \cdots & \frac{\partial^{2} f}{\partial x_{1} \partial x_{n}} \\ \frac{\partial^{2} f}{\partial x_{2} \partial x_{1}} & \frac{\partial^{2} f}{\partial x_{2}^{2}} & \cdots & \frac{\partial^{2} f}{\partial x_{2} \partial x_{n}} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial^{2} f}{\partial x_{n} \partial x_{1}} & \frac{\partial^{2} f}{\partial x_{n} \partial x_{2}} & \cdots & \frac{\partial^{2} f}{\partial x_{n}^{2}} \end{array}\right] A=x122fx2x12fxnx12fx1x22fx222fxnx22fx1xn2fx2xn2fxn22f
则有如下结果:
(1) 当A正定矩阵时, f ( x 1 , x 2 , ⋯   , x n ) f\left(x_{1}, x_{2}, \cdots, x_{n}\right) f(x1,x2,,xn) M 0 ( a 1 , a 2 , … , a n ) M_{0}\left(a_{1}, a_{2}, \ldots, a_{n}\right) M0(a1,a2,,an) 处是极小值;
(2) 当A负定矩阵时, f ( x 1 , x 2 , ⋯   , x n ) f\left(x_{1}, x_{2}, \cdots, x_{n}\right) f(x1,x2,,xn) M 0 ( a 1 , a 2 , … , a n ) M_{0}\left(a_{1}, a_{2}, \ldots, a_{n}\right) M0(a1,a2,,an) 处是极大值;
(3) 当A不定矩阵时, M 0 ( a 1 , a 2 , … , a n ) M_{0}\left(a_{1}, a_{2}, \ldots, a_{n}\right) M0(a1,a2,,an) 不是极值点。
(4) 当A为半正定矩阵或半负定矩阵时, M 0 ( a 1 , a 2 , … , a n ) M_{0}\left(a_{1}, a_{2}, \ldots, a_{n}\right) M0(a1,a2,,an) 是“可疑"极值点,尚需要利用其他方法来判定。

例子:求三元函数 f ( x , y , z ) = x 2 + y 2 + z 2 + 2 x + 4 y − 6 z f(x, y, z)=x^{2}+y^{2}+z^{2}+2 x+4 y-6 z f(x,y,z)=x2+y2+z2+2x+4y6z 的极值。
解: 因为 ∂ f ∂ x = 2 x + 2 , ∂ f ∂ y = 2 y + 4 , ∂ f ∂ z = 2 z − 6 , \frac{\partial f}{\partial x}=2 x+2, \frac{\partial f}{\partial y}=2 y+4, \frac{\partial f}{\partial z}=2 z-6, xf=2x+2,yf=2y+4,zf=2z6, 故该三元函数的驻点是 (-1,-2,3) 。
又因为 ∂ 2 f ∂ x 2 = 2 , ∂ 2 f ∂ y 2 = 2 , ∂ 2 f ∂ z 2 = 2 , ∂ 2 f ∂ x ∂ y = 0 , ∂ 2 f ∂ x ∂ z = 0 , ∂ 2 f ∂ y ∂ z = 0 \frac{\partial^{2} f}{\partial x^{2}}=2, \frac{\partial^{2} f}{\partial y^{2}}=2, \frac{\partial^{2} f}{\partial z^{2}}=2, \frac{\partial^{2} f}{\partial x \partial y}=0, \frac{\partial^{2} f}{\partial x \partial z}=0, \frac{\partial^{2} f}{\partial y \partial z}=0 x22f=2,y22f=2,z22f=2,xy2f=0,xz2f=0,yz2f=0
故有: A = ( 2 0 0 0 2 0 0 0 2 ) A=\left(\begin{array}{ccc}2 & 0 & 0 \\ 0 & 2 & 0 \\ 0 & 0 & 2\end{array}\right) A=200020002
因为A是正定矩阵,故 (-1,-2,3) 是极小值点,且极小值 f ( − 1 , − 2 , 3 ) = − 14 f(-1,-2,3)=-14 f(1,2,3)=14

  1. 泰勒公式
    泰勒公式就是用一个多项式函数去逼近一个给定的函数(即尽量使多项式函数图像拟合给定的函数图像)。如果一个非常复杂函数,想求其某点的值,直接求无法实现,这时候可以使用泰勒公式去近似的求该值,这是泰勒公式的应用之一。泰勒公式在机器学习中主要应用于梯度迭代。
    定义:设 n n n 是一个正整数。如果定义在一个包含a的区间上的函数 f f f a a a 点处 n + 1 n+1 n+1 次可导,那么对于这个区间上的任意 x x x 都有:
    f ( x ) = f ( a ) 0 ! + f ′ ( a ) 1 ! ( x − a ) + f ′ ′ ( a ) 2 ! ( x − a ) 2 + ⋯ + f ( n ) ( a ) n ! ( x − a ) n + R n ( x ) = ∑ n = 0 N f ( n ) ( a ) n ! ( x − a ) n + R n ( x ) \begin{array}{c} f(x)=\frac{f(a)}{0 !}+\frac{f^{\prime}(a)}{1 !}(x-a)+\frac{f^{\prime \prime}(a)}{2 !}(x-a)^{2}+\cdots+\frac{f^{(n)}(a)}{n !}(x-a)^{n}+R_{n}(x) \\ =\sum_{n=0}^{N} \frac{f^{(n)}(a)}{n !}(x-a)^{n}+R_{n}(x) \end{array} f(x)=0!f(a)+1!f(a)(xa)+2!f(a)(xa)2++n!f(n)(a)(xa)n+Rn(x)=n=0Nn!f(n)(a)(xa)n+Rn(x)
    其中的多项式称为函数在a处的泰勒展开式, R n ( x ) R_{n}(x) Rn(x) 是泰勒公式的余项。

  2. 例子
    1、基于梯度的优化方法–梯度下降法

import numpy as np
import matplotlib.pyplot as plt


def f(x):
    return np.power(x, 2)

def d_f_1(x):
    '''
    求导数的方式1
    '''
    return 2.0 * x

def d_f_2(f, x, delta=1e-4):
    '''
    求导数的第二种方法
    '''
    return (f(x+delta) - f(x-delta)) / (2 * delta)


# plot the function
xs = np.arange(-10, 11)
plt.plot(xs, f(xs))


learning_rate = 0.1
max_loop = 30

x_init = 10.0
x = x_init
lr = 0.1
x_list = []
for i in range(max_loop):
    #d_f_x = d_f_1(x)
    d_f_x = d_f_2(f, x)
    x = x - learning_rate * d_f_x
    x_list.append(x)
x_list = np.array(x_list)
plt.scatter(x_list,f(x_list),c="r")
plt.show()

print('initial x =', x_init)
print('arg min f(x) of x =', x)
print('f(x) =', f(x))


initial x = 10.0
arg min f(x) of x = 0.012379400392859128
f(x) = 0.00015324955408672073

2、基于梯度的优化方法–牛顿迭代法

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import time
%matplotlib inline
from mpl_toolkits.mplot3d import Axes3D
class Rosenbrock():
    def __init__(self):
        self.x1 = np.arange(-100, 100, 0.0001)
        self.x2 = np.arange(-100, 100, 0.0001)
        #self.x1, self.x2 = np.meshgrid(self.x1, self.x2)
        self.a = 1
        self.b = 1
        self.newton_times = 1000
        self.answers = []
        self.min_answer_z = []


    # 准备数据
    def data(self):
        z = np.square(self.a - self.x1) + self.b * np.square(self.x2 - np.square(self.x1))
        #print(z.shape)
        return z

    # 随机牛顿
    def snt(self,x1,x2,z,alpha):
        rand_init = np.random.randint(0,z.shape[0])
        x1_init,x2_init,z_init = x1[rand_init],x2[rand_init],z[rand_init]
        x_0 =np.array([x1_init,x2_init]).reshape((-1,1))
        #print(x_0)


        for i in range(self.newton_times):
            x_i = x_0 - np.matmul(np.linalg.inv(np.array([[12*x2_init**2-4*x2_init+2,-4*x1_init],[-4*x1_init,2]])),np.array([4*x1_init**3-4*x1_init*x2_init+2*x1_init-2,-2*x1_init**2+2*x2_init]).reshape((-1,1)))
            x_0 = x_i
            x1_init = x_0[0,0]
            x2_init = x_0[1,0]
        answer = x_0
        return answer


    # 绘图
    def plot_data(self,min_x1,min_x2,min_z):
        x1 = np.arange(-100, 100, 0.1)
        x2 = np.arange(-100, 100, 0.1)
        x1, x2 = np.meshgrid(x1, x2)
        a = 1
        b = 1
        z = np.square(a - x1) + b * np.square(x2 - np.square(x1))
        fig4 = plt.figure()
        ax4 = plt.axes(projection='3d')
        ax4.plot_surface(x1, x2, z, alpha=0.3, cmap='winter')  # 生成表面, alpha 用于控制透明度
        ax4.contour(x1, x2, z, zdir='z', offset=-3, cmap="rainbow")  # 生成z方向投影,投到x-y平面
        ax4.contour(x1, x2, z, zdir='x', offset=-6, cmap="rainbow")  # 生成x方向投影,投到y-z平面
        ax4.contour(x1, x2, z, zdir='y', offset=6, cmap="rainbow")  # 生成y方向投影,投到x-z平面
        ax4.contourf(x1, x2, z, zdir='y', offset=6, cmap="rainbow")  # 生成y方向投影填充,投到x-z平面,contourf()函数
        ax4.scatter(min_x1,min_x2,min_z,c='r')
        # 设定显示范围
        ax4.set_xlabel('X')
        ax4.set_ylabel('Y')
        ax4.set_zlabel('Z')
        plt.show()

    # 开始
    def start(self):
        times = int(input("请输入需要随机优化的次数:"))
        alpha = float(input("请输入随机优化的步长"))
        z = self.data()
        start_time = time.time()
        for i in range(times):
            answer = self.snt(self.x1,self.x2,z,alpha)
            self.answers.append(answer)
        min_answer = np.array(self.answers)
        for i in range(times):
            self.min_answer_z.append((1-min_answer[i,0,0])**2+(min_answer[i,1,0]-min_answer[i,0,0]**2)**2)
        optimal_z = np.min(np.array(self.min_answer_z))
        optimal_z_index = np.argmin(np.array(self.min_answer_z))
        optimal_x1,optimal_x2 = min_answer[optimal_z_index,0,0],min_answer[optimal_z_index,1,0]
        end_time = time.time()
        running_time = end_time-start_time
        print("优化的时间:%.2f秒!" % running_time)
        self.plot_data(optimal_x1,optimal_x2,optimal_z)
if __name__ == '__main__':
    snt = Rosenbrock()
    snt.start()

请输入需要随机优化的次数:100
请输入随机优化的步长0.001
优化的时间:1.91秒!
在这里插入图片描述

随机事件与概率

  1. 随机试验、条件概率、事件的独立性

随机试验
试验是指为了察看某事的结果或某物的性能而从事的某种活动. 在概率论与数理统计中,一个试验如果具有以下3个特点:

  • (1) 可重复性: 在相同条件下可以重复进行:
  • (2) 可观察性: 每次试验的可能结果不止一个,并且能事先明确试验的所有可能结果:
  • (3) 不确定性: 一次试验之前,不能预知会出现哪一个结果。 就称这样的试验是一个随机试验,也简称为试验。

样本点和样本空间
每次试验的每一个结果称为基本事件,也称作样本点,记作 w 1 , w 2 , ⋯ w_{1}, w_{2}, \cdots w1,w2, 全部样本点的集合称为样本空间,记作 Ω , \Omega, Ω, Ω = \Omega= Ω= { w 1 , w 2 , ⋯   } \left\{w_{1}, w_{2}, \cdots\right\} {w1,w2,}

定义:设 A , B A, B A,B 是两个事件,且 P ( A ) > 0 , P(A)>0, P(A)>0, 则称
P ( B ∣ A ) = P ( A B ) P ( A ) P(B \mid A)=\frac{P(A B)}{P(A)} P(BA)=P(A)P(AB)
为在事件A发生的条件下,事件B的条件概率

定义:如果事件B发生的可能性不受事件A发生与否的影响,即
P ( B ∣ A ) = P ( B ) P(B \mid A)=P(B) P(BA)=P(B)
则称事件B对于事件A独立.显然,若B对于A独立,则 A A A 对于 B B B 也一定独立,称事件 A A A 与事件 B B B 相互独立.

  1. 全概率公式和贝叶斯公式
    1、全概率公式
    定义:如果事件 A 1 , A 2 , ⋯   , A n A_{1}, A_{2}, \cdots, A_{n} A1,A2,,An 是一个完备事件组,并且都具有正概率,则有:
    P ( B ) = P ( A 1 ) P ( B ∣ A 1 ) + P ( A 2 ) P ( B ∣ A 2 ) + ⋯ + P ( A n ) P ( B ∣ A n ) = ∑ i = 1 n P ( A i ) P ( B ∣ A i ) \begin{array}{c} P(B)=P\left(A_{1}\right) P\left(B \mid A_{1}\right)+P\left(A_{2}\right) P\left(B \mid A_{2}\right)+\cdots+P\left(A_{n}\right) P\left(B \mid A_{n}\right) \\ =\sum_{i=1}^{n} P\left(A_{i}\right) P\left(B \mid A_{i}\right) \end{array} P(B)=P(A1)P(BA1)+P(A2)P(BA2)++P(An)P(BAn)=i=1nP(Ai)P(BAi)
    对于任何事件 B , B, B, 事件 A A ˉ A \bar{A} AAˉ 构成最简单的完备事件组,根据全概率公式得
    P ( B ) = P ( A B + A ˉ B ) = P ( A B ) + P ( A ˉ B ) = P ( A ) P ( B ∣ A ) + P ( A ˉ ) P ( B ∣ A ˉ ) \begin{aligned} P(B) &=P(A B+\bar{A} B)=P(A B)+P(\bar{A} B) \\ &=P(A) P(B \mid A)+P(\bar{A}) P(B \mid \bar{A}) \end{aligned} P(B)=P(AB+AˉB)=P(AB)+P(AˉB)=P(A)P(BA)+P(Aˉ)P(BAˉ)
    2、贝叶斯公式
    定义:设 A 1 , A 2 , ⋯   , A n A_{1}, A_{2}, \cdots, A_{n} A1,A2,,An 是一完备事件组,则对任一事件 B , P ( B ) > 0 , B, P(B)>0, B,P(B)>0,
    P ( A i ∣ B ) = P ( A i B ) P ( B ) = P ( A i ) P ( B ∣ A i ) ∑ i = 1 n P ( A i ) P ( B ∣ A i ) P\left(A_{i} \mid B\right)=\frac{P\left(A_{i} B\right)}{P(B)}=\frac{P\left(A_{i}\right) P\left(B \mid A_{i}\right)}{\sum_{i=1}^{n} P\left(A_{i}\right) P\left(B \mid A_{i}\right)} P(AiB)=P(B)P(AiB)=i=1nP(Ai)P(BAi)P(Ai)P(BAi)
    以上公式就叫贝叶斯公式,可由条件概率的定义及全概率公式证得。

  2. 随机变量、概率分布、概率密度函数

1、随机变量
把试验的结果与实数对应起来,随试验结果的不同而变化的量就是随机变量,包含离散型随机变量和连续型随机变量。
例子:
郑一枚匀称的硬币,观察正面、背面的出现情况。这一试验的样本空间为 Ω = { H , T } \Omega=\{H, T\} Ω={H,T}, 其中,H表示"正面朝上", T T T 表示“背面 朝上”。如果引入变量 X X X ,对试验的两个结果进行数值化,将 X X X 的值分别规定为1和0,即
X = { 1  if  出现  H 0  if  出现  T X=\left\{\begin{array}{ll} 1 & \text { if } \text { 出现 } H \\ 0 & \text { if } \text { 出现 } T \end{array}\right. X={10 if  出现 H if  出现 T
这里的 X X X 就叫随机变量,因为它能取的值是离散的,我们就叫它离散型随机变量。

2、概率分布
定义:设离散型随机变量 X X X 的所有可能取值为 x 1 , x 2 , ⋯   , x n , x_{1}, x_{2}, \cdots, x_{n}, x1,x2,,xn, 称为 X X X 的概率分布。
离散型随机变量 X X X 的分布律具有下列基本性质:

  1. p k ≥ 0 , k = 1 , 2 , ⋯ p_{k} \geq 0, k=1,2, \cdots pk0,k=1,2,
  2. ∑ i = 1 + ∞ p k = 1 \sum_{i=1}^{+\infty} p_{k}=1 i=1+pk=1

二项分布
二项分布是一种离散型的概率分布。二项代表它有两种可能的结果:成功或者不成功。每次试验必须相互独立,重复n次,并且每 次试验成功的概率是相同的,为 p p p ; 失败的概率也相同,为 1 − p 1-p 1p。掷硬币就是一个典型的二项分布。当我们要计算抛硬币吻,恰巧有 x x x 次正面朝上的概率,可以使用二项分布的公式:
P { X = k } = C n k p k ( 1 − p ) n − k P\{X=k\}=C_{n}^{k} p^{k}(1-p)^{n-k} P{X=k}=Cnkpk(1p)nk
在这里插入图片描述
泊松分布:
如果随机变量 X X X 的概率分布为
P { X = k } = λ k k ! e − λ , k = 0 , 1 , 2 , ⋯ P\{X=k\}=\frac{\lambda^{k}}{k !} e^{-\lambda}, k=0,1,2, \cdots P{X=k}=k!λkeλ,k=0,1,2,
式中, λ > 0 \lambda>0 λ>0 为常数,则称随机变量 X X X 服从参数为 λ \lambda λ 的泊松(Possion)分布,记为 X ∼ P ( λ ) X \sim P(\lambda) XP(λ).
在这里插入图片描述
3、概率密度函数
定义:若存在非负函数 f ( x ) f(x) f(x), 使一个连续型随机变量 X X X 取值于任一区间 ( a , b ] (a, b] (a,b] 的概率可以表示为
P { a < X ≤ b } = ∫ a b f ( x ) d x P\{a<X \leq b\}=\int_{a}^{b} f(x) d_{x} P{a<Xb}=abf(x)dx

正态分布:
正态分布是概率论中最重要的连续型分布,在19世纪前叶由德国数学家高斯(Gauss)加以推广,故又常称为高斯分布。 正态分布的概率密度函数曲线呈钟形,概率密度函数为
f ( x ) = 1 2 π σ e − ( x − μ ) 2 2 σ 2 f(x)=\frac{1}{\sqrt{2 \pi} \sigma} e^{-\frac{(x-\mu)^{2}}{2 \sigma^{2}}} f(x)=2π σ1e2σ2(xμ)2
具有两个参数 μ \mu μ σ 2 \sigma^{2} σ2 。第一参数 μ \mu μ 是代表服从正态分布的随机变量的均值,第二个参数 σ 2 \sigma^{2} σ2 是此随机变量的方差。
如果一个随机变量 服从均值为 μ , \mu, μ, 标准差为 σ \sigma σ 的正态分布,数学上记作
X ∼ N ( μ , σ 2 ) X \sim N\left(\mu, \sigma^{2}\right) XN(μ,σ2)
我们通常所说的标准正态分布均值为0, 标准差为1的正态分布。
在这里插入图片描述

  1. 随机变量的期望与方差

期望的性质:

  1. E ( c ) = c E(c)=c E(c)=c
  2. E ( X + c ) = E ( X ) + c E(X+c)=E(X)+c E(X+c)=E(X)+c
  3. E ( k X ) = k E ( X ) E(k X)=k E(X) E(kX)=kE(X)
  4. E ( k X + c ) = k E ( X ) + c E(k X+c)=k E(X)+c E(kX+c)=kE(X)+c
  5. E ( X + Y ) = E ( X ) + E ( Y ) E(X+Y)=E(X)+E(Y) E(X+Y)=E(X)+E(Y)

方差表示了随机变量的变异性,方差越大,随机变量的结果越不稳定。
定义:随机变量,若
E [ X − E ( X ) ] 2 E[X-E(X)]^{2} E[XE(X)]2
存在,则称其为 X X X 的方差,记为 D ( X ) , D(X), D(X),
D ( X ) = E [ X − E ( X ) ] 2 D(X)=E[X-E(X)]^{2} D(X)=E[XE(X)]2
而称 D ( X ) \sqrt{D(X)} D(X) X X X 的标准差或均方差。
由方差的定义和数学期望的性质,可以推出方差的计算公式:
D ( X ) = E ( X 2 ) − [ E ( X ) ] 2 D(X)=E\left(X^{2}\right)-[E(X)]^{2} D(X)=E(X2)[E(X)]2

方差的性质
(1) D ( c ) = 0 D(c)=0 D(c)=0
(2) D ( X + c ) = D ( X ) D(X+c)=D(X) D(X+c)=D(X)
(3) D ( c X ) = c 2 D ( X ) D(c X)=c^{2} D(X) D(cX)=c2D(X)

  1. 例子

1、𝜋 的估值

# pi的估计问题
import numpy as np 
def pi_estimate(n):
    '''
    n为投点的数量
    '''
    n_rand_X = np.random.uniform(-1.0,1.0,n)
    n_rand_Y = np.random.uniform(-1.0,1.0,n)
    ## 判断是否在圆内
    distance = np.sqrt(n_rand_X**2 + n_rand_Y**2)
    dis_n = float(len(distance[distance<=1.0]))
    return 4 * (dis_n / n)

for i in [10,50,100,500,1000,5000,10000,50000,100000,500000,10000000]:
    print("pi的估计值为",pi_estimate(i))

pi的估计值为 2.8
pi的估计值为 2.8
pi的估计值为 2.96
pi的估计值为 3.016
pi的估计值为 3.156
pi的估计值为 3.156
pi的估计值为 3.1208
pi的估计值为 3.13528
pi的估计值为 3.14612
pi的估计值为 3.137168
pi的估计值为 3.1410684

2、电子元件寿命问题

# 电子元件寿命问题
import numpy as np 

def ele_life(n,c,h,t,lamb):
    """
    参数n:模拟实验的次数
    参数c:每次试验中的c个元件
    参数t:每c个元件中规定的合格品数量
    参数h:小时数
    """
    times = 0.0
    for i in range(n):
        c_rand = np.random.exponential(1/lamb,c)
        c_rand_t = len(c_rand[c_rand>h])
        if c_rand_t > t:
            times = times + 1
    return times / n  

ele_life(10000,1000,18,20,0.2)

3、三门问题
蒙提霍尔问题:假如你参与一个有主持人的游戏,你会看见三扇关闭了的门,其中一扇的后面有一辆汽车,另外2扇门后面各是一只山羊,你看不见门后面的情况,但主持人知道一切。你被主持人要求在三扇门中选择一扇,但不能打开,在你选定之后主持人开启了另一扇后面有山羊的门,然后你可以坚持原来选定的门,也可以改主意重新选择。问题是:改与不改对选中汽车的概率有影响吗?请使用模拟实验的方法回答该问题。

# 三门问题
import numpy.random as random
def MontyHallProblem(n_test):
    #测试次数
     
    winning_door = random.randint(0,3,n_test)
    first_get  = 0
    change_get = 0
    for winning_doors in winning_door:
        act_door = random.randint(0,3)
        if winning_doors == act_door:
            first_get += 1
        else :
            change_get += 1
    first_pro  = first_get / n_test
    change_pro = change_get / n_test
    compar1    = round(change_get / first_get,2)
    print ("在%d次测试中,坚持原则第一次就选中的次数是%d,改变决定选择另一扇门中奖的次数是%d"% (n_test,first_get,change_get))
    print ("概率分别是{0}和{1},改变决定选择另一扇门中奖几率是坚持选择的{2}倍".format(first_pro,change_pro,compar1))
MontyHallProblem(100000)

在100000次测试中,坚持原则第一次就选中的次数是33063,改变决定选择另一扇门中奖的次数是66937.概率分别是0.33063和0.66937,改变决定选择另一扇门中奖几率是坚持选择的2.02倍

课程作业(最小解发现)

实验目的:
1、 理解等高线的几何含义、如何发现一个函数的最小解;
2、 掌握一门绘制函数图形的编程工具;
实验环境:
1、 Python或Java或Matlab或Mathematica
2、 如用Python,绘图工具可采用matplotlib或者plotly等。
实验内容:
给定下述Rosenbrock函数
f ( x ) = ( a − x ) 2 + b ( y − x 2 ) 2 f(x)=(a-x)^{2}+b(y-x^{2})^{2} f(x)=(ax)2+b(yx2)2
1) 为不同的a,b取值,绘制该函数的3D表面。请问 a,b取值对该表面形状有大的影响吗?,所谓大影响就是形状不再相似。
绘图代码:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

def f(a, b, x, y):
    return (a - x) ** 2 + b * (y - x * x) ** 2

# 画图
def plot_3d(a, b):
    
    # 定义x, y
    x = np.arange(-10, 10, 0.01)
    y = np.arange(-10, 10, 0.01)
    X, Y = np.meshgrid(x, y)# 生成网格数据
    fig = plt.figure()# 创建画布
    ax = Axes3D(fig)
    Z = f(a, b, X, Y)
    ax.plot_surface(X, Y, Z)#画图
    plt.xlabel('X')
    plt.ylabel('Y')
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.rcParams['axes.unicode_minus'] = False#图片中显示中文
    plt.title('Rosenbrock函数')
    plt.show()

1、当a = 0,b = 0时
在这里插入图片描述
2、当 a > 0 ,b = 0时
在这里插入图片描述
3、当 a < 0 ,b = 0 时
在这里插入图片描述
4、当 a = 0 ,b > 0 时
在这里插入图片描述
5、当 a = 0 ,b < 0 时
在这里插入图片描述
6、当 a > 0 ,b > 0 时
在这里插入图片描述
7、当 a > 0 ,b < 0 时
在这里插入图片描述
8、当 a < 0 ,b > 0 时
在这里插入图片描述
9、当 a < 0 ,b < 0 时
在这里插入图片描述
根据以上分析得到以下结论
1、当 a = 0, b = 0 时,图像为开口向上的曲面;
2、当 a ≠ 0 a\not=0 a=0, b = 0 时,函数为三维空间中的平面;
3、当 a = 0, b ≠ 0 b\not=0 b=0 a ≠ 0 a\not=0 a=0, b ≠ 0 b\not=0 b=0时,图像的开口方向与 b 的取值有关,当 b > 0 时,图像为开口向上的曲面;当 b < 0 时,图像为开口向下的曲面。

2)编写一个算法来找到它的全局最小值及相应的最小解,并在3D图中标出。分析一下你的算法时空效率、给出运行时间。

1、梯度下降法迭代求解

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

def f(a, b, x, y):
    return (a - x) ** 2 + b * (y - x * x) ** 2

#求解梯度向量
def grad(a, b, x, y):
    return np.array([2 * x - 2 * a + 4 * b * x * (x * x - y), 2 *b * (y - x * x)])

#梯度下降
def gradient_descent(a, b, grad, cur_x = np.array([0.1, 0.1]), learning_rate = 0.002, precision = 0.001, max_iters = 10000):
    for i in range(max_iters):
        grad_cur = grad(a, b, cur_x[0], cur_x[1])
        if np.linalg.norm(grad_cur, ord = 2) < precision:
            break
        cur_x = cur_x - grad_cur * learning_rate
        print("第", i, "次迭代:x 值为 ", cur_x)
    print("局部最小值 x =", cur_x)
    return cur_x

2、牛顿法法迭代求解

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

def f(a, b, x, y):
    return (a - x) ** 2 + b * (y - x * x) ** 2

#求解梯度向量
def grad(a, b, x, y):
    return np.array([2 * x - 2 * a + 4 * b * x * (x * x - y), 2 *b * (y - x * x)])

#求解Hession矩阵
def H(a, b, x, y):
    return np.array([[12 * b * x * x - 4 * b * y + 2, -4 * b * x],[-4 * b * x, 2 * b]])

#牛顿迭代
def newton_iter(a, b, grad, H, cur_x, learning_rate, precision, max_iters = 10000):
     """
     :param grad: 目标函数的梯度
     :param cur_x: 当前 x 值,通过参数可以提供初始值
     :param learning_rate: 学习率,也相当于设置的步长
     :param precision: 设置收敛精度
     :param max_iters: 最大迭代次数
     :return: 局部最小值
     """
    for i in range(max_iters):
        Hess = H(a, b, cur_x[0], cur_x[1])
        Hess_inv = np.linalg.inv(Hess)
        grad_cur = grad(a, b, cur_x[0], cur_x[1])
        cur_x0 = cur_x
        cur_x = cur_x - np.dot(Hess_inv, grad_cur)
        if np.linalg.norm(cur_x - cur_x0 , ord = 2) < precision:
            break
        print("第", i, "次迭代:x 值为 ", cur_x)
    print("局部最小值 x =", cur_x)
    return cur_x

参考文献:
[1]:https://github.com/datawhalechina/ensemble-learning

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值