介绍两种方法做多元非线性回归:lsqcurvefit、Adagrad 法。

lsqcurvefit是Matlab提供的内置函数,用于基于最小二乘的曲线拟合问题;Adagrad是一种基于梯度的迭代方法,特点在步长不固定,随着迭代次数变化。

clear; clc;
% 多元非线性回归模型
% z = w1 * exp(-x / w2) + w3 * y
% z = 10 * exp(-x / 5) + 2 * y
len = 20;
rng('default');
x = randi(len + 1, len, 1) / 5;
y = randi(len + 1, len, 1) / 5;
z = 10 * exp(-x / 2) + 0.5 * y;
ratio = 0.0;
z = z + ratio * max(z) * rand(len, 1);
X = [x, y];
fun = @(var, X)var(1) * exp(-X(:, 1) / var(2)) + var(3) * X(:, 2);
w = lsqcurvefit(fun, [1, 1, 1], X, z);
disp(['lsqcurvefit 计算结果:', num2str(w)]);
% 梯度下降法学习
% obj = 1 / (2 * len) * (w1 * exp(-x / w2) + w3 * y - z)' * (w1 * exp(-x / w2) + w3 * y - z)
alpha = 5;   % 学习率大收敛快,可能有震荡
iteMax = 10000;
w1 = 1;
w2 = 1;
w3 = 1;
initW = [w1; w2; w3];
err = 1e-6;
J = zeros(iteMax, 1);
G = zeros(3, 1);
e = 0.1;
for i = 1 : iteMaxgradW1 = 1 / len * (exp(-x / w2))' * (w1 * exp(-x / w2) + w3 * y - z);gradW2 = 1 / len * (w1 * x .* exp(-x / w2) / w2^2)' * (w1 * exp(-x / w2) + w3 * y - z);gradW3 = 1 / len * y' * (w1 * exp(-x / w2) + w3 * y - z);grad = [gradW1; gradW2; gradW3];% Adagrad 法    x = x + yita * inv(G) * grad;G = G + grad.^2;newW = initW - alpha * diag(1 ./ sqrt(G + e)) * grad;if norm(newW - initW) < errJ(i + 1 : end) = [];disp(['梯度下降法迭代次数:', num2str(i)]);disp(['梯度下降法迭代结果:', num2str(newW')]);break;elseinitW = newW;w1 = newW(1);w2 = newW(2);w3 = newW(3);J(i) = 1 / (2 * len) * (w1 * exp(-x / w2) + w3 * y - z)' * (w1 * exp(-x / w2) + w3 * y - z);end
end
% 绘图
subplot(1, 2, 1)
loglog(J, 'LineWidth', 2)
legend(['alpha = ', num2str(alpha)]);
xFit1 = linspace(min(x), max(x), 30);
yFit1 = linspace(min(y), max(y), 30);
[xFit2, yFit2] = meshgrid(xFit1, yFit1);
zFit = w1 * exp(-xFit2 / w2) + w3 * yFit2;
subplot(1, 2, 2)
scatter3(x, y, z, 'filled');
hold on
mesh(xFit2, yFit2, zFit);
hold off
legend('Points', 'Fitting', 'Location','NorthOutside');

结果打印


Local minimum found.Optimization completed because the size of the gradient is less than
the default value of the function tolerance.<stopping criteria details>lsqcurvefit 计算结果:10           2         0.5
梯度下降法迭代次数:1934
梯度下降法迭代结果:10            2          0.5

