2021-07-14

集成学习_数学基础_Task01

知识要点总结

高等数学:比较重要的是求导运算,由此引出梯度、海塞矩阵等高维空间的推广,这些是数学优化的重要基础,包括其中的梯度下降法、牛顿法、拟牛顿法、镜像梯度法等常用算法都会设计到这部分运算。另外一个比较重要的部分是极限,包括数列极限和函数极限,与此相关的还有级数和广义积分,这些知识在分析算法收敛性时至关重要,同时广泛应用在概率论的一些基本定理的证明,尤其是数字特征、极限定理、大数定律这些相关的知识。
线性代数:比较重要的是矩阵的基本运算以及特征值相关的知识,矩阵作为一种表达高维空间的重要“语言”,通常给问题求解带来很大便利。
概率论:比较重要的是常见分布的性质以及各类数字特征的性质,而大数定律和中心极限定理则构成数理统计的基石,时变随机变量又产生随机过程这个研究领域。

作业提交

给定下述Rosenbrock函数, f ( x ) = ( a − x 1 ) 2 + b ( x 2 − x 1 2 ) 2 f(x)=(a-x_1 )^2+b(x_2-x_1^2 )^2 f(x)=(ax1)2+b(x2x12)2。试编写程序完成下述工作:

问题1

为不同的a,b取值,绘制该函数的3D表面。请问 a,b取值对该表面形状有大的影响吗?所谓大影响就是形状不再相似。

解:画图函数代码如下:

# Make data.
X = np.arange(-10, 10, 0.25)
Y = np.arange(-10, 10, 0.25)
X, Y = np.meshgrid(X, Y)

a=-2
b=-2
Z=(a-X)**2+b*(Y-X**2)**2

fig = plt.figure(figsize=(5,5))
ax = fig.gca(projection='3d')
# Plot the surface.
surf = ax.plot_surface(X, Y, Z, cmap=cm.coolwarm,
                       linewidth=0, antialiased=False)
# Customize the z axis.
# ax.set_zlim(-300, 700)
ax.zaxis.set_major_locator(LinearLocator(10))
ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))
 
# Add a color bar which maps values to colors.
fig.colorbar(surf, shrink=0.5, aspect=5)
plt.show()

绘制结果:(a=-2 b=-2)
在这里插入图片描述
下面我们研究 a a a b b b对图像形状的影响,分别设置 a = − 1 , 0 , 1 a=-1,0,1 a=1,0,1以及 b = − 1 , 0 , 1 b=-1,0,1 b=1,0,1,我们发现 a a a的符号不会对图像形状产生明显影响,而 b b b的符号影响较大,会使图像的开口方向发生改变。具体来说, b < 0 b<0 b<0时曲面开口向下, b ≥ 0 b\ge0 b0时曲面开口向上。这里展示 b = − 1 , 0 , 1 b=-1,0,1 b=1,0,1的三幅图像:
结果1:(a=-1 b=-1)
在这里插入图片描述
结果2:(a=-1 b=0)
在这里插入图片描述
结果3:(a=-1 b=1)
在这里插入图片描述

问题2

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

解:由(1)中得出结论可知:只有当 b ≥ 0 b\ge0 b0时,函数形状开口向上,才能得出最小解。这里我们设置 a = b = 2 a=b=2 a=b=2,使用梯度下降法进行求解,并且使用呈 O ( 1 / t ) O(1/\sqrt{t}) O(1/t )衰减的步长。
主要代码如下:

# 目标函数
def fun (X,a,b):
    z= (a-X[0])**2+b*(X[1]-X[0]**2)**2
    return z

# 计算梯度
def grad(X,a,b):
    dx = -2*(a-X[0])+2*b*(X[0]-X[1]**2)
    dy = -4*b*X[1]*(X[0]-X[1]**2)
    return np.array([dx,dy])

# 梯度下降法
def gradient_descent(X,a,b,max_iters=1000,learning_rate=0.1, precision=0.001):
    for i in range(max_iters):
        grad_now= grad(X,a,b)
        #print(grad_now)
        if np.linalg.norm(grad_now, ord=2) < precision:
            break
        X = X-learning_rate/np.sqrt(i+1)*grad_now
        #print(X)
    return(X,fun(X,a,b))

这里我们设置max_iters= 100000 100000 100000,learning_rate= 0.01 0.01 0.01,解得最优解 X = [ 2.00001588 , 1.41421951 ] X=[2.00001588, 1.41421951] X=[2.00001588,1.41421951],最优函数值为 13.373178698313575 13.373178698313575 13.373178698313575。梯度下降法对于凸函数可以在多项式时间内求得全局最优解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值