[关闭]
@betasy 2015-03-19T04:47:05.000000Z 字数 4203 阅读 6206

多元线性回归求解任意多边形的最优椭圆(Python实现)

算法


1. INPUT 多边形边界序列数组

现在使用的数据,是夜间灯光数据边界查询后得到的某区域对象多边形的边界像元坐标点对。形如:
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.满足椭圆定义,即B24AC0
2.ni=1(Ax2i+Bxiyi+Cy2i+Dxi+Eyi+Fρ2)2达到最小

5. 多元线性回归求参数

Q=ni=1(Ax2i+Bxiyi+Cy2i+Dxi+Eyi+Fρ2)2
要使用多元线性回归的方法拟合椭圆的参数,就要对边界点与椭圆关系的方程进行变化,以适应要求。
首先回顾一下多元线性回归模型的建立过程:
假设某一因变量yk个自变量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(ji)都固定时,自变量xi每变化一个单位而使因变量y平均改变的数值。
根据最小二乘法原理,βii=0,1,2,...,k)的估计值bi(i=0,1,2,...,k)应该使
Q=a=1n(yay\^a)2=a=1n[ya(b0+b1x1a+b2x2a+,...,bkxka)]2min

由求极值的必要条件得
Qb0=2a=1n(yay\^a)=0Qbj=2a=1n(yay\^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...ρ2nX=1111x11x12x13x1nx21x22x23x2nx31x32x33x3nx41x42x43x4nx51x52x53x5n

A=XTX=1x11x21x31x41x511x12x22x32x42x521x13x23x33x43x531x1nx2nx3nx4nx5n

1111x11x12x13x1nx21x22x23x2nx31x32x33x3nx41x42x43x4nx51x52x53x5n


B=XTY=1x11x21x31x41x511x12x22x32x42x521x13x23x33x43x531x1nx2nx3nx4nx5nρ21ρ22...ρ2n

前面说到正规方程组,正规方程组可以进一步写成矩阵形式:
Ab=B(2)

求解(2)可得:
b=A1B=(XTX)1XTY(3)

因此解出(3)式即可求得椭圆参数。

6. Python算法实现主要代码

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注