<<欢迎访问我的博客
NOTE:这是本人在学习斯坦福大学Andrew Ng教授的机器学习后,尝试练习的用matlab实现的梯度下降算法。
前言
本文是多元线性回归的练习,这里练习的是最简单的二元线性回归,参考斯坦福大学的教学网。本题给出的是97个数据样本点,现在的问题是要根据这97个训练样本,拟合得到一个线性方程。通过画出训练样本点的分布凭直觉可以发现这是一个典型的线性回归问题。
实验过程
-
方法一
使用一般方法,嵌套循环实现
for j = 1:2 for i = 1:m temp = temp + (theta(1)*X(i,1)+theta(2)*X(i,2)-y(i,1))*X(i,j); end theta(j) = theta(j) - alpha*temp/m; end
-
方法二
使用矩阵运算单独计算每个theta
grad1 = (1/m).* X(:,1)' * ((X * theta) - y); theta(1) = theta(1) - alpha.*grad1; grad2 = (1/m).* X(:,2)' * ((X * theta) - y); theta(2) = theta(2) - alpha.*grad2;
-
方法三
使用矩阵直接得到theta的值
% Here is the gradient grad = (1/m).* X' * ((X * theta) - y); % Here is the actual update theta = theta - alpha .* grad;
实验结果
- 训练样本散点和回归曲线预测图:
- 损失函数与参数之间的曲面图::
- 损失函数的等高线图: