优化算法是机器学习中的一个重要内容。
其主要包括梯度下降法(Gradient Descent),牛顿法(Newton),拟牛顿法(Quasi-Newton)。其中拟牛顿法又包括DFP,BFGS,LBFGS。
下面实现的优化算法实例主要参考https://blog.youkuaiyun.com/itplus/article/details/21896453。
选取的优化函数是Rosenbrock函数,它是一个用来测试最优化算法性能的非凸函数。参考https://baike.baidu.com/item/Rosenbrock%E5%87%BD%E6%95%B0/22781931?fr=aladdin。其图形如下所示:
代码如下:
import os
import sys
import math
import numpy as np
####################################gd(梯度下降法)#################################################
lr = 0.001 #学习率
iteration = 0 #迭代次数
max_iteration = 100000 #最大迭代次数
x_old = np.zeros((2,1), dtype=np.float32) #x初始点的值,大小2*1
x_old = np.mat(x_old)
y_old = (1-x_old[0,0])**2 + 100*(x_old[1,0]-x_old[0,0]**2)**2 #y初始值,实数值
grad_old = [[-2*(1-x_old[0,0]) - 400*x_old[0,0]*(x_old[1,0]-x_old[0,0]**2)] ,
[200*(x_old[1,0]-x_old[0,0]**2)]] #x初始点的梯度值,大小2*1
grad_old = np.mat(grad_old)
while(1):
x_new = x_old - lr*grad_old #x更新点的值,大小2*1
y_new = (1-x_new[0,0])**2 + 100*(x_new[1,0]-x_new[0,0]**2)**2 #y更新值,实数值
grad_new = [[-2*(1-x_new[0,0]) - 400*x_new[0,0]*(x_new[1,0]-x_new[0,0]**2)] ,
[200*(x_new[1,0]-x_new[0,0]**2)]] #x更新点的梯度值,大小2*1
grad_new = np.mat(grad_new)
iteration += 1
if abs(y_new) < 0.001 or iteration > max_iteration: #停止迭代的条件
break
else:
x_old =