좌표와 변환

Jane의 study note.·2022년 10월 10일
0

선형대수

목록 보기
7/9

이 절에서는 공간상에서 좌표를 정의하기 위해 필요한 개념을 살펴본다. 우선 벡터의 선형독립과 랭크의 개념을 알아보고 기저벡터와 좌표변환이 선형대수와 어떻게 연관이 있는지 공부한다. 좌표변환은 이미지 처리 작업뿐 아니라 다변수 확률변수를 분석하는데도 사용된다.

1. 선형종속과 선형독립

벡터 집합 x1,x2,,xNx_1, x_2, \ldots, x_N을 이루는 벡터의 선형조합이 영벡터가 되도록 하는 스칼라 계수 c1,c2,,cNc_1, c_2, \ldots, c_N이 존재하면 이 벡터들이 선형종속(linearly dependent)이라고 한다. 단 c1=c2==cN=0c_1 = c_2 = \cdots = c_N = 0 으로 계수가 모두 0인 경우는 제외한다.

c1x1+c2x2++cNxN=0c_1 x_1 + c_2 x_2 + \cdots + c_N x_N = 0

반대로 벡터들의 선형조합이 0이 되면서 모두 0은 아닌 계수들이 존재하지 않으면 그 벡터들은 선형독립(linearly independent)이라고 한다.
선형독립을 논리 기호로 나타내면 다음과 같다.

c1x1++cNxN=0        c1==cN=0c_1 x_1 + \cdots + c_N x_N = 0 \;\; \rightarrow \;\; c_1 = \cdots = c_N = 0

왼쪽에서 오른쪽 방향 화살표의 의미는 벡터들의 선형조합이 0이면 반드시 계수들이 모두 0이라는 뜻이다.

선형독립을 다음처럼 표현하기도 한다.

c1x1++cNxN=0        c1==cN=0c_1 x_1 + \cdots + c_N x_N = 0 \;\; \leftrightarrow \;\; c_1 = \cdots = c_N = 0

오른쪽에서 왼쪽 방향 화살표의 의미는 모든 계수가 0일 때 선형조합이 0이 된다는 뜻이다. 이는 꼭 선형독립이 아니더라도 당연하게 성립한다.

1. 선형독립과 선형 연립방정식

선형독립 관계를 행렬과 벡터의 곱으로 나타낼 수도 있다. 다음 식에서 cic_ixix_i에 대한 가중치 계수이고 cccic_i를 원소로 가지는 가중치 벡터이다. XX는 열벡터 x1,x2,,xNx_1, x_2, \ldots, x_N를 열로 가지는 행렬이다. 이제부터는 벡터의 집합으로 모두 이런 식으로 행렬로 표시하겠다.

c1x1++cNxN=[x1x2xN][c1c2cN]=Xcc_1 x_1 + \cdots + c_N x_N = \begin{bmatrix} x_1 & x_2 & \cdots & x_N \end{bmatrix} \begin{bmatrix} c_1 \\ c_2 \\ \vdots \\ c_N \end{bmatrix} = X c

따라서 어떤 벡터들이 선형독립인지 아닌지를 알아내는 문제는 선형 연립방정식을 푸는 문제와 같다.

Xc=0Xc=0

이 연립방정식의 해가 영벡터밖에 없으면 선형독립이다. 만약 영벡터가 아닌 해가 존재하면 선형종속이다. 해가 무한히 많은 경우에는 그 중에 영벡터가 아닌 해가 반드시 존재하므로 선형 종속이다.

벡터 x1,x2,,xNx_1, x_2, \ldots, x_N이 선형독립이라는 것을 논리기호로 나타내면 다음과 같다.

Xc=0        c=0Xc = 0 \;\; \rightarrow \;\; c=0

c=0c=0이면 Xc=0Xc = 0은 당연히 성립하므로 위 식 대신 다음처럼 쓰기도 한다.

Xc=0        c=0Xc = 0 \;\; \leftrightarrow \;\; c=0

2. 선형종속인 경우

벡터가 선형종속이 되는 대표적인 세 경우를 알아보자. 예측모형을 만들기 위한 특징행렬 XX의 열벡터들이 선형종속이거나 선형종속에 가까운 현상을 다중공선성(multicollinearity)이라고 부른다. 다중공선성이 발생하면 예측의 성능이 나빠지므로 되도록 이러한 경우가 발생하지 않도록 주의해야 한다.

경우 1: 벡터의 개수가 벡터의 차원보다 크면 선형종속이다.

