组队学习Task01:数学基础

前言

终于抢到八月份Datawhale的组队学习内容,这一月的项目都很吸引人,挑来挑去选择了集成学习这一模块,希望可以与一群小伙伴们一起学到知识,以下是task1的学习笔记,参考内容为Datawhale集成学习开源教程。

梯度向量

表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向变化最快,变化率最大。

定义:设二元函数 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ˉ

举一个栗子:
计算 f ( x , y ) = x 2 + y 2 f(x,y) = x^2 + y^2 f(x,y)=x2+y2的梯度向量
在这里插入图片描述

雅克比矩阵

假设 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
举一个栗子:
F = ( f 1 ( x , y ) , f ( x , y ) ) T F=(f_1(x,y),f_(x,y))^T F=(f1(x,y),f(x,y))T的雅克比矩阵,其中 f 1 ( x , y ) = 2 x 2 + y 2 , f 2 ( x , y ) = x 2 + 3 y 2 f_1(x,y) = 2x^2 + y^2,f_2(x,y) = x^2 + 3y^2 f1(x,y)=2x2+y2,f2(x,y)=x2+3y2
在这里插入图片描述

海森矩阵

海森矩阵是一个自变量为向量的实值函数的二阶偏导数组成的方块矩阵,假有一实数函数
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
也就是雅克比矩阵的导数就是海森矩阵。
举一个栗子:
f ( x , y ) = 2 x 2 + y 2 f(x,y)=2x^2+y^2 f(x,y)=2x2+y2的海森矩阵
在这里插入图片描述
有了以上的基础,接下来为函数的极值问题。

函数的极值与最值

极值:设函数 f ( x ) f(x) f(x) 在点 x 0 x_{0} x0 的某邻域 U ( x 0 ) U\left(x_{0}\right) U(x0) 内有定义,如果对于去心邻域U ( x 0 ) \left(x_{0}\right) (x0) 内的任一 x x x, 有 A
f ( x ) < f ( x 0 )  或  f ( x ) > f ( x 0 ) f(x)<f\left(x_{0}\right) \text { 或 } f(x)>f\left(x_{0}\right) f(x)<f(x0)  f(x)>f(x0)
那么就称 f ( x 0 ) f\left(x_{0}\right) f(x0) 是函数的一个极大值或极小值。函数的极大值和极小值统称为函数的极值, 使函数取得极值的点被称作极值点。
最值是函数在其定义域内取得最大值(或最小值)的点的函数值。极值是局部性的概念,而最值是全局性的概念。
在这里插入图片描述

最优性条件

一元函数

设函数 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 处取得极小值。

多元函数

设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 的极值
在这里插入图片描述

基于梯度的优化方法–梯度下降法

代码:
在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt

# 定义开方函数
def f(x):
    return np.power(x, 2)
# 定义求导方式
def d_f(f, x, delta=1e-4):
    return (f(x+delta) - f(x-delta)) / (2 * delta)
# 绘图    
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(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))

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

  • 牛顿法是求解函数值为0时的自变量取值的方法。
  • 利用牛顿法求解目标函数的最小值其实是转化成求使目标函数的一阶导为0的参数值。
  • 迭代过程是在当前位置x0求该函数的切线,该切线和x轴的交点x1,作为新的x0,重复这个过程,直到交点和函数的零点重合。

迭代的公式如下:
θ : = θ − α ℓ ′ ( θ ) ℓ ′ ′ ( θ ) \theta:=\theta-\alpha \frac{\ell^{\prime}(\theta)}{\ell^{\prime \prime}(\theta)} θ:=θα(θ)(θ)
θ \theta θ是向量时, 牛顿法可以使用下面式子表示:
θ : = θ − α H − 1 ∇ θ ℓ ( θ ) \theta:=\theta-\alpha H^{-1} \nabla_{\theta} \ell(\theta) θ:=θαH1θ(θ)
其中 H H H叫做海森矩阵,其实就是目标函数对参数 θ \theta θ的二阶导数。

牛顿法和梯度下降法的比较

