可以写一个MATLAB小批量梯度下降算法的代码吗,输入训练集矩阵和向量,输出拟合系数
时间: 2024-02-13 10:05:21 浏览: 66
当然可以,以下是一个简单的MATLAB小批量梯度下降算法的代码:
```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;
end
end
```
该算法每次迭代随机选择一个batch的样本进行梯度计算和参数更新。其中,`randsample`函数用于随机选择样本,`X_batch`和`y_batch`是选择出来的batch的训练集和标签向量。`gradient`是计算出来的梯度,`beta`是更新后的拟合系数。
阅读全文