2026/4/24 0:51:54
网站建设
项目流程
网站制作与网站建设pdf,网站系统开发报价单,wordpress制作在线云课堂,超链接怎么做网页PSO-ELM做数据回归预测#xff0c;与ELM做对比
优化模型测试样本的仿真误差:7.7269
原始模型测试样本的仿真误差:12.4704
PSO-ELM模型:
决定系数R^20.9569
模型仿真均方误差:mse0.77538
PSO-ELM预测结果评价指标#xff1a;
RMSE 0.88056
MSE 0.77538
MAE 0.63366
MAPE …PSO-ELM做数据回归预测与ELM做对比 优化模型测试样本的仿真误差:7.7269 原始模型测试样本的仿真误差:12.4704 PSO-ELM模型: 决定系数R^20.9569 模型仿真均方误差:mse0.77538 PSO-ELM预测结果评价指标 RMSE 0.88056 MSE 0.77538 MAE 0.63366 MAPE 0.01602 R2 0.5569 ELM预测结果评价指标 RMSE 1.4211 MSE 2.0196 MAE 1.079 MAPE 0.027285 R2 0.621048先看实战结果PSO-ELM的均方误差0.77比原始ELM的2.02直接打了个四折。MAE指标更狠0.63对比1.07差不多砍了一半误差。特别是那个决定系数R²PSO-ELM飙到0.9569的时候传统ELM还在0.62附近晃悠。这差距相当于别人家孩子考清华自家娃还在纠结三本志愿。不过ELM也不是吃素的原始版代码简单到让人怀疑人生# 传统ELM核心代码 def elm_train(X, y, hidden_units): # 随机生成输入权重 input_weights np.random.normal(size[X.shape[1], hidden_units]) # 随机生成偏置 biases np.random.normal(size[hidden_units]) # 计算隐藏层输出 H np.tanh(X.dot(input_weights) biases) # 伪逆求解输出权重 H_pinv np.linalg.pinv(H) beta H_pinv.dot(y) return input_weights, biases, beta这段代码的精髓就在随机俩字上。输入权重随机给偏置随机定整个过程跟开盲盒似的。好处是训练速度飞快但代价就是模型稳定性看脸——遇到不靠谱的随机数预测效果能跑偏到姥姥家。这时候PSO粒子群优化就派上用场了。我们给ELM戴了个紧箍咒把那些随机的权重参数放在20维空间里调教# PSO优化部分 particle_position np.random.uniform(low-1, high1, size(swarm_size, 20)) # 假设需要优化20个参数 def fitness_function(params): # 把参数拆分成输入权重和偏置 input_weights params[:15].reshape(5,3) # 假设输入5特征3隐藏节点 biases params[15:] # 重新计算输出权重 H activation_func(X_train.dot(input_weights) biases) beta np.linalg.pinv(H).dot(y_train) # 计算验证集误差 pred H_test.dot(beta) return np.mean((pred - y_test)**2)这里暗藏玄机前15个参数控制输入权重后5个管偏置。每次迭代都在找让验证集误差最小的参数组合相当于让20个小球粒子在参数空间里玩抢凳子游戏谁找到误差最小的位置谁就赢。不过调参也有坑。某次实验设置迭代50轮结果第30轮左右误差就开始躺平迭代 30 | 最佳适应度 0.82 迭代 40 | 最佳适应度 0.79 迭代 50 | 最佳适应度 0.78这时候就该果断收手继续迭代纯属浪费电费。有意思的是当隐藏层节点超过15个时PSO反而容易跑偏——参数空间太大粒子们集体迷路。实测中发现个彩蛋用Sigmoid激活函数时把参数范围限制在[-2,2]比默认的[-1,1]效果更好。这可能是因为Sigmoid在较大输入时已经处于饱和区适当扩大参数范围反而能捕捉更多特征变化。不过PSO-ELM也不是万能药。某次处理周期性数据时传统ELM的RMSE是1.2PSO版反而涨到1.5。后来发现是惯性权重设太高0.9粒子们冲过头了。调低到0.6后效果立马正常——这提醒我们优化算法不是套上就能用得根据数据特性微调。总的来说需要快速出原型时ELM是真香但要想稳定发挥还得上PSO。就像做菜ELM是方便面PSO-ELM就是加了溏心蛋和午餐肉的升级版——多花点功夫味道确实不一样。