梯度下降法matlab代码与注释
时间: 2024-02-12 16:42:41 浏览: 17
function [theta, J_history] = gradientDescent(X, y, theta, alpha, num_iters)
%梯度下降法
% [theta, J_history] = GRADIENTDESCENT(X, y, theta, alpha, num_iters)
% 通过使用梯度下降算法来学习线性回归模型的参数theta。
%
% X:样本数据矩阵(包括常数列)
% y:样本标签列向量
% theta:模型参数列向量
% alpha:学习速率
% num_iters:梯度下降的迭代次数
%
% theta:学习后的模型参数列向量
% J_history:每次迭代后的代价函数值
% 初始化一些有用的变量
m = length(y); % 样本数量
J_history = zeros(num_iters, 1); % 代价函数值历史记录
for iter = 1:num_iters
% 计算预测结果
h = X * theta;
% 计算误差
errors = h - y;
% 计算梯度
gradient = (1 / m) * (X' * errors);
% 更新参数
theta = theta - alpha * gradient;
% 保存每次迭代后的代价函数值
J_history(iter) = computeCost(X, y, theta);
end
end
相关问题
梯度下降算法matlab代码
以下是一个简单的梯度下降算法的 Matlab 代码示例:
```matlab
% 初始化变量
theta = zeros(2,1); % 参数向量
alpha = 0.01; % 学习速率
num_iters = 1500; % 迭代次数
% 加载数据
data = load('ex1data1.txt');
X = data(:, 1); % 特征向量
y = data(:, 2); % 目标值向量
m = length(y); % 样本数量
% 梯度下降算法
for iter = 1:num_iters
% 计算假设函数的预测值
h = X * theta;
% 计算误差
error = h - y;
% 更新参数向量
theta = theta - (alpha / m) * X' * error;
end
% 显示结果
fprintf('最终的参数向量为:\n');
fprintf('%f\n', theta);
```
在这个示例中,我们使用梯度下降算法来拟合一个线性回归模型。我们首先加载数据,然后初始化参数向量、学习速率和迭代次数。在每次迭代中,我们计算假设函数的预测值,计算误差,并使用误差来更新参数向量。最后,我们输出最终的参数向量。
梯度下降法MATLAB代码
梯度下降法是一种常见的优化算法,用于最小化一个函数。它的思想是沿着函数下降最快的方向来搜索最优解。以下是梯度下降法的MATLAB代码示例:
```matlab
% 设定初始点
x0 = [1; 2];
% 设定学习率
alpha = 0.1;
% 设定迭代次数
max_iter = 1000;
% 定义函数
f = @(x) x(1)^2 + x(2)^2;
% 定义梯度函数
grad_f = @(x) [2*x(1); 2*x(2)];
% 初始化参数
x = x0;
iter = 0;
grad_norm = Inf;
% 开始迭代
while iter < max_iter && grad_norm > 1e-6
% 计算梯度
grad = grad_f(x);
% 更新参数
x = x - alpha * grad;
% 计算梯度范数
grad_norm = norm(grad);
% 迭代次数加1
iter = iter + 1;
end
% 输出最优解和最小值
fprintf('最优解为 (%f, %f)\n', x(1), x(2));
fprintf('最小值为 %f\n', f(x));
```
此代码中,我们设定了初始点、学习率、迭代次数、函数以及梯度函数,并进行了初始化操作。然后,在每一次迭代中,我们计算梯度、更新参数、计算梯度范数,并进行迭代操作,直到达到最大迭代次数或者梯度范数小于一定阈值为止。最后输出最优解和最小值。