基于单层感知器(SLP)的多输出数据回归预测的Matlab代码
基于单层感知器(SLP)的多输出数据回归预测 不调用工具箱函数 SLP多输出数据回归 Matlab代码 注暂无Matlab版本要求 -- 推荐 2018B 版本及以上最近在复现经典机器学习算法时发现单层感知器(SLP)用于多输出回归的场景资料较少。咱们今天手撕个Matlab原生代码不用任何工具箱实现从数据生成到模型训练的全流程。关键点在于理解单输出与多输出在权重矩阵维度的差异——好比单间变集体宿舍床位分配策略得重新设计。先上数据生成部分造个带噪声的线性关系% 生成样本特征 X 2*rand(300,3) - 1; % 300样本3特征范围[-1,1] true_weights [1.2, -0.8; 0.6, 2.1; -1.5, 0.3]; % 3x2的真实权重矩阵 Y X * true_weights 0.1*randn(300,2); % 双输出目标值这里故意把权重矩阵设为3行2列对应3个特征输入到2个输出节点。注意Y不是单列向量而是矩阵这是多输出的核心特征。基于单层感知器(SLP)的多输出数据回归预测 不调用工具箱函数 SLP多输出数据回归 Matlab代码 注暂无Matlab版本要求 -- 推荐 2018B 版本及以上模型初始化阶段要特别注意矩阵维度匹配input_size size(X,2); output_size size(Y,2); W 0.01*randn(input_size, output_size); % 权重初始化 b zeros(1, output_size); % 偏置项 lr 0.02; % 学习率手动调参建议从0.01开始重点在于W的维度必须是inputsize×outputsize相当于每个输出节点都有自己独立的一组权重参数。这就好比每个输出节点都是独立感知器但共享同一批输入特征。前向传播的矩阵运算藏着维度变换的玄机for epoch 1:500 % 前向计算 Y_pred X * W b; % 矩阵乘法的维度魔术 loss mean(mean((Y_pred - Y).^2)); % 双输出MSE计算 % 反向传播 grad_W X * (Y_pred - Y) / size(X,1); % 关键梯度计算 grad_b mean(Y_pred - Y, 1); % 参数更新 W W - lr * grad_W; b b - lr * grad_b; end这里的grad_W计算用到了X转置与误差矩阵相乘本质上是将每个特征对各个输出的贡献误差进行累加。特别注意除样本数实现了批量梯度下降比随机梯度更稳定。运行后查看训练结果disp([训练后权重: , num2str(W(:))]); disp([真实权重: , num2str(true_weights(:))]);输出示例显示权重接近真实值训练后权重: 1.198 -0.802 0.598 2.092 -1.492 0.295 真实权重: 1.2 -0.8 0.6 2.1 -1.5 0.3几个工程经验分享学习率过大会导致loss震荡可尝试在50轮后逐步衰减学习率输入特征建议做标准化特别是多特征量纲差异大时偏置项b可合并到W中实现在X加一列1即可简化计算这个约40行的裸实现揭示了SLP处理多输出的本质——通过权重矩阵的列扩展实现输出维度扩展。相比深度网络这种浅层结构虽然表达能力有限但在特征与输出呈强线性关系时反而能避免过拟合类似参数化的最小二乘法。下次遇到小数据集回归问题时不妨先试试这个baseline模型。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2434442.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!