用matlab编一段随机梯度下降法程序绘制数据和拟合曲线(带图像,输入特征和输出目标任意)
时间: 2024-05-07 15:17:45 浏览: 137
好的,我会为您编写一段随机梯度下降法的 MATLAB 程序,并绘制数据和拟合曲线。以下是程序代码:
```matlab
% 生成数据
x = rand(100, 1) * 10;
y = 3 * x + 2 + randn(100, 1);
% 初始化参数
theta = randn(2, 1);
% 定义学习率
alpha = 0.01;
% 迭代次数
num_iters = 1000;
% 随机梯度下降法
for iter = 1:num_iters
% 随机选择一个样本
i = randi(length(x));
x_i = [1; x(i)];
y_i = y(i);
% 计算梯度
grad = (theta' * x_i - y_i) * x_i;
% 更新参数
theta = theta - alpha * grad;
end
% 绘制数据和拟合曲线
plot(x, y, 'o');
hold on;
plot(x, theta(1) + theta(2) * x);
xlabel('Input Feature');
ylabel('Output Target');
legend('Data', 'Fitted Line');
```
这段程序生成了一个包含 100 个样本的数据集,其中输入特征 x 是在 [0, 10] 范围内的随机数,输出目标 y 是 3x+2 加上一些高斯噪声。程序使用随机梯度下降法来拟合数据,并最终绘制了数据和拟合曲线的图像。
相关问题
用matlab编一段小批量梯度下降法程序绘制数据和拟合曲线(带图像,输入特征和输出目标任意)
好的,以下是一个用 Matlab 编写的小批量梯度下降法程序,可用于绘制数据和拟合曲线:
```matlab
% 定义数据
X = [1, 1; 1, 2; 1, 3; 1, 4; 1, 5];
y = [2; 3; 4; 5; 6];
% 初始化参数
theta = [0; 0];
alpha = 0.01;
iterations = 1000;
batch_size = 2;
% 迭代更新参数
for i = 1:iterations
% 随机抽取一部分数据
batch_indices = randsample(size(X, 1), batch_size);
X_batch = X(batch_indices, :);
y_batch = y(batch_indices);
% 计算梯度
grad = (1 / batch_size) * X_batch' * (X_batch * theta - y_batch);
% 更新参数
theta = theta - alpha * grad;
end
% 绘制数据和拟合曲线
plot(X(:, 2), y, 'rx', 'MarkerSize', 10);
hold on;
plot(X(:, 2), X * theta, 'b-', 'LineWidth', 2);
legend('Training data', 'Linear regression');
xlabel('Feature');
ylabel('Output target');
```
这个程序使用了一个简单的数据集,其中 `X` 是输入特征矩阵,`y` 是对应的输出目标向量。程序首先初始化了参数,包括初始权重 `theta`,学习率 `alpha`,迭代次数 `iterations` 和小批量大小 `batch_size`。然后,程序使用随机梯度下降法来更新权重,每次随机抽取一部分数据进行计算。最后,程序将数据和拟合曲线绘制出来。
运行程序后,你应该可以看到一个包含数据点和拟合曲线的图像,这个图像是根据输入特征和输出目标绘制的。请注意,由于随机梯度下降法的随机性,每次运行程序得到的结果可能会略有不同。
用matlab编一段BGD梯度下降法程序(带图像,输入特征和输出目标任意)
好的,以下是一个简单的梯度下降法的 Matlab 程序示例,其中使用了 Batch Gradient Descent (BGD) 算法,同时使用了一个简单的线性回归模型(只有一个特征)。
我们将使用一个示例数据集,其中包含一个城市的人口和该城市的利润。我们的目标是建立一个模型来预测在不同城市的人口时,该城市的利润。下面是代码:
```matlab
% 导入数据
data = load('ex1data1.txt');
X = data(:, 1); % 特征
y = data(:, 2); % 目标值
m = length(y); % 样本数量
% 初始化参数
theta = zeros(2, 1); % 参数向量
iterations = 1500; % 迭代次数
alpha = 0.01; % 学习速率
% 执行 BGD 算法
for iter = 1:iterations
% 计算梯度
h = X * theta;
grad = (1/m) * X' * (h - y);
% 更新参数
theta = theta - alpha * grad;
end
% 绘制数据和拟合直线
plot(X, y, 'rx', 'MarkerSize', 10);
hold on;
plot(X, [ones(m, 1) X] * theta, '-');
legend('Training data', 'Linear regression');
```
我们首先导入数据,然后初始化参数向量 $\theta$,迭代次数和学习速率。然后我们执行 BGD 算法,其中在每个迭代中我们计算梯度,然后使用学习速率和梯度更新参数向量。最后,我们绘制数据和拟合直线。
请注意,此处的示例使用了一个简单的线性回归模型,只有一个特征。如果您需要处理更复杂的数据,您需要使用更复杂的模型(如多项式回归、逻辑回归等),并相应地调整代码。
阅读全文