多元线性回归求解任意多边形的最优椭圆(Python实现)
算法
现在使用的数据,是夜间灯光数据边界查询后得到的某区域对象多边形的边界像元坐标点对。形如:
B=[
[1,2,3,4,5,6],
[3,2,4,5,4,3]
]
的二维数组。
2. 加载数组到内存
使用numpy模块提供的loadtxt的方法加载数组,代码从略。
3. 建立任意椭圆代数解析式
一般地,任意椭圆的方程可以表示为:
Ax2+Bxy+Cy2+Dx+Ey+F=0
其中
A,B,C,D,E,F为参数,对于任意点
P(xi,yi),相对于椭圆的位置都有三种情况:
1.在椭圆上,
Ax2i+Bxiyi+Cy2i+Dxi+Eyi+F=0
2.在椭圆内,
Ax2i+Bxiyi+Cy2i+Dxi+Eyi+F<0
3.在椭圆外,
Ax2i+Bxiyi+Cy2i+Dxi+Eyi+F>0
设
ρ2=Ax2+Bxy+Cy2+Dx+Ey+F(1)
4. 建立边界点与椭圆的关系
本文所求解的最优拟合椭圆需要满足以下几个条件:
1.满足椭圆定义,即B2−4AC≤0
2.∑ni=1(Ax2i+Bxiyi+Cy2i+Dxi+Eyi+F−ρ2)2达到最小
5. 多元线性回归求参数
令Q=∑ni=1(Ax2i+Bxiyi+Cy2i+Dxi+Eyi+F−ρ2)2
要使用多元线性回归的方法拟合椭圆的参数,就要对边界点与椭圆关系的方程进行变化,以适应要求。
首先回顾一下多元线性回归模型的建立过程:
假设某一因变量y受k个自变量x1,x2,...,xk的影响,其n组观测值为(ya,x1a,x2a,...xka),a=1,2,...,n。那么,多元线性回归模型的结构形式为:
ya=β0+β1x1a+β2x2a+...+βkxka+εa
式中:
β0,β1,...,βk为待定参数;
εa为随机变量。
如果
b0,b1,...,bk分别为
β0,β1,...,βk的拟合值,则回归方程为
y\^=b0+b1x1+b2x2+...+bkxk
式中:
b0为常数;
b0,b1,b2,...,bk称为偏回归系数。
偏回归系数
Bi(i=1,2,...,k)的意义是,当其它自变量
xj(j≠i)都固定时,自变量
xi每变化一个单位而使因变量
y平均改变的数值。
根据最小二乘法原理,
βii=0,1,2,...,k)的估计值
bi(i=0,1,2,...,k)应该使
Q=∑a=1n(ya−y\^a)2=∑a=1n[ya−(b0+b1x1a+b2x2a+,...,bkxka)]2→min
由求极值的必要条件得
⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪∂Q∂b0=−2∑a=1n(ya−y\^a)=0∂Q∂bj=−2∑a=1n(ya−y\^a)xja=0(j=1,2,...,k)
将方程组展开整理可得正规方程组,这里不再写出具体形式。
所以我们可以将
(1)式看做一个观测值的通式,
∀p=(xi,yi)边界点,都可以建立形如
(1)式的方程:
ρ2i=F+Ax2i+Bxiyi+Cy2i+Dxi+Eyi(i=1,2,...,n)
这里可以看做
ρ2受5个自变量影响,则对应于多元线性回归模型的结构形式,
ρ2x2ixiyiy2ixiyia=======yax1ax2ax3ax4ax5a(1,2,3,...,n)
所以引入以下向量和矩阵:
b=⎛⎝⎜⎜⎜⎜⎜⎜FABCDE⎞⎠⎟⎟⎟⎟⎟⎟,Y=⎛⎝⎜⎜⎜⎜⎜⎜⎜ρ21ρ22...ρ2n⎞⎠⎟⎟⎟⎟⎟⎟⎟X=⎛⎝⎜⎜⎜⎜⎜⎜111⋮1x11x12x13⋮x1nx21x22x23⋮x2nx31x32x33⋮x3nx41x42x43⋮x4nx51x52x53⋮x5n⎞⎠⎟⎟⎟⎟⎟⎟
A=XTX=⎛⎝⎜⎜⎜⎜⎜⎜1x11x21x31x41x511x12x22x32x42x521x13x23x33x43x53⋯⋯⋯⋯⋯⋯1x1nx2nx3nx4nx5n⎞⎠⎟⎟⎟⎟⎟⎟
⎛⎝⎜⎜⎜⎜⎜⎜111⋮1x11x12x13⋮x1nx21x22x23⋮x2nx31x32x33⋮x3nx41x42x43⋮x4nx51x52x53⋮x5n⎞⎠⎟⎟⎟⎟⎟⎟
B=XTY=⎛⎝⎜⎜⎜⎜⎜⎜1x11x21x31x41x511x12x22x32x42x521x13x23x33x43x53⋯⋯⋯⋯⋯⋯1x1nx2nx3nx4nx5n⎞⎠⎟⎟⎟⎟⎟⎟⎛⎝⎜⎜⎜⎜⎜⎜⎜ρ21ρ22...ρ2n⎞⎠⎟⎟⎟⎟⎟⎟⎟
前面说到正规方程组,正规方程组可以进一步写成矩阵形式:
Ab=B(2)
求解
(2)可得:
b=A−1B=(XTX)−1XTY(3)
因此解出
(3)式即可求得椭圆参数。
6. Python算法实现主要代码