주어진 데이터를 잘 피팅하는 직선을 찾기 위해서는 데이터를 이루는 각 점의 yy 값과 같은 위치에서 구하려는 직선과의 차이 (residual)의 제곱을 최소화시키는 조건을 사용한다. 그러나 직선의 기울기가 매우 커지는 경우에는 데이터에 들어있는 outlier에 대해서는 그 차이가 매우 커지는 경우가 발생할 수도 있어 올바른 피팅을 방해할 수 있다. 이를 수정하는 간단한 방법 중 하나는 yy값의 차이를 이용하지 않고 데이터와 직선 간의 최단거리를 이용하는 것이다.
수평에서 기울어진 각도가 θθ이고 원점에서 거리가 ss인 직선의 방정식은
xsinθ−ycosθ+s=0xsinθ−ycosθ+s=0
이고, 한 점 (xi,yi)(xi,yi)에서 이 직선까지 거리는
di=|sinθyi−cosθxi+s|di=|sinθyi−cosθxi+s|
이다. 따라서 주어진 데이터에서 떨어진 거리 제곱의 합이 최소인 직선을 구하기 위해서는 다음을 최소화시키는 θ,sθ,s을 구해야 한다. L=∑i(sinθxi−cosθyi+s)2L=∑i(sinθxi−cosθyi+s)2(θ,s)=argmin(L)(θ,s)=argmin(L)
이 결과는 데이터 분포에 PCA를 적용해서 얻은 결과와 동일하다. PCA에서는 공분산 행렬의 고유값이 큰 쪽에 해당하는 고유벡터가 직선의 방향을 결정했다. https://kipl.tistory.com/211. 또한 통계에서는 Deming regression이라고 불린다.
그리고 얼마나 잘 피팅되었난가에 척도가 필요한데 여기서는 주어진 데이터의 대수적 거리 F(x,y)F(x,y)을 이용하자. 주어진 점이 타원 위의 점이면 이 값은 정확히 0이 된다. 물론 주어진 점에서 타원까지의 거리를 사용할 수도 있으나 이는 훨씬 복잡한 문제가 된다. 따라서 해결해야 하는 문제는
을 최소화시키는 계수 벡터 u를 찾는 것이다. 여기서 제한조건으로 4ac−b2=1=uTCu로 설정했다.
uT에 대해서 미분을 하면
∂L∂uT=Su−λCu=0
즉, 주어진 제한조건 4ac−b2=1하에서 대수적 거리를 최소화시키는 타원방정식의 계수 u를 구하는 문제는 scattering matrix S=DTD에 대한 일반화된 고유값 문제로 환원이 된다.
Su=λCuuTCu=1
이 문제의 풀이는 직전의 포스팅에서 다른 바 있는데 S의 제곱근 행렬 Q=S1/2를 이용하면 된다. 주어진 고유값 λ와 고유벡터 u가 구해지면 대수적 거리는 uTSu=λ
이므로 이를 최소화시키기 위해서는 양의 값을 갖는 고유값 중에 최소에 해당하는 고유벡터를 고르면 된다. 그런데 고유값 λ의 부호별 개수는 C의 고유값 부호별 개수와 동일함을 보일 수 있는데 (Sylverster's law of inertia), C의 고유값이 {−2,−1,2,0,0,0}이므로 λ>0인 고유값은 1개 뿐임을 알 수 있다. 따라서 Su=λCu를 풀어서 얻은 유일한 양의 고유값에 해당하는 고유벡터가 원하는 답이 된다.
S가 positive definite 행렬이고, C는 대칭행렬일 때 아래의 일반화된 eigenvalue 문제를 푸는 방법을 알아보자. Su=λCu
타원을 피팅하는 문제에서 이런 형식의 고유값 문제에 부딛히게 된다. 이 경우 S는 scattering matrix이고, C는 타원피팅에 걸리는 제한조건때문에 나온다. S가 positive definite이므로 S의 eigenvalues {σi>0}는 모두 0보다 크고, eigenvector를 이용하면
S=RΛRT,Λ=diag(σ1,...,σn)
처럼 분해할 수 있다. R은 S의 eigenvector를 열로 가지는 행렬로 orthogonal 행렬이다: R−1=RT.
이제 S의 제곱근 행렬을 Q,Q2=S라면
Q=RΛ1/2RT,Λ1/2=diag(√σ1,...,√σn)
임을 쉽게 확인할 수 있다. Q을 이용하면 구하려는 고유값 문제는
QQu=λCu→Qu=λQ−1CQ−1Qu→v=λQ−1CQ−1v
이므로 Q−1CQ−1의 고유값 문제 (1/λ,Qu)로 단순화됨을 알 수 있다. Q의 역행렬이 Q−1=RΛ−1/2RT임을 쉽게 체크할 수 있으므로 직접적으로 역행렬을 계산할 필요가 없어진다.