벡터의 차원보다 벡터의 수가 많으면 그 벡터를 행으로 가지는 행렬 XX의 행의 개수보다 열의 개수가 많다. 따라서 이 행렬이 표현하는 연립방정식을 고려하면 미지수의 수가 방정식의 수보다 커서 해가 무한히 많다. 해가 무한히 많다는 것은 영벡터가 아닌 해 cc도 존재한다는 뜻이다. 따라서 그 벡터들은 선형종속이다.
반대로 행의 개수가 열의 개수와 같거나 크면 대부분 선형독립이다. 우리가 분석할 대부분의 데이터는 데이터(행)의 수가 특징(열)의 수보다 많기 때문에 여기에 해당한다.

경우 2: 값이 같은 벡터가 있으면 반드시 선형종속이다.

만약 ii번째 벡터 xjx_jjj번째 벡터 xjx_j가 같으면 cj=cic_j = -c_i로 놓고 다른 cc값은 모두 0으로 하면

0x1++cixi++cjxj++0xN=0x1++cixi++(ci)xj++0xN=0\begin{aligned} & 0 \cdot x_1 + \cdots + c_i \cdot x_i +\cdots + c_j \cdot x_j + \cdots + 0 \cdot x_N \\ &= 0 \cdot x_1 + \cdots + c_i \cdot x_i +\cdots + (-c_i) \cdot x_j + \cdots + 0 \cdot x_N \\ &= 0 \end{aligned}

따라서 다음처럼 중복된 데이터가 있으면 선형종속이다.

[151363464]\begin{bmatrix} 1 & 5 & 1 \\ 3 & 6 & 3 \\ 4 & 6 & 4 \end{bmatrix}

벡터 xjx_j가 벡터 xix_i의 실수배인 경우도 마찬가지이다.

예측 모형을 위한 특징행렬을 만들 때 실수로 위와 같은 행렬을 만드는 경우가 종종 있다. 우리가 실무에서 다루게 되는 데이터는 그 양이 크기 때문에 엑셀 등으로 한 눈에 볼 수 없는 경우가 많아서 위와 같은 실수를 하는 경우에도 빨리 발견하기 어렵다.

경우 3: 어떤 벡터가 다른 벡터의 선형조합이면 반드시 선형종속이다.

예를 들어 벡터 x1x_1과 다른 벡터 x2,x3x_2, x_3 사이에 다음 관계가 성립한다고 하자.

x1=2x23x3x_1 = 2 x_2 - 3 x_3

그러면 c1=1,c2=2c3=3c_1=-1, c_2=2 c_3=-3일 때

1x1+2x23x3=0-1\cdot x_1 + 2 x_2 - 3 x_3 = 0

이므로 선형종속이다.

이 경우도 데이터 분석에서 흔히 하는 실수이다. 예를 들어 국어, 영어, 수학 점수를 각각 별도의 데이터로 포함하면서 이 세 점수에 의존하는 총점수나 평균을 다시 데이터로 포함하면 선형종속이 된다.

2. 랭크

행렬의 열벡터 중 서로 독립인 열벡터의 최대 개수를 열랭크(column rank)라고 하고
행벡터 중 서로 독립인 행벡터의 최대 개수를 행랭크(row rank)라고 한다.
행랭크와 열랭크에 대해서는 다음 정리가 성립한다.

[정리] 행랭크와 열랭크는 항상 같다.

따라서 행 랭크나 열 랭크를 그냥 랭크(rank)라고 하기도 한다.
행렬 AA의 랭크는 기호로 rankA\text{rank}A와 같이 표시한다.

행랭크는 행의 개수보다 커질 수 없고 열랭크는 열의 개수보다 커질 수 없기 때문에 행의 개수가 NN이고 열의 갯수가 MM인 행렬의 랭크는 행의 개수 NN과 열의 개수 MM 중 작은 값보다 커질 수 없다.

rankAmin(M,N)\text{rank} A \leq \min(M, N)
ARN×MA \in \mathbf{R}^{N \times M}
넘파이 linalg 서브 패키지의 `matrix_rank()` 함수로 행렬의 랭크를 계산할 수 있다.

X1 = np.array([[1, 3], [2, 4]])
np.linalg.matrix_rank(X1)

1. 풀랭크

위에서 예로 든 행렬 X1X_1X2X_2처럼 랭크가 행의 개수와 열의 개수 중 작은 값과 같으면 풀랭크(full rank)라고 한다.

rankA=min(M,N)\text{rank}A = \min(M, N)

선형독립인 벡터들을 행 또는 열로 가지는 행렬을 만들면 정의에 의해 항상 풀랭크다.

2. 로우 랭크 행렬

