本文已参与「新人创作礼」活动,一起开启掘金创作之路。
网上几乎都是用矩阵运算来求解正交最小二乘,未找到直接推导的过程,于是自己尝试推导一下。
点到直线距离误差:d=a2+b2∣ax+by+c∣
误差函数:f(a,b,c)=∑i=1i=ndi2
求误差函数极值点,即一阶偏导等于0,对于 di2:
di2=a2+b2(ax+by+c)2
di2=a2+b2a2x2+2abxy+2acx+2bcy+b2y2+c2
δc∑di2=a2+b21(2a∑x+2b∑y+2nc)
2a∑x+2b∑y+2nc=0
c=−na∑x+b∑y
δadi2=(a2+b2)2−2a(ax+by+c)2+(a2+b2)2(ax+by+c)x=0
−2a(ax+by+c)2+2(a2+b2)(ax+by+c)x=0
−2a(a2x2+2abxy+2acx+2bcy+b2y2+c2)+2(a3x+a2by+a2c+ab2x+b3y+b2c)x=0
−a3x2−2a2bxy−2a2cx−2abcy−ab2y2−ac2+a3x2+a2bxy+a2cx+ab2x2+b3xy+b2xc=0
ab2x2+(−a2b+b3)xy+(−2a2c+a2c+b2c)x−2abcy−ab2y2−ac2=0
直接求导太过于复杂,化简直线方程,ax+by+c=0
- 若斜率不存在,等价于x=d 即 x−d=0,则 b=0,a=1,c=−d
di2=(x−d)2
δd∑di2=−2(∑x−nd)=0
n∑x=d
此时的直线方程:x−n∑x=0
- 若斜率存在,等价于 y=kx+d 即 −kx+y−d=0,则 a=−k,b=1,c=−d
di2=k2+1(−kx+y−d)2
δkdi2=(k2+1)2−2k(−kx+y−d)2+(k2+1)−2(−kx+y−d)x
δkdi2=(k2+1)2−2(k(−kx+y−d)2+(k2+1)(−kx+y−d)x)
δkdi2=(k2+1)2−2((k3x2+y2k+d2k−2k2xy+2k2dx−2dyk)+(k2+1)(−kx+y−d)x)
=(k2+1)2−2(k3x2+y2k+d2k−2k2xy+2k2dx−2dyk−kx2+xy−dx−k3x2+k2xy−k2dx)
=(k2+1)2−2(y2k+d2k−k2xy+k2dx−2dyk−kx2+xy−dx)
=(k2+1)2−2((dx−xy)k2+(y2+d2−2dy−x2)k+xy−dx)
δk∑di2=(k2+1)2−2((d∑x−∑xy)k2+(∑y2+nd2−2d∑y−∑x2)k+∑xy−d∑x)
δd∑di2=k2+1−2(−k∑x+∑y−nd)=0
n−k∑x+∑y=d
(k2+1)2−2((d∑x−∑xy)k2+(∑y2+nd2−2d∑y−∑x2)k+∑xy−d∑x)=0
((n−k∑x+∑y)∑x−∑xy)k2+(∑y2+n(n−k∑x+∑y)2−2(n−k∑x+∑y)∑y−∑x2)k+∑xy−(n−k∑x+∑y)∑x=0
(∑y∑x−n∑xy)k2+(n∑y2−∑y∑y−n∑x2+∑x∑x)k+n∑xy−∑x∑y=0
令:
∑y∑x−n∑xy=M
n∑y2−∑y∑y−n∑x2+∑x∑x=N
n∑xy−∑x∑y=Q
则原式等于:
Mk2+Nk+Q=0
由求根公式得:
k=2M−N+N2−4MQ
此时 M!=0,否则斜率不存在,为第一种情况。
综上所示:
⎩⎨⎧−y+2M−N+N2−4MQx+n−k∑x+∑y,M != 0x−n∑x=0,M=0
撰写不易,转载请注明出处!有错误欢迎指正!