행렬 rank - haenglyeol rank

[기초 선형대수] 행렬에서 Rank (랭크) 란?

선형대수에서 등장하는 Rank 라는 개념에 대해서 간략하게 알아보자. 

위키의 정의를 우선 확인해보자.

행렬 rank - haenglyeol rank

여기서 보면, 임의의 행렬 A가 있을 때, 이 행렬의 Rank 라는 것은 이 행렬의 열들로 생성될 수 있는 벡터 공간의 차원을 의미한다고 한다. 선형 대수에 익숙하다면 이글만 봤을 때, 바로 이해가 될 것이지만, 그렇지 않은 경우도 있으니, 좀 더 구체화 시켜보자. 

위키에서 또 말하길, 행렬 A의 열들 중에서 선형 독립인 열들의 최대의 개수를 Rank라고 하고, 이것은 행에 대해서 나타내어 지는 공간의 차원과도 같다고 한다. 결국 차원이라고 하면 벡터 공간 상에서 기저(Basis)의 개수에 의해서 결정이 되고, 이것은 행렬의 행이라고 봐도 되겠다. 그래서 각각의 선형 독립인 행의 개수에 의해서 차원이 결정 된다고 하니, 각각의 기저로 본다고 볼 수 있겠다. 벡터의 기저의 정의를 봐도, 서로 독립인 벡터들이 기저가 되고, 이것에 의해서 벡터 공간이 정의 된다.  

좀 더 많은 Rank에 관한 정의를 살펴보자.

A라는 행렬의 Column rank는 Column space의 차원을 의미하고 Row rank는 Row space의 차원을 의미한다. 결국 행에서 선형 독립인 벡터의 개수와 열에서 선형 독립인 벡터의 개수를 구분해서 정의하겠다는 소리다.

그리고 여기서 중요한 사실 하나를 인식하자. 
선형 대수에서는 이렇게 따로 계산할 수 있는 행과 열의 Rank는 항상 동일하다는 것이다. 따라서, 구지 따로 계산할 필요 없이 한쪽만 계산해서 A의 Rank라고 일반적으로 말해도 되는 것이다. 

다음으로는 Full rank에 대해서 알아보자. 
Full Rank는 다름이 아니라, 해당 행렬이 가질 수 있는 최대로 가능한 Rank의 값이 되겠다. 그런데 앞서 말했듯이, 행과 열의 각각의 Rank는 서로 같은 값을 가진다고 하였으므로, 아래와 같이 어느 한 쪽에서 작은 값의 사이즈가 Full Rank의 값이 되겠다. 

Rank(A= Min(m,n) 

즉, Full Rank는 한 행에서 전부 다 선형 독립이거나, 또는 한 열에서 전부 다 선형 독립인 벡터 기저들을 가진 경우라고 볼 수 있겠다. 


이제는 예제를 통해서 보다 자세히 Rank의 개념에 대해서 확인해보자. 
먼저 정방 행렬의 경우로 예를 들어보자. 

행렬 rank - haenglyeol rank

위의 행렬의 경우 랭크는 2이다. 왜냐하면, 첫 번째와 두 번째 열은 서로 선형 독립 관계에 있다고 볼 수 있다. 하지만, 세 번째 열의 경우에는 첫 번째 열에서 두 번째 열을 빼주게 되면 세 번째 열이 된다. 즉, 선형적으로 의존적인 관계가 성립한다. 따라서, 이 행렬의 Rank는 2가 된다. 

다음으로는 아래와 같이 A라는 정방행렬이 아닌 경우를 생각해보자. 

행렬 rank - haenglyeol rank

이 경우에도 마찬가지로, 행이든 열이든 하나만 보면 된다. 왜냐하면 이 둘의 랭크는 같은 값을 가질 것이기 때문이다. 위의 행렬의 경우에는 0을 제외 하고 나머지들은 서로 모두 의존적이다. 첫 번째 열은 정확히 두 번째 열과 같고, 네 번째 열은 첫 번째 열의 두 배와 정확히 같기 때문이다. 그런데 세 번째 열이 0의 값을 가지므로, 랭크에서는 제외되지만, 결국 세 번째 열을 제외한 나머지 세 개의 열들은 하나의 기저로 역할을 할 수 있으므로, 하나의 랭크를 가진다고 볼 수 있겠다. 따라서, 위의 행렬의 랭크는 1이다. 

행렬 rank - haenglyeol rank

이제는 앞의 A행렬의 전치 행렬에 대해서 랭크를 구해보자. 여기서 보면, 열만 보게 되면 두 열은 서로 의존적이라는 것을 쉽게 알 수 있다. 왜냐하면 첫 번째 열에 마이너스 1을 곱하게 되면 두 번째 열이 되기때문이다. 그러므로, 결국 이 벡터 공간을 지배하는 기저는 하나라고 볼 수 있다. 비록 서로 의존적이지만, 이 두 벡터가 하나의 기저로서 작용할 수 있기 때문이다. 따라서, 앞에서 말한 법칙은 진실이라는 것을 확인하였다. 행과 열의 랭크는 서로 같다는 법칙 말이다. 

핵심을 정리하자면,
행렬의 랭크는 행렬이 나타낼 수 있는 벡터 공간에서 기저의 개수를 의미하고, 이 기저는 서로 독립인 행또는 열의 벡터의 개수에 의해서 결정된다. 열과 행의 랭크는 서로 같은 값을 가지므로, 행렬의 랭크를 구할 때에는 한쪽의 랭크만 계산하면 되고, 서로 선형 독립인 벡터가 몇 개가 되는지만 확인하면 된다. 

%참고 문헌: https://en.wikipedia.org/wiki/Rank_(linear_algebra)

0. 차례

1. 들어가기

2. 행렬의 계수(Rank)란?

3. 가우스 소거법을 이용한 행렬의 계수(Rank) 구하기

4. R에서 행렬의 계수(Rank) 구하기 : Matrix 패키지의 rankMatrix() 함수

5. 요약

6. 참고자료(Reference)

1. 들어가기

이번 포스팅에서는 선형대수학에서 핵심부분 중 하나인 행렬의 계수(Rank)를 R에서 구하는 방법에 대해 알아보도록 하겠습니다.

2. 행렬의 계수(Rank)란?

행렬 A의 계수는 행공간과 열공간의 차원을 말합니다3). 즉 행렬 A의 계수(rank(A))는 아래와 같이 표현할 수 있습니다.