NN차원 벡터 xx 하나를 이용하여 만들어지는 다음과 같은 행렬을 랭크-1 행렬(rank-1 matrix)이라고 한다.

xxTRN×Nxx^T \in \mathbf{R}^{N \times N}

이 행렬의 열벡터들은 xx라고 하는 하나의 벡터를 x1x_1배, x2x_2배, ... xnx_n배한 벡터이므로 독립적인 열벡터는 1개다. 따라서 랭크-1 행렬의 랭크는 1이다.

xxT=x[x1x2xn]=[x1xx2xxnx]\begin{aligned} xx^T &= x \begin{bmatrix} x_1 & x_2 & \cdots & x_n \end{bmatrix} \\ &= \begin{bmatrix} x_1x & x_2x & \cdots & x_nx \end{bmatrix} \end{aligned}

선형독립인 두 개의 NN차원 벡터 x1,x2x_1, x_2를 이용하여 만든 다음과 같은 행렬은 랭크-2 행렬(rank-2 matrix)이라고 한다.

[x1x2][x1Tx2T]=x1x1T+x2x2T\begin{bmatrix} x_1 & x_2 \end{bmatrix} \begin{bmatrix} x_1^T \\ x_2^T \end{bmatrix} = x_1x_1^T + x_2x_2^T

앞서와 비슷한 방법으로 랭크-2 행렬의 랭크는 2임을 보일 수 있다.

만약 MM개의 NN차원 벡터 x1,x2,,xMx_1, x_2, \cdots, x_M을 이용하면 랭크-M 행렬(rank-M matrix)이 된다.

[x1x2xM][x1Tx2TxMT]=x1x1T+x2x2T++xMxMT=i=1MxixiT\begin{bmatrix} x_1 & x_2 & \cdots & x_M \end{bmatrix} \begin{bmatrix} x_1^T \\ x_2^T \\ \vdots \\ x_M^T \end{bmatrix} = x_1x_1^T + x_2x_2^T + \cdots + x_Mx_M^T = \sum_{i=1}^M x_ix_i^T

이러한 행렬들을 가리켜 로우-랭크 행렬(low-rank matrix)이라고 한다. 로우-랭크 행렬은 나중에 특이분해(singular value decomposition)와 PCA(principal component analysis)에서 사용된다.

3. 벡터공간과 기저벡터

여러 벡터를 선형조합을 하면 다른 벡터를 만들 수 있다. 벡터 N개가 서로 선형독립이면 이 벡터들을 선형조합하여 만들어지는 모든 벡터의 집합을 벡터공간(vector space) VV라 하고 이 벡터공간의 차원을 NN이라고 한다. 그리고 그 벡터들을 벡터공간의 기저벡터(basis vector)라고 한다.

V={c1x1++cNxN    c1,,cNR}V = \{ c_1x_1 + \cdots + c_Nx_N \; \vert \; c_1, \ldots, c_N \in \mathbf{R} \}

벡터공간의 차원(dimension)이 벡터의 차원(길이)가 아니라 기저벡터의 개수로 정의된다는 점에 유의해야 한다.

NN차원 벡터 NNx1,x2,,xNx_1, x_2, \cdots, x_N이 선형독립인 경우에는 다음 정리가 성립한다.

[정리] NN개의 NN차원 벡터 x1,x2,,xNx_1, x_2, \cdots, x_N이 선형독립이면 이를 선형조합하여 모든 NN차원 벡터를 만들 수 있다.

다음과 같이 증명한다. 임의의 벡터 xx가 있다고 하자. 기저벡터 x1,x2,,xNx_1, x_2, \cdots, x_N와 이 벡터 xx를 열벡터로 사용하여 만든 행렬

X=[x1,x2,,xN,x]X = \left[ x_1, x_2, \cdots, x_N, x \right]

는 크기가 N×(N+1)N \times (N+1)이므로 랭크값은 NN보다 커질 수는 없다. 그런데 NN개의 선형독립인 열벡터가 있기 때문에 랭크값은 NN이고 풀랭크다. 따라서 어떠한 NN차원 벡터를 생각하더라도 기저벡터의 조합으로 표현할 수 있다.

1. 랭크와 역행렬

정방행렬의 랭크와 역행렬 사이에는 다음과 같은 정리가 성립한다.

[정리] 정방행렬이 풀랭크면 역행렬이 존재한다. 역도 성립한다. 즉, 정방행렬의 역행렬이 존재하면 풀랭크다.

따라서 다음 두 문장은 같은 뜻이다.

정방행렬이 풀랭크다 \leftrightarrow 역행렬이 존재한다

