本文将详细的叙述①线性回归,②梯度下降方法以及③在线性回归中应用梯度下降方法。
(1)线性回归
①hypothesis: θi:模型参数
②线性回归(单变量)所构函数:
m:训练集样本容量;
h(x(i)): 预测值;
y(i): 真实值。
该目标函数所求 预测值与实际值之差的平方和最小值,也即为关于θ0和θ1的最小化过程,找寻到合适的θ值使得目标函数最小,从而使预测值更加接近于实际值,趋近关系更加准确。
③代价函数(cost function)
J(θ0,θ1)为代价函数,也称平方误差代价函数,进一步求解也为相对于求得:min J(θ0,θ1).
上图为当θ1=0.5时,关于h(x)的函数图,红标点为实际值,在直线上的蓝色点为预测值,之间所构成的差便为差异值,进行计算得到代价函数J的值如下:
注:m为3,指样本数;
④代价函数图
由上得知,当θ1=0.5所得到的J值,在代价函数图中为一具体点,关于θ1构成的函数J(θ1)如下,每一点为假设函数h(x)随着θ1改变计算所得的值,我们目标便是当在函数J(θ1)最低点时,即为最小值,所求得的预测值最接近于实际值,下图的粉色点便为J值=0.58.
当θ1在变化时,上图当θ1=1时,最好拟合预测值与真实值的直线,达到回归的良好效果。
⑤两个参数构成的J(θ0,θ1)
由上可知,代价函数为θ0=0的情况,考虑了一个参数,当有两个参数时,所构成的代价函数图为三维曲面,相似于在三维空间中找到最低值的过程。
两个参数所构成的代价函数如一个“碗形”,所以我们的目标在于找到“碗底”,即为J的最小值。
相应的是,为了便于在平面描述该曲面图,引入了一种描述方法,contour plots(等高线图),在同一个环上,J的值时相等的,个人认为相当于是该“碗形”的从上至下的俯视图,形成了意义相似的等高线图,如下所示。
(2)梯度下降(gradient descent)
function J(θ0,θ1) → 求得min J(θ0,θ1)
<1>初始将 θ0 =0,θ1=0;
<2>不断改变θ0,θ1 ,使得 J(θ0,θ1)变小,直至找到J最小值。如图所示:
可构成为:
α:learning rate (学习速率,也可称为步长)
在此过程中需要同时更新θ0和θ1,不可单独更新一个量。
其中,步长α的选择至关重要,如果学习速率过低,将导致迭代计算多次才能到达最小值;如步长过大,容易越过最小值,使最终结果发散。
所以最合理的步长选择方法是:在某一点起始点,选择一个最初的步长,从该点开始,导数值(即斜率)逐渐变小,同时使得步长也变短,梯度下降自动采取较小的幅度,从而能使得步长趋近于最合适的值选择,使得到达最小值。
(3)线性回归应用梯度下降
确定更新θ0和θ1的值,通过偏微分分别同时更新其值,可定义如下:
总结:回归多用于在连续性的值,整个过程中,首先有假设函数h(x),而后根据此求得代价函数的最小值,所以目标在于对代价函数的分析,而θ值决定了代价函数的变化情况,通过代价函数的函数图,如是二维的有最低点,即为最小值,从起始点开始,求得每个点的斜率情况,进行对θ值的不断更新,使其到达最小点,而在此过程中,α的选择尤为重要,存在过大或过小的情况,所以我们通过随着导数斜率值逐渐变小,我们使得步长也随之减小,从而使得趋近于最小值,不导致产生发散或计算效率过低的情况,最后达到最好的拟合预测值与实际值的差异的变化情况,达到精准的预测判断。
Matlab代码随后将会上传到个人Github中,如有需要,欢迎共同学习。star~~~thanks~~~
links:https://github.com/RevereGit