여기서 row(), col() 은 행렬 A의 행공간, 열공간을 말하며 dim()은 각 공간의 차원(기저 갯수)을 의미합니다. 그렇다면 행렬 A의 행공간과 열공간은 무엇일까요? 행렬 A가 m by n 행렬이라고 할때 , A의 행공간은 행에 의해 생성된 Rn의 부분공간을 말하며 A의 열공간은 열에 의해 생성된 Rm의 부분공간을 말합니다.4) 예를 들어 아래와 같은 A 행렬이 있을 떄,

있을 떄, 행 공간을 구성하는 벡터는 {(1, -1), (0, 1), (3, -3)} 이 되며, 열 공간을 구성하는 벡터는 {(1, 0, 3), (-1, 1, -3)}을 들 수 있습니다. 여기서 행, 열공간의 차원을 구하기 위해서는 공간을 생성하는 일차독립(선형독립)의 기저(basis)를 확인해야 합니다. 일차독립은 n개의 벡터 v1,...,vn가 있을 때, 아래와 같이 정의됩니다.2)

의 선형연립방정식을 만족하는 해가 유일하게 존재하는 경우(c1,...cn이 모두 0)에 벡터 v1,...vn는 선형독립 및 1차독립합니다. 반면에 해가 유일하지 않는 경우(c1,...cn 중 1개라도 0이 아니면) 선형종속 혹은 1차종속이라고 합니다. 위에서 A 행렬의 행공간은 3(1, -1)+0(0, 1)+(3,-3)=0 임으로 일차종속이며 따라서 이 3개의 벡터는 행공간의 기저가 될 수 없습니다. 하지만 c1(1,-1)+c2(0, 1)=0은 반드시 c1=c2=0 이어야 함으로 1차독립이며 행공간에 대한 기저가 됩니다. 따라서 A 행렬의 행공간의 차원은 기저의 갯수인 2가 되며 이는 A행렬의 계수를 의미합니다.

3. 가우스 소거법을 이용한 행렬의 계수(Rank) 구하기

행렬의 계수는 가우스 소거법으로 기약행사다리꼴 행렬을 구하고 난 후, 모든 성분이 0인 행을 제외하고 나머지 행의 갯수 세어주면 됩니다. 그럼 예시로 아래 행렬 A에 대해 행렬의 계수를 구해보도록 합시다.

i번째 행을 Ri 라고 할 때, 기본 행연산을 통해 행렬 A를 기약행사다리꼴로 나타낼 수 있습니다.

위의 A 행렬의 기약행사디리꼴의 3행의 모든 성분이 0임으로 계수는 2임을 확인할 수 있습니다.

4. R에서 행렬의 계수(Rank) 구하기 : Matrix 패키지의 rankMatrix() 함수

R에서 행렬의 계수를 구하는 함수는 Matrix 패키지의 rankMatrix() 함수가 있으며 입력인자는 다음과 같습니다.

Matrix 패키지의 rankMatrix() 함수의 입력인자

x

행렬(매트릭스 자료형)

tol

비음수 허용오차 지정

method

rank를 계산하기 위한 방법

("tolNorm2", "qrLINPACK", "qr.R", "qr", "useGrad", "maybeGrad")

그럼 2절에서 살펴보았던 행렬을 R에 입력하여 행렬의 계수를 구해보도록 합시다.

#행렬의 계수(Rank) 구하기 > A <- matrix(c(2, 1, -4, + -4, -1, 6, + -2, 2, -2), byrow= TRUE, nrow =3) > library(Matrix) > rankMatrix(A) [1] 2 attr(,"method") [1] "tolNorm2" attr(,"useGrad") [1] FALSE attr(,"tol") [1] 6.661338e-16

행렬 A의 계수는 위에서 보는 것처럼 "2"임을 확인할 수 있습니다.

5. 요약

- 행렬 A의 계수(Rank)는 행공간과 열공간의 차원을 말함.

행렬 A가 m by n 행렬이라고 할때 , A의 행공간은 행에 의해 생성된 Rn의 부분공간을 말하며 A의 열공간은 열에 의해 생성된 Rm의 부분공간을 말함.

- R에서 Matrix 패키지의 rankMatrix() 함수를 이용하여 행렬의 계수(Rank)을 구할 수 있음.

6. 참고자료(Reference)

1) https://stat.ethz.ch/R-manual/R-devel/library/Matrix/html/rankMatrix.html

2) https://rfriend.tistory.com/176

3) 선형대수학, 경문사, p.198, 208,

4) https://ko.wikipedia.org/wiki/%EA%B3%84%EC%88%98_(%EC%84%A0%ED%98%95%EB%8C%80%EC%88%98%ED%95%99)