PSO-RBFN
算法原理及流程
关于RBF神经网络的细节详见:RBF神经网络学习及实践。
关于PSO算法的细节详见:粒子群优化算法(PSO)python实践。
PSO算法优化RBF神经网络训练流程图如下所示。
代码实现
代码直接使用文章RBF神经网络学习及实践和粒子群优化算法(PSO)python实践中的代码框架。
为了能在PSO类内部计算fitness,我们给PSO类初始化方法添加rbfn参数,方便调用rbfn进行训练和计算适应度(适应度直接采用均方误差)。
1 |
|
修改RBFN类中的训练测试函数,使之返回适应度。
1 |
|
测试主函数
1 |
|
测试PSO适应度收敛曲线如下图所示。
PSO-RBFN毕竟结果如下。
其中绿色空心圆点为样本数据,红色虚线为期望数据,黑色实线为预测数据。
结果分析与总结
PSO粒子与RBFN中心点
这两个概念我曾混淆,认为:PSO优化RBFN时,每个中心点都编码成一个粒子。但是随后又想,既然在PSO中需要频繁计算每个粒子的适应度,而RBFN的预测结果是由所有中心点共同线性加权决定的,所以这个想法不成立。实际上,我们引入PSO算法的目的在于更好地优化RBFN,使其找到最优的网络构建参数:隐层中心点、方差、输出层到结果的权值。只要隐层中心点确定,方差可以由如下公式计算得到:
$$
\sigma=\frac{d_{\max }}{\sqrt{2 n}}
$$
这里 $\mathrm{d}_{\max }$ 是选取中心的之间的最大距离。权值也可以通过伪逆法求解得到。因此,我们只需找到构建RBFN的最优中心点即可,即粒子编码中包括基函数中心值。设有 $m$ 个中心点,每个中心点为 $k$ 维(中心点维度等于输入样本数据维度),那么,每个粒子的位置和速度均为 $m\times{k}$ 维。
粒子位置限制和速度限制
对于粒子的位置限制,取决于输入样本的各个维度的取值域,如果是取值无约束,可注释掉位置限制相关代码。对于速度限制,一般取最大速度取维度位置变化范围的10%~20%,在测试代码中粒子速度范围限制在[-1,1]之间。
RBFN中心点个数确定和初始化
在测试代码中,对于RBFN中心点个数取3,且在 $[X_{min},X_{max}]$ 中均匀随机初始化,这属于比较简单粗暴的了。正常来说,一般是使用聚类进行初始化。如指定中心点个数进行K-Means聚类得到聚类中心初始化中心点位置。但是K-Means算法的缺点是需要指定聚类中心个数,所以可以考虑采用减法聚类
Subtrative Clustering
迭代得到一定数量的聚类中心点位置。样本数据归一化
对于样本数据的不同维度,其数据量纲、量纲单位、数量级存在差别,为防止计算饱和,需要对其进行归一化处理,以建立各类数据的可比性。
min-max标准化
min-max标准化最终将样本数据限定在[0,1]范围内,其转化函数为:
$$
X=\frac{X-X_{min}}{X_{max}-X_{min}}
$$
式中 $X$ 为样本数据,$X_{max}$ 为样本数据最大值,$X_{min}$ 为最小值。z-score标准化
经过 z-score标准化处理的数据符合标准正态分布,即均值为0,标准差为1,其转化函数为:
$$
z=\frac{x-\mu}{\sigma}
$$
其中 $\mu$ 为样本数据的均值,$\sigma$ 为样本数据的标准差,$x$ 为样本数据。
参考
[1] 庹婧艺,徐冰峰,徐悦,等. 基于PSO算法优化的RBF神经网络水厂混凝投药控制[J]. 工业安全与环保,2022,48(9):83-86. DOI:10.3969/j.issn.1001-425X.2022.09.020.
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!