다음과 같이 증명한다.

(1)
우선 왼쪽에서 오른쪽 방향 즉, 정방행렬이 풀랭크이면 역행렬이 존재한다는 것을 증명하자. 정방행렬이 풀랭크이면 선형독립이고 기저벡터가 되므로 어떠한 벡터에 대해서도 그 벡터를 만들 수 있는 선형조합을 생각할 수 있다. 예를 들어 다음과 같은 벡터 e1,,eNe_1, \cdots, e_N을 만들기 위한 조합 c1,,cNc_1, \cdots, c_N도 있을 수 있다.

Xc1=e1=[100]Xc_1 = e_1 = \begin{bmatrix} 1 \\ 0 \\ \vdots \\ 0 \end{bmatrix}
Xc2=e2=[010]Xc_2 = e_2 = \begin{bmatrix} 0 \\ 1 \\ \vdots \\ 0 \end{bmatrix}

이 식들을 모으면 다음과 같아진다.

X[c1c2cN]=XC=IX \begin{bmatrix} c_1 & c_2 & \cdots & c_N \end{bmatrix} = XC = I

정방행렬의 경우 XC=IXC=I이면 CX=ICX=I가 성립한다.(연습문제 2.4.4) 따라서

XC=CX=IXC = CX = I

인 행렬 CC가 존재한다. 이 행렬이 역행렬이다.

(2)
다음으로 오른쪽에서 왼쪽 방향 즉, 역행렬이 존재하면 풀랭크라는 것을 증명하자.
역행렬이 존재하는 경우에 다음 식이 성립한다는 것을 증명하면 된다.

Xc=0        c=0Xc = 0 \;\; \leftrightarrow \;\; c=0

(i) 우선 역행렬이 존재하든 말든 c=0c = 0이면 Xc=0Xc=0는 당연하다. 따라서 오른쪽에서 왼쪽 방향은 증명된다.

(ii) 다음으로 역행렬이 존재할 때 Xc=0Xc=0이면

X1Xc=c=0X^{-1}Xc = c = 0

이므로 왼쪽에서 오른쪽 방향도 증명된다. 따라서 역행렬이 존재하면 풀랭크다.

4. 투영

벡터공간 투영

MM개의 NN차원 기저벡터 v1,v2,,vMv_1, v_2, \cdots, v_M 가 존재한다고 하자. MMNN보다 작다.
이 때 모든 NN차원 벡터 xx에 대해 기저벡터 v1,v2,,vMv_1, v_2, \cdots, v_M를 선형조합하여 만든 벡터 xvx^{\Vert v}와 원래 벡터 xx의 차 xxvx - x^{\Vert v}가 모든 기저벡터에 직교하면 그 벡터 xvx^{\Vert v}v1,v2,,vMv_1, v_2, \cdots, v_M 벡터공간에 대한 투영벡터라 하고 차이 벡터 xxv=xvx - x^{\Vert v} = x^{\perp v}벡터공간에 대한 직교벡터라 한다.

(xxV){v1,v2,,vM}(x - x^{\Vert V}) \perp \{ v_1, v_2, \cdots, v_M \}

다음 그림은 N=3,M=2N=3,M=2 즉 3차원 벡터를 2차원 벡터공간에 투영하는 예를 보인 것이다.

정규직교인 기저벡터로 이루어진 벡터공간

만약 기저벡터 v1,v2,,vMv_1, v_2, \cdots, v_M가 정규직교(orthonormal)이면 투영벡터 xvx^{\Vert v}는 각 기저벡터에 대한 내적값으로 표현된다.

xV=(xTv1)v1+(xTv2)v2++(xTvM)vMx^{\Vert V} = (x^Tv_1)v_1 + (x^Tv_2)v_2 + \cdots + (x^Tv_M)v_M

그리고 투영벡터의 길이의 제곱은 각 기저벡터와의 내적의 제곱합이다.

xV2=i=1M(xTvi)2\Vert x^{\Vert V} \Vert^2 = \sum_{i=1}^M (x^Tv_i)^2

벡터 xx에서 이 벡터 xVx^{\Vert V}를 뺀 벡터 xxVx - x^{\Vert V}, 즉 직교벡터 xVx^{\perp V}가 기저벡터 v1,v2,,vMv_1, v_2, \cdots, v_M에 모두 직교한다는 것은 다음처럼 증명할 수 있다.

