拟合梯度下降法的matlab代码
时间: 2024-09-30 09:09:25 浏览: 30
拟合梯度下降法是一种常用的优化算法,用于最小化成本函数。在MATLAB中,你可以使用内置的`fminunc`函数或者手动编写循环来实现梯度下降。这里是一个基本的示例,假设我们有一个简单的线性回归模型,目标是最小化均方误差:
```Matlab
% 定义数据点和函数
x = randn(100, 1); % 输入特征
y = 2 + 3*x + 0.5*randn(100, 1); % 真实值加上噪声
% 假设我们有这样一个模型 costFcn
costFcn = @(theta) sum((y - theta(1)*x - theta(2)).^2) / (2 * length(x));
% 初始参数
theta = [0; 0]; % 初始的权重向量
% 设置学习率和最大迭代次数
alpha = 0.01; % 学习率
maxIter = 1000;
% 手动梯度下降
for iter = 1:maxIter
grad = -(1 / length(x)) * x'*(y - theta(1)*x - theta(2)); % 计算梯度
theta = theta - alpha * grad; % 更新参数
end
% 显示最终的参数
disp(['Final parameters: ' num2str(theta)])
% 如果你想使用fminunc,可以这样写
% 使用fminunc更简洁,因为它会自动处理梯度计算和其他细节
options = optimoptions('fminunc', 'Algorithm', 'quasi-newton');
[theta_min, ~] = fminunc(costFcn, theta, options);
disp(['Final parameters using fminunc: ' num2str(theta_min)]);
```
阅读全文