粒子群优化算法
(一) 应用背景
在svm(支持向量机)模型训练过程中,往往存在多个变量影响模型的准确度,如惩罚因子c和径向基函数的γ参数。为了寻找最佳的模型,我们需要对这两个变量进行寻优。常用的算法有网格搜索算法、遗传算法、粒子群算法。这里简单介绍下粒子群算法。
粒子群算法是一种进化算法,源于对鸟群捕食的研究。假设鸟群在一个空间中捕食,那么对于每一只鸟,它具有两个属性:位置和速度。假设它可以感知与食物之间的距离(称为适应度),同时鸟群之间可以互相通信分享自己的位置。每一只鸟都可以记录自己的飞行轨迹,通过学习自身的经验和同伴的经验来动态的调整飞行速度和方向,通过不断的迭代调整,不断的逼近食物。
(二) 标准粒子群算法
标准的粒子群算法的一般步骤是:
1. 初始化飞行空间,并在空间内初始化一定数量的粒子,粒子随机分布在飞行空间内,并具有随机的速度。
粒子位置表示为(D为空间维度,即需要寻优的变量个数):
粒子速度表示为:
2. 计算每个粒子的适应度。
3. 每个粒子学习自身经验,在自身飞行过程中寻找适应度最好的个体最优位置,记为pBest。
4. 每个粒子学习群体的经验,寻找整个群体飞行历史中适应度最佳的全局最优位置,记为gBest。
5. 粒子根据经验更新自身的飞行速度和位置。
速度更新公式为:
其中,w为惯性权重, 和 分别为个体最优和全局最优位置,rand()和Rand()为[0,1]范围内的随机数, 和 为学习因子
位置更新公式:
6. 如过没有达到预定的结束条件,则回到第2步,继续迭代至满足结束条件。
粒子优化过程中运动轨迹如下:
(三) 参数选择
1. 粒子群算法中的参数对于算法的性能有重要影响,可以根据问题来调整参数。
群体规模m,根据需要求解的问题复杂性来确定,一般可取20-40个。
2. 速度更新公式中的w,称为惯性权重,使粒子飞行过程中保持惯性,粒子因此可以保持对一部分空间的持续探索。若w为0,则粒子速度没有记忆性,总是飞向个体最优位置和全局最优位置的加权中心,这种条件下算法容易陷入局部最优解。w增大时粒子具备全局搜索的能力,应此可以针对具体问题,通过调整w来调整全局搜索能力和局部搜索能力的平衡。通常,让w在每次迭代过程中从1.4到0逐步减小可以得到很好的效果。
3. c1、c2分别为个体和全局学习因子,又称为加速因子,代表粒子飞向个体最优和全局最优的加速权重,根据经验通常设置为2。当 c1 为0时,粒子不具备个体认知能力,侧重于对群体的学习,可以更快的收敛,但是容易陷入局部最优解。当c2 为0时,粒子仅依靠个体的经验进行探索,没有对于群体的学习,往往无法得到最优解。
(四) 应用实例
以对函数 求其最小值为例,粒子空间对应的维度即为n。
假设初始化3个粒子,维度为n=2,求解空间为[0,100]
首先随机的对3个粒子位置和速度进行初始化:
比较每个粒子的适应度,可知全局最佳的适应度为F3 ,其对应的最佳位置(gBest)为[0, 89]
最后,粒子根据速度更新公式和位置更新公式更新自身的位置和速度。如位置更新为:
X_1=[29.4, 100] X_2=[38.01, 97.4] X_3=[52.6, 93.6]
在这个过程中粒子将向全局最佳位置(gBest)靠近,重复这个步骤,粒子即会趋向于这个函数的最小值。在实验中,当这3个粒子飞行100次以后最佳的适应度达到:1.11956156554e-06,已经非常趋近0。