梯度下降算法Matlab
时间: 2023-12-24 22:44:49 浏览: 75
以下是一个简单的梯度下降算法的 Matlab 实现:
```matlab
function [theta, J_history] = gradientDescent(X, y, theta, alpha, num_iters)
% X 是训练集特征矩阵,y 是训练集输出向量,theta 是模型参数向量
% alpha 是学习率,num_iters 是迭代次数
% 返回最终的模型参数向量 theta 和每次迭代后的代价函数 J 的值
m = length(y); % 训练集样本数
J_history = zeros(num_iters, 1);
for iter = 1:num_iters
% 计算假设函数 h 的值
h = X * theta;
% 计算代价函数 J 的值
J = 1 / (2 * m) * sum((h - y) .^ 2);
J_history(iter) = J;
% 更新模型参数向量 theta
theta = theta - alpha / m * X' * (h - y);
end
end
```
使用方法示例:
```matlab
% 构造训练集数据
m = 100; % 样本数
X = [ones(m, 1), rand(m, 1)]; % 特征矩阵
y = 2 * X(:, 2) + randn(m, 1); % 输出向量
% 初始化模型参数向量
theta = zeros(2, 1);
% 设置学习率和迭代次数
alpha = 0.01;
num_iters = 1000;
% 调用梯度下降算法求解模型参数向量
[theta, J_history] = gradientDescent(X, y, theta, alpha, num_iters);
% 绘制代价函数 J 随迭代次数的变化曲线
plot(1:num_iters, J_history, '-b', 'LineWidth', 2);
xlabel('迭代次数');
ylabel('代价函数 J');
```
阅读全文