1.牛顿法:

  • 通过求解目标函数的一阶导数为0时的参数,进而求出目标函数最小值时的参数。
  • 收敛速度很快。
  • 海森矩阵的逆在迭代过程中不断减小,可以起到逐步减小步长的效果。
  • 缺点:海森矩阵的逆计算复杂,代价比较大,因此有了拟牛顿法。

2.梯度下降法:

  • 通过梯度方向和步长,直接求解目标函数的最小值时的参数。
  • 越接近最优值时,步长应该不断减小,否则会在最优值附近来回震荡。

举一个栗子:
使用梯度下降和牛顿法寻找Rosenbrock函数最小值
定义Rosenbrock函数:
f ( x , y ) = ( a − x ) 2 + b ( y − x 2 ) 2 f(x,y) = (a-x)^2+b(y-x^2)^2 f(x,y)=(ax)2+b(yx2)2
这里将a取值为1,b取值为100,即:
f ( x , y ) = ( 1 − x ) 2 + 100 ( y − x 2 ) 2 f(x,y) = (1-x)^2+100(y-x^2)^2 f(x,y)=(1x)2+100(yx2)2
函数图像及代码:
在这里插入图片描述

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

fig = plt.figure()
ax = Axes3D(fig)
x = np.arange(-50, 50, 1)
y = np.arange(-50, 50, 1)
x, y = np.meshgrid(x, y)

a=1
b=100
f = np.square(a-x) + b*np.square(y-x**2) # 函数
ax.plot_surface(x, y, f, rstride=1, cstride=1, cmap='rainbow')
plt.show()

牛顿法求最小值代码:

在这里插入图片描述

def f(x, y):
    return (1 - x) ** 2 + 100 * (y - x * x) ** 2


def H(x, y):
    return np.matrix([[1200 * x * x - 400 * y + 2, -400 * x],
                      [-400 * x, 200]])


def grad(x, y):
    return np.matrix([[2 * x - 2 + 400 * x * (x * x - y)],
                      [200 * (y - x * x)]])


def delta_newton(x, y):
    alpha = 1.0
    delta = alpha * H(x, y).I * grad(x, y)
    return delta
x = np.matrix([[-0.1],
               [0.2]])
tol = 0.00001
xv = [x[0, 0]]
yv = [x[1, 0]]

for t in range(100):
    delta = delta_newton(x[0, 0], x[1, 0])
    if abs(delta[0, 0]) < tol and abs(delta[1, 0]) < tol:
        break
    x = x - delta
    xv.append(x[0, 0])
    yv.append(x[1, 0])
xv1=int(round(xv[-1],1))
yv1=int(round(yv[-1],1))
print('最小值:({},{})'.format(xv1,yv1))

参考资料:
萌弟AI(B站视频)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数学建模组队问题cdns是一个实际问题,需要通过数学建模的方法来解决。 首先,cdns问题是指内容分发网络中的带宽分配问题。内容分发网络是为了提高用户对网络资源的访问效率而设计的。而带宽分配是指在网络中的各个节点上,如何将带宽分配给用户和内容提供者。 针对该问题,我们可以采取如下的建模方法: 1. 网络拓扑模型:首先,我们需要对网络的拓扑结构进行建模,将网络中的节点和连接关系表示出来。这可以是一个有向图或无向图,节点表示网络中的设备,连接表示设备之间的通信关系。 2. 带宽分配模型:在建立好网络拓扑模型后,我们需要制定带宽分配的规则。这可以是基于节点的负载情况,也可以是基于用户对内容的请求情况。 3. 优化目标函数:在带宽分配模型中,我们需要确定一个优化目标函数,来衡量带宽分配的效果。可以是最小化网络中的拥塞程度,或者最大化用户对内容的访问速度等。 4. 求解方法:通过数学优化方法,如线性规划、整数规划等,可以得到最优的带宽分配方案。也可以采用启发式算法,如遗传算法、粒子群算法等,来寻找较优的解。 综上所述, cdns问题是一个需要通过数学建模方法来解决的问题。通过合理的建模和求解方法,可以得到最优的带宽分配方案,提高网络资源的利用效率和用户对内容的访问速度。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值