小批量梯度下降算法要用于线性回归,损失函数为均方误差,可以改下之前的MATLAB小批量梯度下降算法的代码吗
时间: 2024-02-13 15:05:23 浏览: 73
当损失函数为均方误差时,可以使用以下代码实现小批量梯度下降算法:
```matlab
function [beta] = miniBatchGradientDescent(X, y, learning_rate, batch_size, num_iters)
% X: 训练集矩阵,每行是一个样本,每列是一个特征
% y: 训练集向量,每个元素是一个样本的标签
% learning_rate: 学习率
% batch_size: 每个batch的样本数
% num_iters: 迭代次数
% beta: 拟合系数,每个元素是一个特征的权重
n = size(X, 2);
m = size(X, 1);
beta = zeros(n, 1);
for i = 1:num_iters
% 随机选择一个batch的数据
batch = randsample(m, batch_size);
X_batch = X(batch,:);
y_batch = y(batch);
% 计算梯度
gradient = X_batch'*(X_batch*beta - y_batch) / batch_size;
% 更新参数
beta = beta - learning_rate * gradient;
% 计算损失函数
loss = norm(X*beta - y)^2 / (2*m);
fprintf('Iteration %d, loss=%.4f\n', i, loss);
end
end
```
该算法的主要区别在于计算损失函数时使用的是均方误差,即 `loss = norm(X*beta - y)^2 / (2*m)`。其他部分与之前的算法类似。
阅读全文