用matlab编一段随机梯度下降法程序绘制数据和拟合曲线(带图像,输入特征和输出目标任意)
时间: 2024-05-07 21:17:45 浏览: 159
好的,我会为您编写一段随机梯度下降法的 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 和输出目标 y
X = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]';
y = [2, 4, 5, 7, 8, 10, 11, 13, 14, 16]';
% 设置学习率和迭代次数
alpha = 0.01;
num_iters = 1000;
% 初始化参数和损失函数
theta = zeros(2, 1);
J_history = zeros(num_iters, 1);
% 添加偏置项,即 x0 = 1
X = [ones(length(X), 1), X];
% 开始训练
for iter = 1:num_iters
% 随机选择一个小批量样本
batch_size = 3;
indices = randperm(length(X), batch_size);
X_batch = X(indices, :);
y_batch = y(indices);
% 计算梯度和损失函数
h = X_batch * theta;
theta = theta - alpha * (X_batch' * (h - y_batch)) / batch_size;
J_history(iter) = 1 / (2 * batch_size) * sum((h - y_batch).^2);
end
% 输出最终的参数和损失函数
fprintf('theta: %f %f\n', theta(1), theta(2));
fprintf('final cost: %f\n', J_history(num_iters));
% 绘制数据和拟合曲线
plot(X(:, 2), y, 'rx', 'MarkerSize', 10);
hold on;
plot(X(:, 2), X * theta, 'b-', 'LineWidth', 2);
legend('Training data', 'Linear regression');
xlabel('x');
ylabel('y');
```
在这个程序中,我们使用了一个简单的数据集,其中输入特征 X 是 1 到 10 的数字,输出目标 y 是对应的数字加上一个随机噪声。我们的目标是拟合一条直线来近似这些数据点。
程序首先设置了学习率和迭代次数,然后初始化了参数和损失函数。接着,我们为输入特征 X 添加了偏置项,即 x0 = 1,以便在计算中可以方便地使用向量化运算。
在训练过程中,我们使用了小批量梯度下降法,即每次随机选择一个小批量样本来计算梯度和损失函数。这样可以加速训练过程,并且可以避免陷入局部最优解。
最后,程序输出了训练得到的参数和损失函数,并绘制了数据和拟合曲线的图像。您可以根据自己的需要修改输入特征和输出目标,以及调整学习率和迭代次数来得到更好的结果。
用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 算法,其中在每个迭代中我们计算梯度,然后使用学习速率和梯度更新参数向量。最后,我们绘制数据和拟合直线。
请注意,此处的示例使用了一个简单的线性回归模型,只有一个特征。如果您需要处理更复杂的数据,您需要使用更复杂的模型(如多项式回归、逻辑回归等),并相应地调整代码。
阅读全文
相关推荐

