viT(xxv)=viTxviT((xTv1)v1+(xTv2)v2++(xTvM)vM)=viTx((xTv1)viTv1+(xTv2)viTv2++(xTvM)viTvM)=viTxxTvi=0\begin{aligned} v_i^T(x - x^{\Vert v}) &= v_i^Tx - v_i^T \left( (x^Tv_1)v_1 + (x^Tv_2)v_2 + \cdots + (x^Tv_M)v_M \right) \\ &= v_i^Tx - \left( (x^Tv_1)v_i^Tv_1 + (x^Tv_2)v_i^Tv_2 + \cdots + (x^Tv_M)v_i^Tv_M \right) \\ &= v_i^Tx - x^Tv_i \\ &= 0 \end{aligned}

따라서 직교벡터 xVx^{\perp V}는 기저벡터 v1,v2,,vMv_1, v_2, \cdots, v_M으로 이루어진 벡터공간의 모든 벡터에 대해 직교한다.

이 사실로부터 벡터 xx의 투영벡터 xVx^{\Vert V}은 기저벡터 v1,v2,,vMv_1, v_2, \cdots, v_M으로 이루어진 벡터공간의 모든 벡터 중에서 가장 벡터 xx와 가까운 벡터라는 것도 알 수 있다.

기저벡터 v1,v2,,vMv_1, v_2, \cdots, v_M으로 이루어진 벡터공간의 어떤 벡터를 yy라고 하자. 그러면 xVx^{\Vert V}yy의 차이 벡터 xvyx^{\Vert v} - yv1,v2,,vMv_1, v_2, \cdots, v_M으로 이루어진 벡터공간에 존재하므로 직교벡터 xVx^{\perp V}와 직교한다.

xy2=xxV+(xVy)2=xV+(xVy)2=xV2+(xVy)2xV2\begin{aligned} \Vert x - y \Vert^2 &= \Vert x - x^{\Vert V} + (x^{\Vert V} - y) \Vert^2 \\ &= \Vert x^{\perp V} + (x^{\Vert V} - y) \Vert^2 \\ &= \Vert x^{\perp V} \Vert^2 + \Vert (x^{\Vert V} - y) \Vert^2 \\ &\geq \Vert x^{\perp V} \Vert^2 \end{aligned}

5. 표준기저벡터

기저벡터 중에서도 원소 중 하나만 값이 1이고 다른 값은 0으로 이루어진 다음과 같은 기저벡터를 표준기저벡터(standard basis vector)라고 한다.

e1=[100],    e2=[010],    ,    eN=[001]e_1 = \begin{bmatrix} 1 \\ 0 \\ \vdots \\ 0 \end{bmatrix}, \;\; e_2 = \begin{bmatrix} 0 \\ 1 \\ \vdots \\ 0 \end{bmatrix}, \;\; \cdots, \;\; e_N = \begin{bmatrix} 0 \\ 0 \\ \vdots \\ 1 \end{bmatrix}

표준기저벡터를 열로 가지는 행렬은 항등행렬이 된다.

[e1e2eN]=IN\begin{bmatrix} e_1 & e_2 & \cdots & e_N \end{bmatrix} = I_N

6. 좌표

어떤 벡터의 좌표(coordinate)는 기저벡터를 선형조합하여 그 벡터를 나타내기 위한 계수벡터를 말한다.

예를 들어 다음처럼 기저벡터 {e1,e2}\{e_1,e_2\}를 선형조합하여 벡터 xx를 나타낼 수 있다고 가정하자.

x=xe1e1+xe2e2x = x_{e_1} e_1 + x_{e_2} e_2

이 때 벡터 xex_e

xe=[xe1xe2]x_e = \begin{bmatrix} x_{e_1} \\ x_{e_2} \end{bmatrix}

를 벡터 xx의 기저벡터 {e1,e2}\{e_1,e_2\}에 대한 좌표벡터 혹은 간단히 좌표(coordinate)라고 한다. 벡터와 기저벡터 그리고 좌표의 관계는 다음과 같다.

x=[e1e2][xe1xe2]=[e1e2]  xex = [ e_1 e_2 ] \begin{bmatrix} x_{e_1} \\ x_{e_2} \end{bmatrix} = [ e_1 e_2 ] \; x_e

표준기저벡터를 모아놓은 행렬이 항등행렬이기 때문에 표준기저벡터에 대한 벡터의 좌표 xex_e는 원래 벡터 xx와 같다. 하지만 같은 벡터라도 다른 기저벡터를 사용하면 좌표가 달라진다. 따라서 하나의 벡터도 기저벡터에 따라 여러 좌표를 가질 수 있다.

※ 출처

김도형의 데이터 사이언스스쿨 중 3.2 좌표와 변환

0개의 댓글