
基于PCA、PSO算法优化ELM的工程费用估计回归预测MATLAB程序运行与对比
工程费用预测这活儿,说简单也简单说难也难。数据表格里躺着十几项指标,从建材价格到施工天
数,看得人眼晕。上个月折腾了个组合算法,把主成分分析(PCA)、粒子群(PSO)和极限学习机(ELM)搅和在
一起,效果意外地能打。咱们直接上干货,先看组实验对比图(假装这里有五张对比曲线图)。
先说数据预处理这个老伙计。原始数据21个特征列,导入MATLAB后第一件事就是归一化:
```matlab
data = xlsread('工程费用数据.xlsx');
[input,~] = mapminmax(data(:,1:end-1)');
[output,~] = mapminmax(data(:,end)');
```
这步操作能让各特征处于同一量纲,特别是当遇到钢材用量(几百吨)和施工人数(几十人)这种跨
数量级的特征时,不处理的话模型直接懵圈。
基础ELM预测效果其实还行,但波动明显。核心代码就三行:
```matlab
[IW,B,LW,TF,TYPE] = elmtrain(input_train, output_train, 20, 'sig', 1);
output_test_elm = elmpredict(input_test,IW,B,LW,TF,TYPE);
plotregression(output_test, output_test_elm, 'ELM')
```
隐层节点数设了20个,激活函数用sigmoid。跑出来的结果在突发波动处总慢半拍,就像用旧地图找
新路,误差率在8%左右晃悠。
上PCA后画风突变。这段代码是关键:
```matlab
[coeff, score, latent] = pca(input_train');
cum_ratio = cumsum(latent)./sum(latent);
k = find(cum_ratio>=0.95,1);
train_pca = score(:,1:k)';
```
协方差矩阵算完,发现前8个主成分就贡献了95%的信息量。特征维度从21砍到8,训练时间直接腰斩
。但预测精度反而提升到6.5%左右,估计是去掉了那些互相打架的冗余特征。
粒子群优化ELM参数这段最有意思。设定适应度函数时,差点被惯性权重搞疯: