批量梯度下降法matlab实现
时间: 2023-11-03 08:16:34 浏览: 38
批量梯度下降法(Batch Gradient Descent)的Matlab实现如下:
```Matlab
function [theta, J_history] = batchGradientDescent(X, y, theta, alpha, num_iters)
m = length(y); % 样本数量
J_history = zeros(num_iters, 1); % 用于存储每一次迭代后的代价函数值
for iter = 1:num_iters
% 计算梯度
h = X * theta;
errors = h - y;
delta = (1/m) * X' * errors;
% 更新参数
theta = theta - alpha * delta;
% 记录每一次迭代后的代价函数值
J_history(iter) = computeCost(X, y, theta);
end
end
```
其中,X是训练数据的特征矩阵,y是训练数据的目标值,theta是需要学习的参数向量,alpha是学习率,num_iters是迭代次数。
在每一次迭代中,先计算预测值与目标值之间的误差,然后计算梯度,最后根据学习率更新参数theta。同时,记录每一次迭代后的代价函数值,以便后续分析学习效果。
需要注意的是,该代码假设训练数据已经进行了特征缩放和归一化处理,如果没有对数据进行处理,可以在调用该函数前先对数据进行处理。
相关问题
小批量梯度下降法matlab实现
以下是使用 MATLAB 实现小批量梯度下降法的示例代码:
```matlab
% 随机生成数据集
X = randn(100,2);
y = 2*X(:,1) - 3*X(:,2) + randn(100,1);
% 初始化参数
theta = randn(2,1);
alpha = 0.01;
batch_size = 10;
num_iters = 100;
% 迭代更新参数
for i = 1:num_iters
% 随机选择一批数据
idx = randperm(size(X,1),batch_size);
X_batch = X(idx,:);
y_batch = y(idx);
% 计算梯度
grad = X_batch'*(X_batch*theta - y_batch);
% 更新参数
theta = theta - alpha*grad;
end
```
在上面的代码中,我们首先随机生成一个数据集,然后初始化模型参数 `theta`、学习率 `alpha`、小批量数据的大小 `batch_size` 和迭代次数 `num_iters`。接着,我们使用一个 `for` 循环来迭代更新参数。在每次迭代中,我们随机选择一批数据,计算梯度并更新参数。最终,我们得到了一个能够较好地拟合数据的模型参数 `theta`。
需要注意的是,以上代码只是一个简单的示例,实际应用中还需要根据具体情况对其进行修改和优化。
批量梯度下降法matlab
以下是批量梯度下降法在MATLAB中的实现:
假设我们要用批量梯度下降法来最小化代价函数J(theta)。其中,theta是我们要学习的参数向量。我们需要给定以下参数:
1. alpha: 学习率
2. num_iters: 迭代次数
3. X: 特征矩阵,每行代表一个样本的特征向量
4. y: 目标变量向量,每行代表一个样本的目标变量值
以下是MATLAB代码:
```
function [theta, J_history] = batchGradientDescent(X, y, theta, alpha, num_iters)
m = length(y); % 样本数
J_history = zeros(num_iters, 1); % 记录每次迭代后的代价函数值
for iter = 1:num_iters
% 计算所有样本的预测值
h = X * theta;
% 更新参数向量theta
theta = theta - (alpha / m) * X' * (h - y);
% 记录代价函数值
J_history(iter) = computeCost(X, y, theta);
end
end
```
其中,computeCost函数用来计算代价函数值。X是一个m×n的矩阵,m是样本数,n是特征数。y是一个m×1的向量。theta是一个n×1的向量。alpha是一个标量。num_iters是一个整数。函数返回theta和J_history两个向量,J_history记录了每次迭代后的代价函数值。