梯度下降算法matlab
时间: 2023-06-12 20:06:23 浏览: 56
以下是一个简单的梯度下降算法的 MATLAB 实现,假设我们要最小化一个函数 f(x):
```matlab
function [x, fval] = gradient_descent(f, x0, alpha, epsilon, max_iter)
% 梯度下降算法
%
% 输入参数:
% f: 目标函数句柄
% x0: 初始点
% alpha: 步长
% epsilon: 收敛精度
% max_iter: 最大迭代次数
%
% 输出参数:
% x: 最优解
% fval: 最优解的函数值
x = x0;
iter = 0;
while iter < max_iter
fx = f(x);
grad = (f(x + epsilon) - fx) / epsilon; % 计算梯度
x = x - alpha * grad; % 更新变量
iter = iter + 1;
end
fval = f(x);
end
```
在使用时,需要定义一个目标函数句柄,例如:
```matlab
f = @(x) x^2 + 2*x + 1;
[x, fval] = gradient_descent(f, 1, 0.1, 1e-6, 1000);
```
上面的代码将使用梯度下降算法求解函数 f(x) = x^2 + 2x + 1 的最小值,初始点为 1,步长为 0.1,收敛精度为 1e-6,最大迭代次数为 1000。最终得到的最优解 x 和函数值 fval 将作为输出返回。
相关问题
梯度下降算法Matlab
以下是一个简单的梯度下降算法的 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');
```
随机梯度下降算法matlab
随机梯度下降(Stochastic Gradient Descent,SGD)是一种常用的优化算法,用于求解机器学习模型的参数。它是梯度下降算法的一种变体,通过随机选择一个样本来估计整体的梯度,并根据该估计更新模型参数。
在Matlab中,可以使用以下步骤实现随机梯度下降算法:
1. 初始化模型参数:根据具体问题,初始化模型的参数向量。
2. 设置学习率和迭代次数:选择合适的学习率(learning rate)和迭代次数(epochs)。
3. 随机选择样本:从训练数据中随机选择一个样本。
4. 计算梯度:根据选择的样本计算损失函数对模型参数的梯度。
5. 更新参数:使用计算得到的梯度和学习率更新模型参数。
6. 重复步骤3-5,直到达到指定的迭代次数或收敛条件。
以下是一个简单的示例代码,演示了如何在Matlab中实现随机梯度下降算法:
```matlab
% 训练数据
X = ...; % 特征矩阵
y = ...; % 标签向量
% 初始化模型参数
theta = zeros(size(X, 2), 1);
% 设置学习率和迭代次数
learning_rate = 0.01;
epochs = 100;
% 随机梯度下降算法
for epoch = 1:epochs
% 随机选择样本
idx = randi(size(X, 1));
x = X(idx, :);
label = y(idx);
% 计算梯度
gradient = (x * theta - label) * x';
% 更新参数
theta = theta - learning_rate * gradient;
end
```
这是一个简单的随机梯度下降算法的示例,实际应用中可能需要根据具体问题进行适当的修改和调整。