【Matlab学习手记】多元非线性回归相关推荐

  1. 【Matlab学习手记】Matlab积分问题

    一个程序彻底搞懂Matlab的数值积分.符号积分问题. 数值积分问题,给定被积分函数和积分上下限,使用 integral 函数得到积分值: 符号积分问题,通常结果是解析解,即需要知道被积分函数的原函数 ...

  2. Matlab学习手记——非线性拟合方法:压缩因子粒子群算法

    目的:采用压缩因子粒子群算法实现双指数拟合. function x_opt = PSO_ExpFit2(t, Et) %{ 函数功能:压缩因子粒子群算法实现指数拟合:y = a1*exp(-x/b1) ...

  3. 【Matlab学习手记】标签显示在刻度之间

    问题:Matlab标签和刻度线默认是对齐的,如何将标签设置到刻度线之间? 三个实例. plot类型 clear; clc; x = 0:0.1:2*pi; y = sin(x); plot(x, y) ...

  4. Matlab学习手记——制作GIF动图

    目的:利用Matlab制作GIF动图. 结果图 测试代码 clear;clc; filename = '页岩碎屑.gif'; % 保存文件名 Iters = [1:9 10*(1:9) 100*(1: ...

  5. 【Matlab学习手记】sym8小波滤波

    提供sym8小波,四层全局软阈值滤波源代码,采用Matlab语言编写,可移植性强. 源代码 clear;clc; load leleccum; indx = 1:3450; noisez = lele ...

  6. sym8 matlab,【Matlab学习手记】sym8小波滤波

    提供sym8小波,四层全局软阈值滤波源代码,采用Matlab语言编写,可移植性强. 源代码 clear;clc; load leleccum; indx = 1:3450; noisez = lele ...

  7. 【Matlab学习手记】椭圆拟合

    熟悉 Matlab 函数 nlinfit 使用. 椭圆拟合方程: 结果图: 程序: clear; clc; F = @(p, x) p(1) * x(:, 1) .^ 2 + p(2) * x(:, ...

  8. 【Matlab学习手记】二维码

    目的:二维码的识别和生成. 代码 function varargout = QRcode(varargin) % QRCODE MATLAB code for QRcode.fig % QRCODE, ...

  9. 【Matlab学习手记】二次多项式曲面拟合

    二次多项式曲面公式 总共有6个系数. 绘制曲面图形时,一般给定x和y的取值(一维数组),然后对x和y网格化成二维数组X和Y,将X和Y代入公式,即可得到曲面的数值,最后用surf函数显示. 实例 给定一 ...

  10. matlab如何制作和保存gif动图,Matlab学习手记——制作GIF动图

    的:利用Matlab制作GIF动图. 结果图 测试代码 clear;clc; filename = '页岩碎屑.gif'; % 保存文件名 Iters = [1:9 10*(1:9) 100*(1:9 ...

最新文章

  1. 光伏企业:再出海要上两节课
  2. vc 中对对话框的几种操作
  3. app启动页数秒加载 代码_干货 | App 自动化测试痛点(弹框及首页启动加载完成判断处理)
  4. 邮箱通知php,PHPMailer 发送邮件(含详细介绍及使用方法说明)
  5. 该伙伴事务管理器已经禁止了它对远程/网络事务的支持
  6. 【论文研读】【医学图像分割】【FCN+RNN】Recurrent Neural Networks for Aortic Image Sequence Segmentation with ...
  7. layuit 框架_UI框架Layui入门介绍
  8. Libra客户端使用
  9. R-CNN解读+代码梳理
  10. PageObject(PO)设计模式在 UI 自动化中的实践总结(以 QQ 邮箱登陆为例)
  11. GPS的Heading, Course, and Crab Angle不同与区别
  12. 关键词词云怎么做_做关键词分析,我有4款免费词云工具
  13. ? addActionListener()调用actionPerformed()
  14. Android双波浪自定义控件(DoubleWaveView)
  15. Method of posterior probabilities generation for ordinal classification
  16. ubuntu 高级做图软件 krita
  17. Scala-trait(特质)
  18. win11自带键盘一直自动输入
  19. 【CSS3系列】第五章 · web 字体
  20. ROS2之DDS问题汇集

热门文章

  1. 戴尔台式计算机键盘,dell键盘失灵怎么解决【图文教程】
  2. 手机QQ邮箱可以发html邮件么,如何使用手机qq邮箱发送邮件
  3. html设计打地鼠游戏,js实现打地鼠小游戏
  4. 快速排序(萝卜填坑算法)【必会知识】
  5. 广义矩方法(GMM)与动态面板数据简述
  6. 电商经验!补单防止骗子退款技巧
  7. 在编辑word时,如何查找和替换空格符呢?
  8. 感情箴言滴水藏海(二)
  9. 基于RNA的新型癌症疗法介绍
  10. mistake - pwnable