梯度法、模式搜索法求解最优化问题

本文介绍最优化问题中的梯度法和模式搜索法。梯度法利用梯度方向进行迭代寻优,适用于可导函数;模式搜索法则针对不可导或未知形式的目标函数,通过遍历线性空间基方向来寻找最优解。

最优化问题中常常需要求解目标函数的最大值或最小值,比如SVM支持向量机算法需要求解分类之间最短距离,神经网络中需要计算损失函数的最小值,分类树问题需要计算熵的最小或最大值等等。如果目标函数可求导常用梯度法,不能求导时一般选用模式搜索法。

一、梯度法求解最优问题

    由数学分析知识可以知道,函数在一个点的梯度方向是函数值增大的最快方向,与之相反,梯度的反方向是函数值变小的最快方向,函数值在定义域内可以用等值线形式来表示。假设求目标函数最小值,可在定义域内任选一点,求出该初始点梯度反方向,沿着这个反向得到新的一个点,再求出新点的梯度反方向,迭代若干次后,可通过计算函数值的误差范围结束迭代,最终获得函数最小值。根据具体的应用,有的是需要计算函数最值,有的应用是需要求满足最值时的自变量(定义域的坐标),梯度法计算过程可以通过下图来理解:

1601385880599056095.gif

 

    这里需要强调一点,等值线上任选一点后,可沿着梯度下降方向无约束的移动,所以这里讨论的是无约束条件的最优化问题,无约束的问题处理起来还是比较简单的,如果遇到有约束的问题,需要另外的算法,如可行方向搜索等,也可以通过一些方法将有约束的问题变为无约束的问题,具体可参考惩罚函数一章。

    用一段代码介绍下梯度法求解最优化问题,本例是用最小二乘法求线性回归问题,如有一组样本数据xi和yi,假设yi=axi+b,即xi和yi存在线性对应关系,其中a,b是未知参数,需要从所给的样本中计算出a,b值。由最小二乘法知,要求出a,b的最优解实际上就是求损失函数gif.gif的最小值,当得到最小值后其自变量值:a,b即为线性关系函数的参数,注意这里xi、yi是已知值,来自于样本数据。

import numpy as np
import  math
import scipy
from sympy import Matrix
import scipy.linalg
class optclass(object):
    def __init__(self,  error):
        self.error = error
        self.direction=np.array([[1,0],[-1,0],[0,1],[0,-1]])

    #求一阶导数
    def P_firstderivative(self,step,theta1,theta2,  grad_theta1, grad_theta2 ,x,y):
        d1=0
        for i in range(y.shape[0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值