이 절에서는 공간상에서 좌표를 정의하기 위해 필요한 개념을 살펴본다. 우선 벡터의 선형독립과 랭크의 개념을 알아보고 기저벡터와 좌표변환이 선형대수와 어떻게 연관이 있는지 공부한다. 좌표변환은 이미지 처리 작업뿐 아니라 다변수 확률변수를 분석하는데도 사용된다.
선형종속과 선형독립
벡터 집합 x1,x2,…,xN을 이루는 벡터의 선형조합이 영벡터가 되도록 하는 스칼라 계수 c1,c2,…,cN이 존재하면 이 벡터들이 선형종속(linearly dependent) 이라고 한다. 단 c1=c2=⋯=cN=0 으로 계수가 모두 0인 경우는 제외한다.
c1x1+c2x2+⋯+cNxN=0(3.2.1)
반대로 벡터들의 선형조합이 0이 되면서 모두 0은 아닌 계수들이 존재하지 않으면 그 벡터들은 선형독립(linearly independent) 이라고 한다.
선형독립을 논리 기호로 나타내면 다음과 같다.
c1x1+⋯+cNxN=0→c1=⋯=cN=0(3.2.2)
왼쪽에서 오른쪽 방향 화살표의 의미는 벡터들의 선형조합이 0이면 반드시 계수들이 모두 0이라는 뜻이다.
선형독립을 다음처럼 표현하기도 한다.
c1x1+⋯+cNxN=0↔c1=⋯=cN=0(3.2.3)
오른쪽에서 왼쪽 방향 화살표의 의미는 모든 계수가 0일 때 선형조합이 0이 된다는 뜻이다. 이는 꼭 선형독립이 아니더라도 당연하게 성립한다.
예제
다음 벡터 x1,x2는 선형독립이다.
x1=[12],x2=[33](3.2.4)
벡터 x1은 두 원소의 크기가 다른데, 벡터 x2는 두 원소의 크기가 같기 때문에 어떤 계수를 사용해도 c1x1+c2x2=0을 만들 수 없다.
다음 벡터들이 선형독립인지 선형종속인지 판별하라. 선형종속이면 영벡터를 만드는 계수값을 찾아라.
(1)
x1=[10],x2=[01](3.2.7)
✒️
선형독립
(2)
x1=[10],x2=[−11](3.2.8)
✒️
선형독립
(3)
x1=[12],x2=[24](3.2.9)
✒️
선형종속
-2, 1
연습 문제 3.2.2
서로 직교하는 영벡터가 아닌 N개의 벡터 v1,v2,⋯,vN은 선형독립임을 증명하라.
viTvj=0(i=j)(3.2.10)
✒️
선형종속이라고 가정하면 c1v1 + c2v2 + ,,,+cnvn = 0 을 만족시키는 0이 아닌 c가 최소 2개 있어야한다. ci cj 가 0이 아니라고 할 때 civi를 우변으로 넘기고 양변에 vi와의 내적을 취하면
각 벡터가 서로 수직이므로 좌변은 0이 되고, 우변은 -civi놈^으로 0이 될 수 없는 값이다.
즉 가정으로 부터 모순을 얻었으므로 가정은 거짓이고 따라서 선형독립이다.
연습 문제 3.2.3
(1) 선형독립인 2개의 2차원 벡터의 예를 들어라.
✒️
(1,0), (0,1)
(2) 선형독립인 2개의 3차원 벡터의 예를 들어라.
✒️
(1,0,0), (0,1,0)
(3) 선형독립인 3개의 2차원 벡터의 예를 들어라. 이러한 벡터들이 존재하는가?
✒️
존재하지 않는다. (1)의 2개의 벡터의 선형결합으로 2차원 벡터 전체집합을 생성할 수 있다.
(4) 선형독립인 3개의 3차원 벡터의 예를 들어라. 이러한 벡터들이 존재하는가?
✒️
존재한다. (1,0,0), (0,1,0), (0,0,1)
(5) 선형독립인 4개의 3차원 벡터의 예를 들어라. 이러한 벡터들이 존재하는가?
✒️
존재하지 않는다. (4)의 3개의 벡터의 선형결합으로 3차원 벡터 전체집합을 생성할 수 있다.
선형독립과 선형 연립방정식
선형독립 관계를 행렬과 벡터의 곱으로 나타낼 수도 있다. 다음 식에서 ci는 xi에 대한 가중치 계수이고 c는 ci를 원소로 가지는 가중치 벡터이다. X는 열벡터 x1,x2,…,xN를 열로 가지는 행렬이다. 이제부터는 벡터의 집합으로 모두 이런 식으로 행렬로 표시하겠다.
따라서 어떤 벡터들이 선형독립인지 아닌지를 알아내는 문제는 선형 연립방정식을 푸는 문제와 같다.
Xc=0(3.2.12)
이 연립방정식의 해가 영벡터밖에 없으면 선형독립이다. 만약 영벡터가 아닌 해가 존재하면 선형종속이다. 해가 무한히 많은 경우에는 그 중에 영벡터가 아닌 해가 반드시 존재하므로 선형 종속이다.
벡터 x1,x2,…,xN이 선형독립이라는 것을 논리기호로 나타내면 다음과 같다.
Xc=0→c=0(3.2.13)
c=0이면 Xc=0은 당연히 성립하므로 위 식 대신 다음처럼 쓰기도 한다.
Xc=0↔c=0(3.2.14)
선형종속인 경우
벡터가 선형종속이 되는 대표적인 세 경우를 알아보자. 예측모형을 만들기 위한 특징행렬 X의 열벡터들이 선형종속이거나 선형종속에 가까운 현상을 다중공선성(multicollinearity) 이라고 부른다. 다중공선성이 발생하면 예측의 성능이 나빠지므로 되도록 이러한 경우가 발생하지 않도록 주의해야 한다.
경우 1: 벡터의 개수가 벡터의 차원보다 크면 선형종속이다.
벡터의 차원보다 벡터의 수가 많으면 그 벡터를 행으로 가지는 행렬 X의 행의 개수보다 열의 개수가 많다. 따라서 이 행렬이 표현하는 연립방정식을 고려하면 미지수의 수가 방정식의 수보다 커서 해가 무한히 많다. 해가 무한히 많다는 것은 영벡터가 아닌 해 c도 존재한다는 뜻이다. 따라서 그 벡터들은 선형종속이다.
반대로 행의 개수가 열의 개수와 같거나 크면 대부분 선형독립이다. 우리가 분석할 대부분의 데이터는 데이터(행)의 수가 특징(열)의 수보다 많기 때문에 여기에 해당한다.
경우 2: 값이 같은 벡터가 있으면 반드시 선형종속이다.
만약 i번째 벡터 xj와 j번째 벡터 xj가 같으면 cj=−ci로 놓고 다른 c값은 모두 0으로 하면
위에서 예로 든 행렬 X1나 X2처럼 랭크가 행의 개수와 열의 개수 중 작은 값과 같으면 풀랭크(full rank) 라고 한다.
rankA=min(M,N)(3.2.23)
선형독립인 벡터들을 행 또는 열로 가지는 행렬을 만들면 정의에 의해 항상 풀랭크다.
연습 문제 3.2.4
다음 행렬의 랭크를 구하고 풀랭크인지 아닌지 말하라.
(1)
A=⎣⎢⎢⎢⎡12315611468145⎦⎥⎥⎥⎤(3.2.24)
(2)
B=⎣⎢⎢⎢⎡12315611468148⎦⎥⎥⎥⎤(3.2.25)
import numpy as np
A = np.array([1,2,3,1,5,6,11,4,6,8,14,5]).reshape(3,4).T
B = np.array([1,2,3,1,5,6,11,4,6,8,14,8]).reshape(3,4).T
np.linalg.matrix_rank(A), np.linalg.matrix_rank(B)# (2,3)
✒️
행이 4개, 열이 3개이므로 열이 선형독립이면 풀랭크다.
(1)의 경우 첫번째 컬럼과 두번째 컬럼의 합이 세번째 컬럼이다. 랭크는 2이며 풀랭크가 아니다.
(2)의 경우 세 컬럼이 선형독립이다. 풀랭크다.
로우-랭크 행렬
N차원 벡터 x 하나를 이용하여 만들어지는 다음과 같은 행렬을 랭크-1 행렬(rank-1 matrix) 이라고 한다.
xxT∈RN×N(3.2.26)
이 행렬의 열벡터들은 x라고 하는 하나의 벡터를 x1배, x2배, ... xn배한 벡터이므로 독립적인 열벡터는 1개다. 따라서 랭크-1 행렬의 랭크는 1이다.
이러한 행렬들을 가리켜 로우-랭크 행렬(low-rank matrix) 이라고 한다. 로우-랭크 행렬은 나중에 특이분해(singular value decomposition)와 PCA(principal component analysis)에서 사용된다.
연습 문제 3.2.5
(1) 다음 벡터로 랭크-1 행렬을 만들고 NumPy로 랭크를 계산하여 실제로 1이 나오는지 확인하라.
x1=[11](3.2.30)
(2) 다음 두 개의 벡터로 랭크-2 행렬을 만들고 NumPy로 랭크를 계산하여 실제로 2가 나오는지 확인하라.
x1=[11],x2=[1−1](3.2.31)
import numpy as np
A = np.array([1,1,1,1,1,1,1,1]).reshape(2,4)
B = np.array([1,1,1,-1,2,0,0,2]).reshape(2,4)
np.linalg.matrix_rank(A), np.linalg.matrix_rank(B)# (1, 2)
벡터공간과 기저벡터
여러 벡터를 선형조합을 하면 다른 벡터를 만들 수 있다. 벡터 N개가 서로 선형독립이면 이 벡터들을 선형조합하여 만들어지는 모든 벡터의 집합을 벡터공간(vector space)V라 하고 이 벡터공간의 차원을 N이라고 한다. 그리고 그 벡터들을 벡터공간의 기저벡터(basis vector) 라고 한다.
V={c1x1+⋯+cNxN∣c1,…,cN∈R}(3.2.32)
벡터공간의 차원(dimension)이 벡터의 차원(길이)가 아니라 기저벡터의 개수로 정의된다는 점에 유의해야 한다.
N차원 벡터 N개 x1,x2,⋯,xN이 선형독립인 경우에는 다음 정리가 성립한다.
[정리] N개의 N차원 벡터 x1,x2,⋯,xN이 선형독립이면 이를 선형조합하여 모든 N차원 벡터를 만들 수 있다.
다음과 같이 증명한다. 임의의 벡터 x가 있다고 하자. 기저벡터 x1,x2,⋯,xN와 이 벡터 x를 열벡터로 사용하여 만든 행렬
X=[x1,x2,⋯,xN,x](3.2.33)
는 크기가 N×(N+1)이므로 랭크값은 N보다 커질 수는 없다. 그런데 N개의 선형독립인 열벡터가 있기 때문에 랭크값은 N이고 풀랭크다. 따라서 어떠한 N차원 벡터를 생각하더라도 기저벡터의 조합으로 표현할 수 있다.
예제
다음 벡터의 집합은 선형독립이므로 2차원 벡터공간의 기저벡터이다.
x1=[12],x2=[21](3.2.34)
따라서 이 기저벡터 {x1,x2}를 선형조합하면 어떠한 2차원 벡터도 만들 수 있다.
예제
다음 벡터의 집합은 선형독립이 아니므로 벡터공간의 기저벡터가 되지 않는다.
x1=[12],x2=[21],x3=[57](3.2.35)
예제
다음 벡터의 집합은 선형독립이므로 벡터공간의 기저벡터이다.
x1=⎣⎢⎡120⎦⎥⎤,x2=⎣⎢⎡210⎦⎥⎤(3.2.36)
하지만 이 벡터공간은 3차원 벡터공간이 아니라 2차원 벡터공간이라고 한다. 예를 들어 이 벡터 x1,x2를 어떻게 선형조합해도 다음 벡터는 만들 수 없다.
c1x1+c2x2=⎣⎢⎡001⎦⎥⎤(3.2.37)
벡터공간의 차원을 기저벡터의 차원과 다르게 정의하는 이유는 선형독립인 기저벡터를 선형조합했을 때 이렇게 만들어낼 수 없는 벡터들이 존재하기 때문이다.
연습 문제 3.2.6
(1) 다음 기저벡터 x1,x2를 선형조합하여 벡터 y1,y2를 만들어라.
x1=[12],x2=[21](3.2.38)
y1=[33],y2=[−1−1](3.2.39)
y1 = x1 + x2
y2 = -1/3( x1 + x2)
(2) 2차원 벡터공간을 만드는 2차원 기저벡터의 또다른 예를 들어라.
(1,0), (0,1)
(3) 2차원 벡터공간을 만드는 3차원 기저벡터의 또다른 예를 들어라.
(1,0,0), (0,1,0)
(4) 3차원 벡터공간을 만드는 3차원 기저벡터의 예를 들어라.
(1,0,0), (0,1,0), (0,0,1)
연습 문제 3.2.7
N개의 N차원 벡터 x1,x2,⋯,xN이 기저벡터이다. 이 벡터 x1,x2,⋯,xN 각각에 대해 모두 수직인 영벡터가 아닌 벡터 x가 존재하지 않는다는 것을 증명하라.
✒️
존재한다고 가정하면 기저벡터가 N +1개인 N차원 벡터공간이 되어 모순이므로 존재하지 않는다.
랭크와 역행렬
정방행렬의 랭크와 역행렬 사이에는 다음과 같은 정리가 성립한다.
[정리] 정방행렬이 풀랭크면 역행렬이 존재한다. 역도 성립한다. 즉, 정방행렬의 역행렬이 존재하면 풀랭크다.
따라서 다음 두 문장은 같은 뜻이다.
정방행렬이 풀랭크다↔역행렬이 존재한다
다음과 같이 증명한다.
(1)
우선 왼쪽에서 오른쪽 방향 즉, 정방행렬이 풀랭크이면 역행렬이 존재한다는 것을 증명하자. 정방행렬이 풀랭크이면 선형독립이고 기저벡터가 되므로 어떠한 벡터에 대해서도 그 벡터를 만들 수 있는 선형조합을 생각할 수 있다. 예를 들어 다음과 같은 벡터 e1,⋯,eN을 만들기 위한 조합 c1,⋯,cN도 있을 수 있다.
Xc1=e1=⎣⎢⎢⎢⎢⎡10⋮0⎦⎥⎥⎥⎥⎤(3.2.40)
Xc2=e2=⎣⎢⎢⎢⎢⎡01⋮0⎦⎥⎥⎥⎥⎤(3.2.41)
이 식들을 모으면 다음과 같아진다.
X[c1c2⋯cN]=XC=I(3.2.42)
정방행렬의 경우 XC=I이면 CX=I가 성립한다.(연습문제 2.4.4) 따라서
XC=CX=I(3.2.43)
인 행렬 C가 존재한다. 이 행렬이 역행렬이다.
(2) ❗❗❗ 이해 못함 ❗❗❗
다음으로 오른쪽에서 왼쪽 방향 즉, 역행렬이 존재하면 풀랭크라는 것을 증명하자.
역행렬이 존재하는 경우에 다음 식이 성립한다는 것을 증명하면 된다.
Xc=0↔c=0(3.2.44)
(i) 우선 역행렬이 존재하든 말든 c=0이면 Xc=0는 당연하다. 따라서 오른쪽에서 왼쪽 방향은 증명된다.
(ii) 다음으로 역행렬이 존재할 때 Xc=0이면
X−1Xc=c=0(3.2.45)
이므로 왼쪽에서 오른쪽 방향도 증명된다. 따라서 역행렬이 존재하면 풀랭크다.
❗❗❗ 이해 못함 ❗❗❗
벡터공간 투영
M개의 N차원 기저벡터 v1,v2,⋯,vM 가 존재한다고 하자. M은 N보다 작다.
이 때 모든 N차원 벡터 x에 대해 기저벡터 v1,v2,⋯,vM를 선형조합하여 만든 벡터 x∥v와 원래 벡터 x의 차 x−x∥v가 모든 기저벡터에 직교하면 그 벡터 x∥v를 v1,v2,⋯,vM벡터공간에 대한 투영벡터라 하고 차이 벡터 x−x∥v=x⊥v를 벡터공간에 대한 직교벡터라 한다.
(x−x∥V)⊥{v1,v2,⋯,vM}(3.2.46)
다음 그림은 N=3,M=2 즉 3차원 벡터를 2차원 벡터공간에 투영하는 예를 보인 것이다.
정규직교인 기저벡터로 이루어진 벡터공간
만약 기저벡터 v1,v2,⋯,vM가 정규직교(orthonormal)이면 투영벡터 x∥v는 각 기저벡터에 대한 내적값으로 표현된다.
x∥V=(xTv1)v1+(xTv2)v2+⋯+(xTvM)vM(3.2.47)
그리고 투영벡터의 길이의 제곱은 각 기저벡터와의 내적의 제곱합이다.
∥x∥V∥2=i=1∑M(xTvi)2(3.2.48)
벡터 x에서 이 벡터 x∥V를 뺀 벡터 x−x∥V, 즉 직교벡터 x⊥V가 기저벡터 v1,v2,⋯,vM에 모두 직교한다는 것은 다음처럼 증명할 수 있다.
어떤 벡터의 좌표(coordinate) 는 기저벡터를 선형조합하여 그 벡터를 나타내기 위한 계수벡터를 말한다.
예를 들어 다음처럼 기저벡터 {e1,e2}를 선형조합하여 벡터 x를 나타낼 수 있다고 가정하자.
x=xe1e1+xe2e2(3.2.53)
이 때 벡터 xe
xe=[xe1xe2](3.2.54)
를 벡터 x의 기저벡터 {e1,e2}에 대한 좌표벡터 혹은 간단히 좌표(coordinate) 라고 한다. 벡터와 기저벡터 그리고 좌표의 관계는 다음과 같다.
x=[e1e2][xe1xe2]=[e1e2]xe(3.2.55)
표준기저벡터를 모아놓은 행렬이 항등행렬이기 때문에 표준기저벡터에 대한 벡터의 좌표 xe는 원래 벡터 x와 같다. 하지만 같은 벡터라도 다른 기저벡터를 사용하면 좌표가 달라진다. 따라서 하나의 벡터도 기저벡터에 따라 여러 좌표를 가질 수 있다.
import matplotlib.pylab as plt
gray ={"facecolor":"gray"}
black ={"facecolor":"black"}
red ={"facecolor":"red"}
green ={"facecolor":"green"}
blue ={"facecolor":"blue"}
lightgreen ={"facecolor":"lightgreen"}
새로운 기저벡터에 대한 좌표변환을 응용하면 이미지를 자유롭게 변환할 수도 있다. 파이썬에서는 scipy.ndimage 패키지의 affine_transform() 명령을 사용한다. 이 명령은 이미지를 이루는 픽셀을 새로운 좌표로 이동시킨다. 인수로는 이미지 데이터와 변환행렬의 역행렬(위에서 A로 표시한 행렬) 을 받는다. 단 파이썬 이미지에서는 다음과 같은 표준기저벡터를 사용하고 (x1이 아래를 향하는 세로축, x2가 오른쪽을 향하는 가로축) 원점이 왼쪽 상단의 점이라는 점에 유의한다.
e1=[0−1],e2=[10](3.2.73)
다음은 위에서 예로 든 기저벡터 {g1,g2}로 이미지 변환한 예다(그림에서 기저벡터의 크기는 설명을 위해 과장하여 크게 표시하였다).