MATLAB数据分析,基于遗传算法,粒子群优化算法优化BP神经网络GA-BP和PSO-BP的数据回归预测,LSSVM的粒子群优化算法和灰狼优化算法,径向基函数RBF(pso-rbf)预测,极限学习机ELM预测和广义神经网络GRNN预测算法 代码可以随意修改输入和输出 数据存储用的是?excel?(方便修改数据),代码注释详细,容易上手。
当Excel遇上MATLAB:用智能算法玩转数据预测
做数据预测,最烦人的就是调参——神经网络隐藏层节点设多少?学习率怎么定?与其手动试错,不如让算法自己找最优解。今天咱们用MATLAB搞点野路子,结合Excel数据管理,实现“无痛”调参。
先准备数据,在Excel里按列存特征和标签,比如这样:
| 温度 | 湿度 | 电压 | 输出功率 |
|---|---|---|---|
| 25 | 60 | 220 | 1500 |
| ... | ... | ... | ... |
MATLAB读取数据只需两行:
data = xlsread('dataset.xlsx'); % 读取当前目录下的Excel input = data(:,1:3)'; % 前三列是输入特征 output = data(:,4)'; % 第四列是预测目标暴力美学:粒子群优化BP神经网络(PSO-BP)
% 设置粒子群参数 options = optimoptions('particleswarm','SwarmSize',30,'MaxIterations',100); % 定义要优化的参数:隐藏层节点数+学习率 nVars = 2; fun = @(x) trainBPNnet(input, output, floor(x(1)), x(2)); [bestParams,~] = particleswarm(fun,nVars, [5 0.01], [50 0.1], options); % 训练函数(关键部分) function mse = trainBPNnet(input, output, hiddenSize, lr) net = feedforwardnet(hiddenSize); net.trainParam.lr = lr; [net,~] = train(net, input, output); pred = net(input); mse = mean((pred - output).^2); % 返回均方误差作为适应度 end这里把隐藏层节点数和学习率丢给粒子群去找最优组合。粒子群像一群找食的鸟,每只鸟的位置代表一组参数,飞着飞着就找到误差最小的位置。实际用的时候,可以把输入输出替换成自己的Excel列号。
遗传算法加持的LSSVM(GA-LSSVM)
MATLAB数据分析,基于遗传算法,粒子群优化算法优化BP神经网络GA-BP和PSO-BP的数据回归预测,LSSVM的粒子群优化算法和灰狼优化算法,径向基函数RBF(pso-rbf)预测,极限学习机ELM预测和广义神经网络GRNN预测算法 代码可以随意修改输入和输出 数据存储用的是?excel?(方便修改数据),代码注释详细,容易上手。
支持向量机的核参数对结果影响巨大,上遗传算法:
% 适应度函数计算 function rmse = ga_lssvm_fitness(params) gamma = params(1); % 正则化参数 sigma = params(2); % RBF核宽度 model = initlssvm(input, output, 'function estimation', gamma, sigma^2, 'RBF_kernel'); model = trainlssvm(model); pred = simlssvm(model, input); rmse = sqrt(mean((pred - output').^2)); end % 调用遗传算法 GA = gaoptimset('PopulationSize',50,'Generations',100); [bestParams, ~] = ga(@ga_lssvm_fitness, 2, [], [], [], [],... [1e-1 1e-3], [1e3 10], [], GA);这里有个坑:sigma参数在实际计算中要平方,所以搜索范围设为1e-3到10,实际使用时相当于1e-6到100的平方范围。遗传算法的交叉变异机制特别适合处理这种量级跨度大的参数搜索。
懒人福音:GRNN快速预测
当数据量不大又急着出结果时,广义回归神经网络(GRNN)是神器:
spread = 0.5; % 光滑因子,Excel里改这个值就能调效果 grnn = newgrnn(input, output, spread); pred = sim(grnn, input); disp(['R²:',num2str(1 - mean((pred - output).^2)/var(output))]);GRNN不需要训练,spread值控制平滑程度。在Excel里单独开个单元格存这个参数,调参时直接改Excel里的数值,MATLAB重新读取就能生效,特别适合和业务人员协作。
实战技巧:
- 数据预处理别偷懒,建议在Excel里先做归一化(比如用=STANDARDIZE函数)
- 所有算法都先在小样本(前100行)跑通再上全量数据
- 输出预测结果用xlswrite回写到Excel新Sheet,方便做可视化对比
xlswrite('results.xlsx', [output' pred'], 'PSO-BP结果');这些算法在风电功率预测、股票价格趋势分析中都验证过有效性。核心思路就一句话:让智能算法当苦力找参数,我们专注业务逻辑。代码全放在GitHub上了(地址在评论区),把Excel文件替换成自己的数据,改改输入输出的列号就能直接跑。
遇到报错先检查这三处:
- Excel数据是否包含非数字字符
- 输入输出矩阵的维度是否匹配(转置符别乱用)
- 算法参数范围是否合理(比如学习率超过1必崩)
下期预告:用MATLAB App Designer把这些算法打包成带界面的工具箱,点点按钮就能跑分析...(需要源码的评论区敲1)