从零开始人工智能Matlab案例-线性回归与梯度下降算法

案例背景

假设某饮料公司想预测气温变化对饮料销量的影响。使用线性回归模型拟合历史数据,并通过梯度下降算法优化模型参数,动态展示参数更新如何逐步降低预测误差。

算法原理

从零开始人工智能Matlab案例-线性回归与梯度下降算法_第1张图片

Matlab实现与动态可视化

1. 生成带噪声的线性数据
rng(42); % 固定随机种子
x = 0:0.5:20; % 温度(℃)
y = 2.5 * x + 10 + 8 * randn(size(x)); % 销量(添加高斯噪声)

% 可视化数据
figure;
scatter(x, y, 50, 'b', 'filled');
hold on;
xlabel('温度 (℃)');
ylabel('销量 (箱)');
title('饮料销量与温度关系');
2. 梯度下降实现线性回归
% 初始化参数
theta = [0; 0]; % [theta0; theta1]
alpha = 0.001;  % 学习率
max_iters = 100;
m = length(x);

% 动态绘图设置
h_plot = plot(x, theta(1) + theta(2)*x, 'r', 'LineWidth', 2);
loss_history = zeros(max_iters, 1);

% 梯度下降迭代
for iter = 1:max_iters
    % 计算预测值和误差
    h = theta(1) + theta(2) * x;
    error = h - y;
    
    % 计算梯度
    grad0 = (1/m) * sum(error);
    grad1 = (1/m) * sum(error .* x);
    
    % 更新参数
    theta(1) = theta(1) - alpha * grad0;
    theta(2) = theta(2) - alpha * grad1;
    
    % 记录损失值
    loss = (1/(2*m)) * sum(error.^2);
    loss_history(iter) = loss;
    
    % 更新回归线
    set(h_plot, 'YData', theta(1) + theta(2)*x);
    title(sprintf('迭代次数: %d,  销量 = %.2f + %.2f×温度', iter, theta(1), theta(2)));
    drawnow;
    pause(0.1);
end

% 绘制损失函数下降曲线
figure;
plot(1:max_iters, loss_history, 'LineWidth', 2);
xlabel('迭代次数');
ylabel('均方误差 (MSE)');
title('损失函数下降过程');
grid on;

关键代码解释

  • 数据生成:用线性关系 y=2.5x+10 叠加高斯噪声,模拟真实数据的不确定性。

  • 动态可视化:实时更新回归线的位置,直观展示参数 θ0截距和 θ1斜率的优化过程。

  • 梯度计算:通过向量化操作高效计算梯度,避免显式循环。

  • 损失曲线:绘制损失函数随迭代次数的下降趋势,验证算法收敛性。


结果分析

  • 输出效果

    • 动态显示回归线从初始位置逐步逼近最优拟合。从零开始人工智能Matlab案例-线性回归与梯度下降算法_第2张图片

    • 损失曲线呈指数下降,表明梯度下降有效降低了预测误差。从零开始人工智能Matlab案例-线性回归与梯度下降算法_第3张图片

  • 算法特点

    • 优点:原理直观,适用于线性关系明确的场景。

    • 挑战:学习率α需手动调整,过大导致震荡,过小收敛慢。

你可能感兴趣的:(人工智能,算法,matlab)