前置知识
平方损失函数
假设上图的红线就是拟合出的函数y=w0+w1x,那么每个数据点(xi,yi)所对应的误差就是yi−(w0+w1xi)上面的误差往往也称之为「残差」。但是在机器学习中,我们更喜欢称作「损失」,即真实值和预测值之间的偏离程度。那么,对 ????个全部数据点而言,其对应的残差损失总和就为:
i=1∑n(yi−(w0+w1xi))
更进一步,在线性回归中,我们一般使用残差的平方和来表示所有样本点的误差。公式如下:
i=1∑n(yi−(w0+w1xi))2
使用残差平方和的好处在于能保证损失始终是累加的正数,而不会存在正负残差抵消的问题。对于此公式而言,机器学习中有一个专门的名词,那就是平方损失函数。而为了得到拟合参数 ????0 和 ????1 最优的数值,我们的目标就是让平方损失函数最小。
最小二乘法
代数求解
step1:f=∑i=1n(yi−(w0+w1xi))2为平方损失函数;
step2:分别对该函数的w0和w1求偏导;
∂w0∂f=−2i=1∑nyi−nw0−i=1∑nw1xi∂w1∂f=−2i=1∑n(xiyi−w0xi+w1xi2)
step3:分别令偏导为零;
首先,这是一个二次函数,极值就是最值。其次只要足够偏移,平方损失函数的值就会不断变大,所以是不可能取到极大值的,那么偏导为0的时候就只可能取到极小值了。
w1=n∑xi2−(∑xi)2n∑xiyi−∑xi∑yi(7b)w0=n∑xi2−(∑xi)2∑xi2∑yi−∑xi∑xiyi(7b)到目前为止,已经求出了平方损失函数最小时对应的参数值,这也就是最佳拟合直线。
矩阵推导
讲在前面,矩阵推到较为复杂,之所以还要赘述,是因为当数据量较大时,矩阵方式求解速度会更快。
step1:函数式转化为矩阵形式;
一元线性函数的表达式为 y(x,w)=w0+w1x,表达成矩阵形式为:
⎣⎢⎢⎢⎢⎡1,x11,x2⋯1,x91,x10⎦⎥⎥⎥⎥⎤[w0w1]=⎣⎢⎢⎢⎢⎡y1y2⋯y9y10⎦⎥⎥⎥⎥⎤即:y(x,w)=XW平方损失函数为:f=i=1∑n(yi−(w0+w1xi))2=(y−XW)T(y−XW)计算乘法分配律得到:f=yTy−yT(XW)−(XW)Ty+(XW)T(XW)在该公式中 y 与 XW 皆为相同形式的 (m,1) 矩阵,由此两者相乘属于线性关系,所以等价转换如下:f=yTy−(XW)Ty−(XW)Ty+(XW)T(XW)=yTy−2(XW)Ty+(XW)T(XW)
step2:矩阵对系数W求偏导;
f=yTy−2(XW)Ty+(XW)T(XW)第一项为常数项可以直接省去,第二项为一次项根据求导公式:
∂x∂xT=I可得第二项求导结果为2XTy,第三项为二次项,根据求导公式:
∂x∂uTv=∂x∂uTv+∂x∂vTu
可以求得:
∂W∂((XW)T(XW))=∂W∂(WTXT)WX+∂W∂(WTXT)WX=2XTXW
step3:令偏导为0;
此步骤原因请参考代数部分解释,不再赘述。
∂W∂f=2XTXW−2XTy=0化简得:W=(XTX)−1XTy
至此,两种方法推导均已完成。