matlab实现随机梯度下降法的代码以及每句代码的解释并且绘制拟合图形,使用代价函数和假设函数
时间: 2024-06-10 15:05:47 浏览: 291
以下是MATLAB实现随机梯度下降法的代码,并附有注释说明和绘图代码:
%% 数据准备
clear;clc;
load('data.mat'); % 加载数据集,包含输入 x 和输出 y
m = size(x, 1); % 样本数
X = [ones(m, 1), x]; % 加入偏置项
theta = zeros(size(X, 2), 1); % 初始化模型参数
%% 随机梯度下降法实现
alpha = 0.001; % 学习率
iter = 10000; % 迭代次数
J_history = zeros(iter, 1); % 记录每次迭代的代价函数值
for i = 1:iter
index = randi(m); % 随机选择一个样本
delta = (X(index, :) * theta - y(index)) * X(index, :)'; % 计算代价函数的梯度
theta = theta - alpha * delta; % 更新模型参数
J_history(i) = sum((X * theta - y) .^ 2) / (2 * m); % 计算代价函数值
end
%% 绘制拟合图像
figure;
scatter(x, y, 10); % 绘制原始数据散点图
hold on;
plot(x, X * theta, 'r'); % 绘制拟合曲线
xlabel('x');
ylabel('y');
title('Fitted Curve with Random Stochastic Gradient Descent');
legend('Data', 'Fitted Curve');
注释说明:
1. 首先加载数据集,并对数据做了预处理,因为梯度下降需要加入偏置项;
2. 然后初始化模型参数,开始进行随机梯度下降法的迭代;
3. 在每次迭代中,随机选择一个样本计算代价函数的梯度,使用这个梯度更新模型参数;
4. 记录每次迭代的代价函数值,用于绘制代价函数曲线;
5. 最后绘制原始数据散点图和拟合曲线;
代价函数和假设函数:
代价函数 J(θ):J(θ) = 1/2m * ∑(h(x(i))-y(i))^2
假设函数 h(θ,x):h(θ,x) = θ0 + θ1*x
其中,θ是模型参数,x是输入特征,y是输出标签。
阅读全文