一、要求
1.编程实现Linear Regression模型,计算线性回归损失的函数,求解实际问题
2.编程实现梯度下降算法(BGD、SGD、minibatch-GD),比较学习率α对结果影响
3.使用Linear Regression的标准方程法求解最优解
二、算法
目标函数:
成本函数:
线性回归的目的是使得成本函数值最小
求解算法:梯度下降法
步骤:1.初始化θ(随机初始化θ,可以初始为0);
2.沿着J(θ)负梯度方向迭代,更新后的θ使J(θ)更小;
3.不断迭代直到达到某个停止条件为止,如迭代次数达到某个指定的值,或算法达到某个可以允许的误差范围。
迭代公式:
,其中α为学习率(步长)
三、过程记录
1.数据集可视化:从MATLAB中导入数据集文件,将第一列作为x轴,第二列作为y轴,如下:
其中plotData为绘图函数,其内容如下:
绘制的图形如下图所示:
图1 数据集可视化图像
2.计算线性回归损失函数:
创建n×2的特征值的矩阵X,它应该包括样本的第一列以及截距列(初始为1),创建2×1的θ值矩阵,初始化为0。
然后在computeCost函数中使用成本函数计算公式计算损失函数的值,公式的代码如下:J = sum((X * theta - y).^2) / (2*m);%m为样本数
可以得到由初始θ为0的成本为32.07
3.梯度下降:
通过梯度下降的方法来不断更新θ值,并根据损失函数J(θ)的值来找到趋于收敛的最小成本值。设置更新的迭代次数为1500次,算法中的学习率alpha先设定为0.01。
实现梯度下降函数的代码如下:
每一次迭代都需要同时对θ1和θ2进行更新,所以需要创建一个新的矩阵theta_s来储存前一个θ值。通过该函数的调用可以得到最终的θ值和每一次迭代的成本值,如下:
图2 最终θ值
图3 成本函数值(部分)
通过观察成本函数值的变换可以发现它的值从来没有上升且最后收敛于稳定值,满足条件。
4.绘制线性拟合曲线:
在获得最小成本函数值以及对应的θ值后,可以利用这些参数绘制拟合曲线,结果如下:
图4 拟合曲线与初始样本点分布
5.预测:
利用θ值可以对未知的特征值进行预测,例如在例子中预测35000和70000人区域的利润结果为:
图5 预测结果
6.成本函数可视化:
为了更直观的观察θ值与成本函数J(θ)的关系,通过computeCost函数将不同的θ值代入求解绘制出θ1与θ2以及J(θ)的三维图
结果如下:
图6 成本函数三维曲面图
也可以使用MATLAB中contour函数来绘制等高线图如下:
图7 成本函数等高线图
其中红色标志代表的是最佳的θ1和θ2值。同时也可以看出,成本函数具有全局最小值,并且梯度下降的每一步都在靠近最小值对应的点。
7.对比实验:
在上述实验过程中,我们在进行梯度下降时,需要设置相关参数,一个是迭代次数,另一个是学习率,所以接下来对学习率进行进一步研究。
多次改变学习率的值观察结果:
图8 学习率为0.02
图9 学习率为0.3
可以看出此时明显异常,且观察成本函数的值,发现无法收敛
图10 学习率为0.001
图11 学习率为0.00001
在减小学习率的过程中,可以去观察成本函数的值的变化,会发现原来的1500迭代次数已经不能满足函数收敛了,而学习率为0.00001时迭代次数即使增加到几万次也无法完全收敛。
四、结果分析
上述实验成功完成了线性回归模型的建立,损失函数的计算以及梯度下降算法的实现,而在梯度下降的实现过程中,我们也发现了学习率对结果的影响:如果学习率过大,则每次迭代可能不会减小代价函数的值,,甚至会超过局部最小值导致无法收敛;如果学习率过小,则达到收敛所需要的迭代次数将会特别高
标签:机器,函数,迭代,梯度,如下,学习,matlab,线性,成本 From: https://blog.csdn.net/stay23/article/details/136879157