简言

       机器学习的项目,不可避免的需要补充一些优化算法,对于优化算法,爬山算法还是比较重要的.鉴于此,花了些时间仔细阅读了些爬山算法的paper.基于这些,做一些总结.

 目录

  1. 爬山算法简单描述

    2. 爬山算法的主要算法

        2.1 首选爬山算法

        2.2 最陡爬山算法

        2.3 随机重新开始爬山算法

        2.4 模拟退火算法(也是爬山算法)

      3. 实例求解

 正文

    爬山算法,是一种局部贪心的最优算法. 该算法的主要思想是:每次拿相邻点与当前点进行比对,取两者中较优者,作为爬坡的下一步.

举一个例子,求解下面表达式

  机器学习优化算法之爬山算法小结 的最大值. 且假设 x,y均按为0.1间隔递增.

为了更好的描述,我们先使用pyhton画出该函数的图像:

机器学习优化算法之爬山算法小结

图像的python代码:

 1 # encoding:utf8
 2 from matplotlib import pyplot as plt
 3 import numpy as np
 4 from mpl_toolkits.mplot3d import Axes3D
 5 
 6 
 7 def func(X, Y, x_move=0, y_move=0):
 8     def mul(X, Y, alis=1):
 9         return alis * np.exp(-(X * X + Y * Y))
10 
11     return mul(X, Y) + mul(X - x_move, Y - y_move, 2)
12 
13 
14 def show(X, Y):
15     fig = plt.figure()
16     ax = Axes3D(fig)
17     X, Y = np.meshgrid(X, Y)
18     Z = func(X, Y, 1.7, 1.7)
19     plt.title("demo_hill_climbing")
20     ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='rainbow', )
21     ax.set_xlabel('x label', color='r')
22     ax.set_ylabel('y label', color='g')
23     ax.set_zlabel('z label', color='b')
24     # 具体函数方法可用 help(function) 查看,如:help(ax.plot_surface)
25     # ax.scatter(X,Y,Z,c='r') #绘点
26     plt.show()
27 
28 if __name__ == '__main__':
29     X = np.arange(-2, 4, 0.1)
30     Y = np.arange(-2, 4, 0.1)
31 
32     show(X,Y)
View Code

相关文章: