지난번 포스팅에서는 행과 열의 개수가 같은 정방행렬(square matrix)에 대해 고유값 분해(eigenvalue decompositon)를 활용한 대각화(diagonalization)와, 이를 마아코프 과정(Markov Process)의 안정상태확률 계산에 적용한 사례에 대해서 소개하였습니다.

 

복습하는 차원에서 고유값 분해에 대해서 정리해보면 아래와 같습니다. 

 

  • 고유값 분해 (eigenvalue decomposition)

 

고유값 분해는 n*n 정방행렬 (n by n square matrix)에 대해서만 적용 가능하다는 점과 가운데에 D 행렬에 고유값이 들어가 있다는 점은 다시 한번 상기하시기 바랍니다.  m*n 직사각행렬(m by n rectangular matrix)에 대해서는 고유값 분해는 사용할 수 없다는 뜻입니다.

 

 

 

 

이번 포스팅에서는 실수(real number)나 복소수(complex number)로 이루어진 공간의 원소로 이루어진 m개의 행과 n개의 열을 가진 모든 직사각행렬 (rectangular matrix)에 폭넓게 사용 가능한 특이값 분해 (SVD, singular value decomposition)에 대해서 알아보겠습니다.

 

특이값 분해는 행렬의 스펙트럼 이론을 임의의 직사각행렬에 대해 일반화한 것으로 볼 수 있습니다. 스펙트럼 이론을 이용하면 직교 정사각행렬을 고유값을 기저로 하여 대각행렬로 분해할 수 있습니다. (* 위키피디아) 

  • 스펙트럼 분해 (spectral decomposition)

p*p 대칭행렬 A에 대한 스펙트럼 분해(spectral decomposition)는 다음과 같습니다.  p*p 대칭행렬 A는 직교행렬 P에 의해 대각화(diagonalization)된다고 합니다.

 

 

이때 를 만족하는 직교행렬 P는 로 이루어지며, (람다, lambda)는 A의 고유값(eigenvalue)들로만 이루어진 대각행렬(diagonal matrix)인

 입니다.  대각행렬 이 성립합니다.

 

 

 

위의 스펙트럼 분해 (혹은 분광분해)를 일반화한 특이값 분해는 아래와 같습니다. 

 

 

 

  • 특이값 분해 (SVD, Singular Value Decomposition)

m*n 직사각행렬 A에 대한 특이값 분해(SVD, Singular Value Decomposition)는 아래와 같이 나타낼 수 있습니다.

 

 

 

행렬 A의 계수(rank)가 k 라고 할 때,

 

를 고유값분해(eigenvalue decomposition)로 직교대각화하여 얻은 m*m 직교행렬 (orthogonal matrix)이며, 특히를 좌특이벡터(left singular vectors, gene coefficient vectors) 라고 합니다.

 

 

는  를 고유값분해로 직교대각화하여 얻은 n*n 직교행렬이며, 특히 를 우특이벡터(right singular vectors, expression level vectors)라고 합니다.

 

 

는 (의 0이 아닌 고유값이 일 때)  를 대각성분으로 가지고 나머지 성분은 0을 가지는 m*n 직사각 대각행렬(diagonal matrix) 입니다.

 

 

 

 

m*n 직사각행렬 A의 특이값 분해 를 다시 한번 풀어서 쓰면 아래와 같습니다.

 

 

 

 

위의 식에서 특이값(singular value)는 가 됩니다.

 

 

참고로,

U, V가 직교행렬(orthogonal matrix)이면 가 성립합니다. 

직교행렬(orthogonal matrix) Q는 다음을 만족하는 정방행렬이기 때문입니다.

 

 

 

 

서두에서 정방행렬에 국한된 고유값 분해보다 모든 m*n 행렬에 적용가능한 특이값 분해가 일반화면에서 활용성이 더 넓다고 했는데요, 이 둘이 사실은 서로 관련이 되어 있습니다.

 

 

 

  • 특이값 분해와 고유값 분해의 관계

아래의 수식 전개를 보면 확인할 수 있는데요, 서두에서 소개했던 고유값 분해 형식()과 같아졌습니다.  m*n 행렬 A의 특이값 분해의 U는  의 고유벡터(eigenvector)이고, V는의 고유벡터(eigenvector) 이며, A의 0이 아닌 특이값들의 제곱() 은 , 의 고유값과 같음을 알 수 있습니다.

 

결국 SVD를 계산한다는 것은 의 고유벡터와 고유값을 구하는 것이라는 것을 알 수 있습니다.

 

 

 

다음으로, 특이값 분해의 기하학적인 의미를 살펴보겠습니다.

  • 특이값 분해의 기하학적인 의미 (visualization of SVD)

아래의 그림을 가지고 의 특이값 분해가 가지는 선형변환의 의미를 기하학적으로 설명하자면, 먼저 직교행렬 에 의해서 원 행렬 M이 회전(방향 변환)을 하게 되며, 에 의해서 크기가 달라졌고 (scale 변환), 다시 직교행렬 에 의해서 에 의한 회전과는 반대로 회전(방향 변환)하였습니다.

 

* 그림 출처 : https://en.wikipedia.org/wiki/Singular_value_decomposition

 

위의 설명을 애니메이션을 넣어서 설명해주는 그림은 아래와 같습니다.

 

Singular value decomposition

* 출처 : By Kieff (Own work) [Public domain], via Wikimedia Commons

 

 

고유값 분해를 통한 대각화의 경우 고유벡터의 방향은 변화가 없고, 크기(scale 변환)만 고유값(eigenvalue) 만큼 변한다고 설명드렸었습니다.  반면, 특이값 분해는 위의 그림 결과를 보면 처음의 행렬 U, V^T에 의해 M이 방향이 변하고, Σ 특이값(singular values)들 만큼의 크기(scale)가 변했음을 알 수 있습니다.

 

 

  • Redeced SVD (Singular Value Decomposition)

위에서 SVD(Singular Value Decomposition)를 설명할 때 full SVD를 설명해 드렸습니다만, 실전에서는 많은 경우 아래 그림에서 소개드린 것처럼 reduced SVD를 합니다. full SVD 대비 reduced SVD는 특이값(singular value) 들 중에서 0인 것들을 제외하고 SVD를 한다는 점이 서로 다릅니다.

 

 

 

아래의 그림을 보면 조금 더 이해하기가 쉬울텐데요, 빨간색 점선으로 표시한 부분을 제외하고 행렬 A의 계수(rank) k 개 만큼의 특이값들을 가지고 SVD를 진행하는 것이 reduced SVD 입니다.

 

 

  • 특이값 분해 예제 (example of full SVD)

이해를 돕기 위해서 4 by 2 직사각행렬 (rectacgular matrix) A를 가지고 (full) SVD 계산 예를 들어보겠습니다.  아래 예에서의 고유값과 고유벡터 계산은 R 분석툴을 사용했습니다.  손으로 푸는 방법은 ☞ [선형대수] 고유값, 고유벡터 구하기 (calculation of eigenvalue and eigenvector) 를 참조하시기 바랍니다.

 

 

 

4 by 2 행렬 을 가지고 해보겠습니다.

 

특이값 분해가  라고 했는데요,

 

(1) 먼저 의 고유벡터(eigenvectors)인 U를 구해보겠습니다.

 

 

 

 

위의 풀이에서 사용한, R로 의 고유벡터를 구해서 U를 구하는 방법은 아래와 같습니다.

 

> A <- matrix(c(3, 2, 0, 0,  6, 3, 0, 0), nc=2, byrow = FALSE)
> A
     [,1] [,2]
[1,]    3    6
[2,]    2    3
[3,]    0    0
[4,]    0    0
> t(A)
     [,1] [,2] [,3] [,4]
[1,]    3    2    0    0
[2,]    6    3    0    0
> ##--- (1) calculation of U
> # A%*%t(A)
> W_1 <- A%*%t(A)
> W_1
     [,1] [,2] [,3] [,4]
[1,]   45   24    0    0
[2,]   24   13    0    0
[3,]    0    0    0    0
[4,]    0    0    0    0
> 
> 
> # eigenvalue, eigenvector of W
> eigen(W_1)
$values
[1] 57.8444102  0.1555898  0.0000000  0.0000000

$vectors
          [,1]       [,2] [,3] [,4]
[1,] 0.8816746 -0.4718579    0    0
[2,] 0.4718579  0.8816746    0    0
[3,] 0.0000000  0.0000000    0    1
[4,] 0.0000000  0.0000000    1    0

> 
> # U
> U <- eigen(W_1)[[2]] # eigenvectors
> U
          [,1]       [,2] [,3] [,4]
[1,] 0.8816746 -0.4718579    0    0
[2,] 0.4718579  0.8816746    0    0
[3,] 0.0000000  0.0000000    0    1
[4,] 0.0000000  0.0000000    1    0

 

 

 

 

(2) 다음으로,  의 고유벡터(eigenvectors of A^T*A)  를 구해보겠습니다.  위의 (1)번 풀이 과정과 동일합니다.

 

 

R로 풀이한 것은 아래와 같습니다.

 

> > ##---- (2) calculation of V^T > # t(A)%*%A > W_2 <- t(A)%*%A > W_2 [,1] [,2] [1,] 13 24 [2,] 24 45 > > # eigenvalue of W > eigen(W_2) $values [1] 57.8444102 0.1555898 $vectors [,1] [,2] [1,] 0.4718579 -0.8816746 [2,] 0.8816746 0.4718579 > > # V > V <- eigen(W_2)[[2]] # eigenvectors > V [,1] [,2] [1,] 0.4718579 -0.8816746 [2,] 0.8816746 0.4718579 

 

 

 

(3) 다음으로, 의 고유값(eigenvalue)의 제곱근(square root)을 특이값(singular value) 대각원소로 가지고 나머지는 '0'인 대각행렬 Σ 를 구해보겠습니다.

 

 

R로 고유값에 square root를 취해서 특이값(singular value) 구하는 절차는 아래와 같습니다.

 

> ##--- (3) calculation of Σ
> # square root of eigenvalues
> W_2_eigenvalue_sqrt <- sqrt(eigen(W_2)[[1]])
> W_2_eigenvalue_sqrt
[1] 7.6055513 0.3944487
> 
> S <- matrix(rep(0, 8), nc=2, byrow=F) # all zeros, temp matrix
> S
     [,1] [,2]
[1,]    0    0
[2,]    0    0
[3,]    0    0
[4,]    0    0
> 
> S[1,1] <- W_2_eigenvalue_sqrt[1] 
> S[2,2] <- W_2_eigenvalue_sqrt[2]
> S
         [,1]      [,2]
[1,] 7.605551 0.0000000
[2,] 0.000000 0.3944487
[3,] 0.000000 0.0000000
[4,] 0.000000 0.0000000 

 

 

 

(4) 위에서 구한 U, V^T, Σ 를 종합하면 끝이네요.

 

 

 

R 로 그동안 풀었던거 다시 한번 불어와보면 아래와 같습니다.

 

> # overall (aggregation)

> > A # 4 by 2 rectacgular matrix [,1] [,2] [1,] 3 6 [2,] 2 3 [3,] 0 0 [4,] 0 0 >

> U # eigenvectors of A*t(A) [,1] [,2] [,3] [,4] [1,] 0.8816746 -0.4718579 0 0 [2,] 0.4718579 0.8816746 0 0 [3,] 0.0000000 0.0000000 0 1 [4,] 0.0000000 0.0000000 1 0 >

> S # square root of eigenvalues of t(A)*A [,1] [,2] [1,] 7.605551 0.0000000 [2,] 0.000000 0.3944487 [3,] 0.000000 0.0000000 [4,] 0.000000 0.0000000 >

> V # eigenvectors of t(A)*A [,1] [,2] [1,] 0.4718579 -0.8816746 [2,] 0.8816746 0.4718579 > > SVD_of_A <- U %*% S %*% t(V) > SVD_of_A [,1] [,2] [1,] 3.328201 5.824352 [2,] 1.386750 3.328201 [3,] 0.000000 0.000000 [4,] 0.000000 0.000000 

 

 


많은 도움이 되었기를 바랍니다.

 

도움이 되었다면 아래의 '공감 ♡'를 꾸욱~ 눌러주세요. ^^

 

Posted by R Friend R_Friend

 지난 포스팅에서는 대각행렬(diagonal matrix), 행렬의 대각화(diagonalization), 그리고 고유값(eigenvalue)과 고유벡터(eigenvector)를 이용 (eigenvalue-eigenvector decompositon)하여 n차 정방행렬의 p제곱을 구하는 방법을 소개하겠습니다.

 

 이번 포스팅에서는 지난번에 소개했었던 내용을 마아코프 과정 (Markov Process)에 어떻게 적용할 수 있는지에 대해서 설명해보렵니다.

 

 먼저, 마아코프 과정(Markov Process)가 무엇인지부터 알아보겠습니다. 

 

 아래의 사진은 확률론으로 유명한 러시아의 수학자 Andrei Andreyevich Markov 입니다.  Markov Process, Markov Chain 은 이 이론을 발표했던 수학자 이름을 딴 것이예요.

 

        * 사진출처 : http://www.slideshare.net/butest/hidden-markov-models-with-applications-to-speech-recognition

 

 

 불확실한 상황 하에서 의사결정을 하려면 '확률'에 기초해서 분석을 해야 합니다.  어떤 사건이 발생할 확률값이 시간에 따라 변화해 가는 과정을 확률적 과정(Stochastic Process)라고 하며, 확률적 과정 중에서 한 가지 특별한 경우가 마아코프 과정 (Markov Process) 입니다.

 

 "어떤 상태가 일정한 시간 간격으로 변하고, 다음 상태는 현재 상태에만 의존하여 확률적으로 변하는 경우, 이 상태의 변화를 마아코프 과정(Markov Process)이라 부른다.  마아코프 과정에서는 현재 상태에 따라서만 다음 상태가 결정되며, 현재 상태에 이르기까지의 과정은 전혀 고려할 필요가 없다.

 

 어떤 실제 현상이 마아코프 과정을 따르는 경우, 충분한 시간이 지난 후에 어떤 상태가 되는지를 파악하는 것이 중요한 경우가 많다"

 

 - 출처 : 박부성 지음, '8일간의 선형대수학', 경문사

 

 마아코프 과정에서 연속적인 시간 변화를 고려하지 않고 이산적인 경우만 고려한 경우를 마아코프 연쇄 (Markov Chain) 이라고 합니다. 마아코프 연쇄는 각 시행의 결과가 여러개의 미리 정해진 결과 중의 하나가 되며, 각 시행의 결과는 과거의 역사와는 무관하며 오직 바로 직전 시행의 결과에만 영향을 받는 특징(Markov Property)을 가지고 있습니다.

 

 예를 들어서 설명을 해보겠습니다.

 

 맥주 회사의 마케터라면 시장 내 주요 브랜드 간에 시장점유율이 장기간 후에 (즉, 충분한 시간이 지난 후에) 어떻게 변화할지 궁금하겠지요?  이를 확률적으로 분석해 보기 위해서 캬아쓰 맥주와 하아뜨 맥주를 구매하는 고객들의 구매 행태를 장기간에 걸쳐서 관측하여 아래와 같은 데이터를 힘들게 구했습니다.

 

 

(1) 이번 주에 캬아쓰 맥주를 구매한 고객 중 90%가 다음 주에도 캬아쓰 맥주를 구매하고, 나머지 10%는 하아뜨 맥주로 갈아탄다.

 

(2) 이번 주에 하아뜨 맥주를 구매한 고객 중 80%가 다음 주에도 여전히 하아뜨 맥주를 구매하고, 나머지 20%는 캬아쓰 맥주로 갈아타더라.

 

 

 하아뜨 맥주회사의 '처음해' 신입사원이  '깐깐해' 과장으로부터 중장기 마케팅 전략 수립을 위해 "하아뜨 맥주와 캬아쓰 맥주의 장기적인 시장점유율"을 분석해오라는 지시를 받았습니다.  점쟁이도 아닌데 어케 장기 시장점유율을 알 수 있냐고 투덜대거나 무기력하게 멍때리지 마시기 바랍니다.  우리에게는 마아코프 과정(Markov Process)으로 장기 시장점유율을 추정해 볼 수 있는 데이터가 있으니깐요.

 

 위의 예에서 고객이 구매한 맥주 브랜드는 이 고객의 상태(state)를 나타내며(이번달에 캬아쓰 샀다, 아니면 하아뜨 샀다...), 맥주 구매는 일정한 시간 간격을 두고 변하고(주마다 구매, 불금 퇴근 길에 6팩~룰루랄라~), 다음 주의 상태(state)는 현재 주의 상태(이번 달에 무슨 브랜드 맥주를 샀는가)에만 영향을 받는 확률 과정을 따르고 있습니다. 다음주의 상태를 알기 위해 저번주, 저저번주, 저저저번주에 무슨 맥주 샀는지 알 필요가 없습니다.  네, 마아코프 과정Markov Process) 되겠습니다.

 

 - 상태 (state) 1 : 캬아쓰 맥주 구매

 - 상태 (state) 2 : 하아뜨 맥주 구매

 

라고 했을 때, (장기간에 걸쳐서 관찰 조사해서 얻은, 혹은 매주 맥주를 마시는 필자의 경험과 통찰로 부터 얻은?) 이번주 구매한 맥주 브랜드에서 다음주 구매한 맥주 브랜드로의 변화 확률을 표로 정리하면 아래와 같습니다.  아래와 같은 표를 전이확률표(transition probability table) 이라고 합니다. 

 

                             다음 주

 이번 주

캬아쓰 맥주

하아뜨 맥주 

 계

캬아쓰 맥주

0.9

0.1

 1.0

하아뜨 맥주

0.2

0.8

 1.0

 

 

맥주 애호가 '알프랜'이라는 고객이 이번주에 '캬아쓰' 맥주를 구매했다고 칩시다. 그러면 '알프랜' 고객이 다음주에 '캬아쓰' 맥주와 '하아뜨' 맥주를 구매할 확률은 위의 전이확률표(transition probability table)을 가지고 계산할 수 있습니다.

 

 

 

 

 

위에서 계산한 방법을 전이확률행렬(transition probability matrix)를 가지고 아래처럼 계산 표기를 간편하게 나타낼 수 있습니다.

 

 

 

 

 

2주 후(n=2) 의 전이확률값은 아래와 같이 계산할 수 있습니다.  마아코프 과정을 따르므로 2주 후의 확률은 직전 주의 확률에만 의존하며, 그 이전의 과거는 무시합니다.  단기기억만 가지고 계산을 해도 되니 얼마나 편하고 좋습니까!

 

 

 

 

n 시간 이후의 상태확률값 계산은 아래와 같이 일반화할 수 있습니다.

 

 

 

 

 

그러면 3주 후, 4주 후, 5주 후, ..., 12주 후, ..., n -> ∞ 로 일정 주기마다 시간이 꼬박꼬박 가게 되면 장기간 후에는 아래 처럼 확률값이 수렴을 하게 됩니다.

 

 

 

 

위의 계산 결과를 보면 처음에 무슨 맥주('캬아쓰' or '하아뜨')를 구매했었느냐에 따라서 n 의 초반에는 차이가 많이 납니다. (가령, 처음에 '캬아쓰'를 샀으면 그 다음주에 캬아쓰를 살 확률은 0.9, 하지만 처음에 '하아뜨'를 샀다면 다음주에 '캬아쓰'를 살 확률은 0.2).  하지만 n이 점차 커짐에 따라서 처음에 무슨  맥주를 구매했느냐에 상관없이 점점 캬아쓰 맥주 구매 확률은 0.669로 수렴, 하아뜨 맥주 구매 확률은 0.331로 수렴함을 알 수 있습니다.  이 값을 안정상태의 확률값 (steady-state probability) 이라고 합니다. 충분히 시간이 지난 후에 장기적으로 시장 점유율이 어떤 상태가 되는지를 예측해볼 수 있게 된 것입니다.  자, 이쯤되면 '처음해' 신입사원이 '깐깐해' 과장을 좀 놀래켜줄 수 있겠지요? ^^

 

 

 

지금까지 마아코프 과정(Markov Process)의 개념과 계산 과정을 설명드렸는데요, 이게 선형대수랑 무슨 관계라는 거지? 대각화(diagonalization)로 무엇을 한다는 것인지? 에 대해서 이제부터 설명을 드리겠습니다.  지난번 포스팅에서 다루었던 선형대수의 대각화 성질을 이용하면 계산을 매우 간편하게 할 수 있습니다.

 위에서 제시했던 식의 끝부분을 한번 더 써보면 아래와 같은데요, 아래 식의 오른쪽의 2차 정방행렬의 p제곱 부분을 주목해보세요.

 

 

고유값, 고유벡터가 존재하는 정방행렬의 p제곱 구하는 방법은 이전 포스팅에서 소개했었습니다. 그걸 이번 마아코프 과정 맥주 장기 시장점유율의 안정상태확률 구하는 문제에 한번 적용해보겠습니다.

 

(1) 고유값(eigenvalue) 구하기

 

 

 

 

 

(2) 고유벡터(eigenvector) 구하기

 

위에서 고유값을 먼저 구한 다음에, λ=1에 대응하는 고유벡터 V1은 아래와 같이 구합니다.

 

 

 

고유값 λ=0.7 에 대응하는 고유벡터 V2는 아래와 같이 구합니다.

 

 

상태전이확률 행렬 A = (0.9  0.2,   0.1  0.8)^T 의

고유값 λ1=1, 이에 대응하는 고유벡터 V1 = (1  1),

고유값 λ2=0.7, 이에 대응하는 고유벡터 V2 = (-1  2)

를 구했습니다.  따라서 상태전이확률 행렬 A는 아래와 같이 대각화(diagonalization)이 가능합니다.

 

 

 

 

(3) 첫 구매가 '캬아쓰' 맥주였을 때, 2주 후(n=2) 시간이 지난 후의 '캬아스 구매 확률', '하아뜨 구매 확률' 구하기

 

 

위에 계산한것을 보면 고유값, 고유벡터를 가지고 대각화해서 계산하는 것의 장점을 잘 모르겠지요?  도리어 고유값, 고유벡터 구하느라 더 난리치는거 아닌가 싶기도 하구요. 차라리 고유값, 고유벡터의 대각화를 사용안하고 그냥 저 위에서 마아코프 과정의 정의에 따라서 계산한 것이 더 간편하게 느껴지기까지 하지 않나요?

 

그러면 이번엔 2주 후(n=2)가 아니라 100주 후(n=100)의 상태확률의 변화를 계산해보는 경우는 어떨까요?  저 위에서 소개했던 방법으로 100번 반복 계산하려면 손 좀 아프겠지요?  계산 중간에 실수할 수도 있겠구요.  이걸 고유값, 고유벡터를 가지고 대각화하여 n차 제곱하는 성질을 이용하면 매우 간편하게 계산을 할 수가 있습니다.  아래에 n=100 일 때의 계산 방법 소개합니다.

 

 

(4) 첫 구매가 '캬아쓰' 맥주였을 때, 100주 후(n=100) 시간이 지난 후의 '캬아스 구매 확률', '하아뜨 구매 확률' 구하기

 

 

저~어기 위에서 처음에 계산했던 것 n -> ∞ 일 때의 상태확률 계산값이 '캬아스 0.669', '하아뜨 0.331'로 수렴했었는데요, 바로 위에서 고유값과 고유벡터의 대각화 성질을 이용해서 계산한 값도 정확히 일치하지요?

 

 

다음번 포스팅에서는 SVD(Singular Value Decomposition)에 대해서 알아보겠습니다.  이번 포스팅에서 이용한 고유값-고유벡터 분해(eigenvalue-eigenvector decomposition)이 정방행렬에 대해서만 적용이 가능한데 반해 특이값 분해 (SVD)는 m*n 행렬에 적용가능해 활용성이 매우 높은 방법이므로 기대해주세요.

 

이번 포스팅이 도움이 되었다면 아래의 '공감 ♡ 꾸욱~' 눌러주세요. ^^

 

 

Posted by R Friend R_Friend

지난번 포스팅에서는 특성방정식(chacacteristic equations)을 이용하여 고유값(eigenvalue)과 고유벡터(eigenvector)를 구하는 방법에 대하여 알아보았습니다.

 

이번 포스팅에서는 행렬의 대각화(diagonalization), 그리고 고유값과 고유벡터를 이용하여 n차 정방행렬의 p제곱을 구하는 방법을 소개하겠습니다.  이번 포스팅을 보고 나시면 왜 고유값, 고유벡터가 다방면에 두루두루 쓰이는지, 왜 중요한지 그 원리가 이해되실 거예요.

 

 

먼저, 대각행렬, 대각화, 대각행렬의 p 제곱으로 시작하겠습니다. 대각성분을 제외한 모든 성분이 0인 행렬을 대각행렬(diagonal matrix) 이라고 하며 diag(a11, a22, ..., ann) 으로 표기합니다. (아래의 예시 참조).  그리고 적절한 기저변환을 통하여 주어진 행렬을 대각행렬로 변환하는 것을 대각화(diagonolization)이라고 합니다.  대각화를 하면 정말 유용한 특성이 있는데요, n차 정방행렬의 p 제곱을 구하는 것이 정말 쉽다는 점입니다!!! 그냥 대각성분을 p 제곱 해주는 것으로 끝나거든요!!! (아래의 그림 참조).  

 

 

 

 

 

그럼 다음 단계로, 고유값, 고유벡터와 대각화가 무슨 관련이 있는지로 넘어가보겠습니다.

 

지난번 포스팅에서 예로 들었던 2차 정방행렬 A=를 가지고 계를 예를 들어보겠습니다.  정방행렬 A의 고유값 λ = {7, 2} 였으며, λ1 = 7에 대응하는 고유벡터는 (2  3)^T, λ2=2에 대응하는 고유벡터는 (-1  1)^T 였습니다.

 

 

 (* 고유값, 고유벡터 구하기 자세한 내용은 ☞  http://rfriend.tistory.com/182 )

 

 

위의 2차 정방행렬 A의 고유값(eigenvalue), 고유벡터(eigenvector)를 가져다가 고유값, 고유벡터의 정의에 대입한 두 개의 식을 정리하면 아래와 같습니다.  (중간에 보면 식의 양변에 역행렬(inverse matrix)를 곱하는 것이 나오는데요, 혹시 역행렬 잘 모르시면 http://rfriend.tistory.com/142 참고하세요. 행렬식(determinant) = 2*1 - (-1)*3 = 5로서 0이 아니므로 역행렬 존재합니다)

 

제일 아래에 정리된 결과의 형태를 유심히 보시기 바랍니다.

 

 

 

 

 

위에 정리한 식의 제일 아래 식에 설명을 달아보면 아래와 같습니다.  고유값과 고유벡터가 존재하는 정방행렬의 경우는 아래와 같이 분해가 가능하답니다.

 

 

 

 

위와 같이 정방행렬 A를 고유값과 고유벡터를 사용해서 분해를 하면 p 제곱하는 것이 어떻게 진행되는지 예를 들어보겠습니다.

 

 

 

 

위의 마지막의 계산 결과를 보면 재미있지요? ^^

 

계산 해본 김에 위의 2차 정방행렬 A의 3제곱을 계산해보겠습니다.

 

 

 

 

짜잔~ 제일 마지막에 3제곱한 결과를 보면 정말 아름답지 않은가요? ^^!

 

그럼, 문제를 하나 내볼께요.  위의 2차 정방행렬 A를 100 제곱하면 결과가 어떻게 나올까요? 

....

....

...

네, 맞습니다.  짐작하셨겠지만... 아래처럼 나옵니다.   

 

 

 

 

위에서 열심히 예를 들어서 계산을 해봤는데요, 이를 일반화해보자면,

n차 정방행렬(n order square matrix) 의 p제곱은 아래와 같이 쓸 수 있습니다.

 

 

 

 

여기까지 따라 오시느라 수고 많으셨습니다.

위의 고유값(eigenvalue)과 고유벡터(eigenvector)를 이용한 n차 정방행렬의 p제곱의 정리를 이용하면 p가 매우 크더라도 연산량을 줄여서 쉽게 p제곱을 구할 수 있습니다.  이게 참 중요하게, 요긴하게 여기저기서 많이 쓰입니다.

 

 

p차 정방행렬 A는 p개의 고유값(eigenvalue)  과 각 고유값에 대응하는 p개의 고유벡터(eigenvector) 를 가집니다. 이때 아래의 6개의 식은 동치(equivalent) 관계에 있는 명제들입니다. 

 

 

 

 

다음번 포스팅에서는 이번 포스팅에서 소개한 n차 정방행렬의 p제곱하는 방법을 적용한 마르코프 과정(Markov process)에 대해서 알아보겠습니다.

 

이번 포스팅이 도움이 되었다면 아래의 공감 ♡ 꾸욱~ 눌러주세요. ^^

 

Posted by R Friend R_Friend

지난번 포스팅에서는 고유값(eigenvalue)과 고유벡터(eigenvector)의 정의와 기하학적인 의미에 대해서 알아보았습니다.

 

이번 포스팅에서는 고유방정식(eigenvalue equation) 또는 특성방정식(characteristic equation)을 가지고 고유값(eigenvalue), 고유벡터(eigenvector)의 계산 방법에 대해서 소개하도록 하겠습니다.

 

지난번 포스팅에서 사용했던 2차 정방행렬 A = (4, 3   2, 5)^T 를 가지고 계속 이어서 설명하겠습니다.  2차 정방행렬 A에 대해 Ax = λx 를 성분 별로 풀어서 써보면 아래와 같습니다.  이를 행렬로 표기해서 정리를 해보면 선형연립방정식으로 표기할 수 있음을 알 수 있습니다.

 

 

 

 

위에 정리한 (A-λI)x = 0 의 식의 x가 영벡터(zero vector)이 아닌 해를 가지기 위한 필요충분조건은 Cramer 정리에 의해 이 식의 계수행렬(coefficient matrix)의 행렬식(determinant)이 0인 것입니다.  즉, 고유값과 행렬식 간에는 아래의 관계가 성립하게 됩니다.

 

 

 

 

 

위의 A-λI특성행렬(characteristic matrix) 라고 하며, D(λ) 는 행렬 A의 특성행렬식(characteristic determinant) 라고 합니다.  그리고 A-λI = 0특성방정식(characteristic equation) 혹은 고유방정식(eigenvalue equation) 이라고 합니다.

 

n차 정방행렬 A의 고유값은 적어도 하나 이상, 최대 n개의 서로 다른 고유값을 갖게 됩니다.

 

 

그럼 위에서 예로 들었던 행렬 A를 Cramer 정리에 의해 도출된 특성방정식(characteristic equation)에 적용해서 고유값(eigenvalue)를 한번 풀어보겠습니다. 

 

 

 

 

고유값과 고유벡터를 구하는 순서는, 먼저 고유값을 구하고나서, 나중에 Gauss 소거법을 사용하여 고유값에 대응하는 고유벡터를 구합니다. 

 

위에서 행렬 A의 고유값(eigenvalue)를 풀었더니 λ = 7, λ = 2가 나왔는데요, 이제 λ = 7, λ = 2의 고유값에 대응하는 고유벡터(eigenvector)를 풀어보도록 하겠습니다.

 

 

먼저 고유값 λ=7 에 대응하는 고유벡터 x를 풀어보면,

 

 

 

 

다음으로 고유값 λ=2 에 대응하는 고유벡터 x를 풀어보면,

 

 

 

 

자, 이제 다 구했네요.

2차 정방행렬 A에 대한 특성방정식(characteristic equation)을 통해 풀은 고유값(eigenvalue) λ 는 {7, 2} 이며, 이들 고유값에 대응하는 고유벡터(eigenvector)는 [2  3]^T 와 [-1  1]^T 가 되겠습니다.

마지막으로 고유공간(eigenspace)은 아래와 같이 정의합니다.

 

[ 고유공간 (eigenspace) ]

 

 만일 w와 x가 행렬 A의 같은 고유값 λ에 대한 고유벡터인 경우, w + x (단, x≠-w)와 kx (단, k는 임의의 0 아닌 스칼라)도 고유벡터가 된다.  따라서 같은 고유값 λ에 대응하는 고유벡터들은 0 벡터와 함께 하나의 벡터공간을 이루며, 이것을 고유값 λ에 대응하는 고유공간(eigenspace)라고 부른다.

  - 출처 : Erwin Kreyszig, "선형대수와 벡터 미적분학", 범한서적주식회사

 

 

여기까지 손으로 푸는 과정 쫒아오시느라 고생 많으셨습니다.  고유값, 고유벡터를 푸는 방법, 원리를 이해했으니 이제는 R을 가지고 고유값, 고유벡터를 계산하는 함수를 소개하겠습니다.

matrix() 함수로 행렬을 생성하고, eigen() 함수로 고유값, 고유벡터를 구할 수 있습니다.

 

 
> # making square matrix A
> A <- matrix(c(4, 3,   2, 5), nc = 2, byrow = FALSE)
> A
     [,1] [,2]
[1,]    4    2
[2,]    3    5
> 
> # eigenvalue & eigenvector of matrix A
> lambda_A <- eigen(A)
> lambda_A
$values
[1] 7 2

$vectors
           [,1]       [,2]
[1,] -0.5547002 -0.7071068
[2,] -0.8320503  0.7071068

> 
> 
> # indexing of eigenvalue 1
> lambda_A$values[[1]]
[1] 7
> 
> # indexing of eigenvector 1
> lambda_A$vectors[, 1]
[1] -0.5547002 -0.8320503
> 
> 
> # indexing of eigenvalue 2
> lambda_A$values[[2]]
[1] 2
> 
> # indexing of eigenvector 2
> lambda_A$vectors[, 2]
[1] -0.7071068  0.7071068

 

 

 

고유값 7에 대응하는 고유벡터가 손으로 계산했을 때는 [2   3]^T 였는데요,

R로 계산한걸로는 [-0.5547002    -0.8320503]^T 으로 나왔네요.  고유벡터는 구하는 사람(혹은 컴퓨터마다) 상수배만큼 다를 수 있습니다 (위에 손으로 푼 것의 c1, c2 에 적당한 상수가 들어가면 같아짐).  비율은 서로 똑같습니다.

 

고유값 2에 대응하는 고유벡터가 손으로 계산했을 때는 [-1   1]^T 였는데요,

R로 계산한걸로는 [-0.7071068   0.7071068]^T 로 나왔습니다.  역시 비율은 서로 같습니다.

 

 

다음번 포스팅에서는 n차 정방행렬의 대각화(diagonalization)와 p제곱을 구하는 방법을 소개하겠습니다.  그리고 다다음번 포스팅에서는 마르코프 과정(Markov Process)에 대해서 알아보도록 하지요.

 

이번 포스팅이 도움이 되었다면 아래의 공감 ♡ 꾸욱~ 눌러주세요. ^^

 

Posted by R Friend R_Friend

지난번 포스팅에서는 행 사다리꼴(Row echelon form)과 계수(Rank)를 이용해서 선형연립방정식 해의 존재성(existence)과 유일성(uniqueness)을 알아보는 방법을 소개하였습니다.

 

이번 포스팅에서는 고유값(eigenvalue)과 고유벡터(eigenvector)에 대해서 알아보겠습니다.

 

필자는 경영학을 전공했었는데요, 통계학과의 다변량통계분석 과목을 (겁도 없이 무대뽀로...) 수강했었습니다.  차원축소 기법 중 하나인 요인분석(factor analysis) 시간에 고유값(eigenvalue)과 고유벡터(eigenvector)를 처음 접했었는데요, 그땐 당초에 무슨 소리인지 교수님의 강의를 하나도 못 알아들었습니다.  지금 보면 그냥 이해가 되고 어려워 보이지 않는데요, 그땐 참 소련말처럼 들리고 어렵더라고요. ^^;;; 

 

요즘 회사에서 제조업쪽에 분석 사례 관련 논문을 자주 찾아보는 편인데요, 왠만한 논문에는 고유값(eigenvalue)과 고육벡터(eigenvector) 표기를 마주치곤 합니다.  그만큼 아주 중요하고 많이 쓰이는 개념입니다.

 

다소 단순하게 보이는 벡터 방정식 "정방행렬 A에 대해 Ax = λx "로부터 놀랄만큼 많은 관련 이론과 풍부한 응용예가 유도된다. 실제로 공학, 물리학, 기하학, 수치해석, 이론수학, 생물학, 환경과학, 도시계획, 경제학, 심리학 등 많은 분야에서 고유값 문제가 나타난다

 

- Erwin Keryszig, 선형대수와 벡터 미적분학, 범함서적주식회사

 

자, 그럼 고유값(eigenvalue)과 고유벡터(eigenvector)의 정의에 대해서 부터 시작하시지요.

 

 

 

정방행렬 A에 대하여 Ax = λx  (상수 λ) 가 성립하는 0이 아닌 벡터 x가 존재할 때
상수 λ 를 행렬 A의 고유값 (eigenvalue), x 를 이에 대응하는 고유벡터 (eigenvector) 라고 합니다.  

 

 

 

 

행렬 A에 대한 고유값(eigenvalue) λ ("Lambda", "람다" 라고 읽음)은 특성값(characteristic value), 또는 잠정근(latent root) 라고도 합니다. (eigen은 '고유' 또는 '특성'을 뜻하는 독일어임. '아이겐'이라고 읽음)

 

Ax = λx 를 만족하는 0이 아닌 고유벡터(eigenvector) x 는 특성벡터(characteristic vector) 라고도 합니다.

 

그리고 행렬 A의 모든 고유값의 집합을 A의 스펙트럼(spectrum) 이라고 하며, 최대로 서로 다른 n개의 고유값을 가질 수 있습니다.  A의 고유값의 절대값의 최대값을 A의 스펙트럼 반경 (spectrum radius)라고 합니다.

 

이때 행렬 A는 n*n 정방행렬(square matrix) 이라는 점 다시 한번 상기하시구요, Ax = λx를 만족하는 모든 상수 λ와 0이 아닌 모든 벡터 x (1개 ~ 최대 n 개)를 찾는 것이 우리가 할 일입니다.  

 

 

좀더 쉽게 이해할 수 있도록 고유값(eigenvalue)과 고유벡터(eigenvector)가 가지는 의미를 아래의 예를 들어서 설명하겠습니다.

 

 

 정방행렬 A

(square matrix A)

 

  고유값 λ

(eigenvalue)

λ = 7 

λ = 2 

 고유벡터 x

(eigenvector)

 

 

 

 

 

 

 

고유값(eigenvalue)와 고유벡터(eigenvector)의 기하학적인 의미를 살펴보면, 벡터 x에 대해 n차 정방행렬 A를 곱하는 결과와 상수 λ를 곱하는 결과가 같다는 의미입니다. 즉, 행렬의 곱의 결과가 원래 벡터와 "방향"은 같고, "배율"만 상수 λ 만큼만 비례해서 변했다는 의미입니다.  이게 고유값(eigenvalue)과 고유벡터(eigenvector)가 무척 중요한 이유입니다.  행렬과 벡터 곱을 했더니 "방향"도 바뀌고 "크기(배율)"도 모두 바뀌는 것과, "방향"은 그대로 있고 "크기(배율)"만 바뀌는 것 중에 뭐가 연산이 간단할 지 생각해보시면 됩니다.  

아래의 2차 정방행렬 A=(4,3   2, 5) 에 의해 대응되는 선형사상 f에 의한 c1(2, 3)+c2(-1, 1) 의 상을 가지고 기하학적인 의미의 예를 들어보겠습니다. 

 

 

 

 

위의 결과를 좌표에 나타내보면 아래와 같습니다.  좀 복잡해보이긴 하는데요, 화살표의 eigenvector (2, 3), (-1, 1)의 R^2 공간이 정방행렬 A=(4, 3   2, 5)에 의해서 오른쪽 R^2 공간으로 변환될 때 "방향"은 똑같고, "배율"만 eigenvalue λ 배수 (7배, 2배) 만큼 변했다는 것을 알 수 있습니다.  

 

왼쪽의 A, B, C, D, E 의 좌표점들이 오른쪽에는 A', B', C', D', E' 로 정방행렬 A=(4, 3   2, 5)에 의해 변환되었습니다. 계산 예시로 B (2, 3) -> B' (14, 21)와 D (-1, 1) -> D' (-2, 2) 만 아래 그래프 위에 겹쳐서 제시해보았습니다.

 

 

 

 

 

좀더 직관적으로 이해할 수 있도록 아래에 사람 얼굴()이 어떻게 변환되는지 겹쳐서 제시해보았습니다.  eigenvector의 방향은 똑같고 (same direction), 크기만 eigenvalue 만큼씩 배수(magnification)가 되었습니다.

 

 

 

이제 고유값(eigenvalue)와 고유벡터(eigenvector)의 정의와 기하학적인 의미에 대해서는 이해가 좀 되시는지요?

 

행렬식이랑 좌표에 그림 그리려니 시간이 어마무시 걸리네요. ㅜ_ㅜ  

아... 봄날의 토요일 오후가 그냥 가버렸어요... 흑...

 

다음번 포스팅에서는 고유값(eigenvalue)과 고유벡터(eigenvector)를 구하는 방법에 대해서 소개하도록 하겠습니다.

 

이번 포스팅이 도움이 되었다면 아래의 공감 ♡ 꾸욱~ 눌러주세요. ^^

 

Posted by R Friend R_Friend

지난번 포스팅에서는 계수(rank)의 개념에 대하여 알아보았습니다.

 

이번 포스팅에서는 행 사다리꼴(Row echelon form)과 계수(Rank)를 이용해서 선형연립방정식 해의 존재성(existence)과 유일성(uniqueness)을 알아보는 방법을 소개하겠습니다.

 

이전의 가우스 소거법이나 행렬식(determinant), 계수(rank) 등에 대해서 포스팅했던 내용과 일부 겹치기도 하는데요, 해의 존재성과 유일성이라는 관점에서 다시 한번 정리를 해보겠습니다.

 

 

먼저 n개의 x1, ... xn변수와 m개의 연립방정식이 있다고 했을 때(아래 그림의 왼쪽 상단), 이를 행렬로 표기하는 방법은 아래 그림의 우측 상단과 같습니다. 

 

 

  

 

 

 

a11, ..., amn은 이 연립방정식의 계수(coefficient)라고 합니다 (Rank도 계수라고 해서 좀 헷갈리는 부분이 있습니다...)  이들 계수(coefficient)로만 이루어진 행렬을 위 선형연립방정식의 계수행렬 (coefficient matrix)라고 하며, 위의 그림의 왼쪽 하단에 있는 행렬이 되겠습니다.

 

이 계수행렬의 우측에 연립방정식의 우변의 b1, ..., bm 을 추가한 행렬을 위 연립방정식의 첨가행렬(augmented matrix)라고 하며, 위 그림의 우측 하단에 있는 행렬이 되겠습니다.

 

 

계수행렬 또는 첨가행렬에 대해서 아래의 기본행연산(elementary row operations)을 통해서 연립방정식을 푸는 과정으로 가우스 소거법(Gauss elimination), 가우스-조르단 소거법(Gauss-Jordan elimination)이 있는데요, 마지막에 정리된 후의 모습은 아래와 같은 행 사다리꼴(Row echelon form)이 됩니다.  

 

 

행렬에 대한 기본 행 연산 (elementary row operations)

 

  1. 두 행을 교환하는 것

  2. 한 행의 상수배를 다른 행에 더하는 것

  3. 한 행에 0이 아닌 상수를 곱하는 것

 

 

 

 

 

 

가우스 소거법의 행 사다리꼴을 기준으로 설명을 하자면, 모든 성분이 0인 행이 제일 아래쪽에 오도록 기본 행 연산을 수행합니다. 그 외의 행에서는 0이 왼쪽에 오고 0이 아닌 성분은 오른쪽에 오도록 정리를 기본 행 연산을 하게 됩니다.  말로 설명하려니 쉽지가 않은 데요, 위의 그림의 행 사다리꼴의 0인 부분에 색깔을 칠해 두었으니 그림을 보는 것이 이해가 더 쉽겠네요. (가우스-조르단 소거법의 기약행 사다리꼴은 일단 패스...)

 

 

아래의 그림은 행 사다리꼴(Row echelon form)의 첨가행렬(augmented matrix)을 나타낸 것입니다.

 

 

 

가우스 소거법의 마지막에 얻을 수 있는 위의 행 사다리꼴의 첨가행렬 C를 가지고 선형연립방정식의 행에 대한 매우 중요한 아래와 같은 정보를 쉽게 직관적으로 얻을 수 있습니다.

 

 

1) 행렬 C의 모든 성분이 0이 아닌 행의 개수는 r이 바로 행렬 C의 계수(Rank) 이며, 동치 행렬 A의 계수(Rank) 이기도 합니다.  n개의 미지수 x1, ..., xn 에 관한 m개의 선형연립방정식이 모순이 없기 위한 (consistent) 필요충분조건은 계수행렬 A와 첨가행렬 C가 같은 계수를 갖는 것입니다.

 

 

2) 행렬 C가 모든 성분이 0인 행을 적어도 1개 이상 가지고 있어서 r < m 이고 & dr+1, ..., dm 중 적어도 한 개 이상이 0이 아닐 경우 해가 없습니다.  모든 계수(coefficient)의 성분이 0인 행의 경우 x 값에 어떠한 실수가 들어가도 0이 나올 수 밖에 없는데요, 우변의 d 는 0이 아닌 실수라고 하면 모순(inconsistent)이 되기 때문입니다.

 

 

3) 행렬 C가 모든 성분이 0인 행을 적어도 1개 이상 가지고 있어서 r < m 이거나 r = m 이더라도 dr+1, ..., dm 이 모두 0이라면 해가 존재(existence)합니다.

 

 

4) r = n 이고 모순이 없는 경우 해가 유일(unique solution)하게 존재합니다.

 

 

5) 행렬 A와 C가 같은 계수 r을 가지고 r < n 이면 무수히 많은 해(infinitely many solutions)가 존재하게 됩니다.  r < n 이므로 임의의 값을 할당할 수 있는 n-r 개의 미지수로 나머지 r개의 미지수를 표현함으로써 모든 해를 얻을 수 있습니다.

 

 

다음번 포스팅에서는 행렬의 고유값(eigenvalue)과 고유벡터(eigenvector)에 대해서 알아보겠습니다.

 

이번 포스팅이 도움이 되었다면 아래의 공감 ♡ 꾸욱~ 눌러주세요. ^^

 

 

 

 

 

 

 

Posted by R Friend R_Friend

지난 포스팅에서는 사상 f의 핵(kernel), 상공간(image), 차원정리(dimension theorem)에 대해서 알아보았습니다.

 

이번 포스팅에서는 행렬의 계수(rank)에 대해서 소개하겠습니다.

  

계수(rank)는 선형연립방정식의 해의 존재성과 유일성을 파악하는데 매우 매우 매우 중요한 개념입니다.

 

계수를 이해하려면 선형독립을 먼저 알아야 하므로, 이전에 한번 소개드렸던 선형독립에 대해서 복습하는 차원에서 아주 간략히 살펴보고 바로 계수(rank)로 넘어가겠습니다.

 

[선형독립 (linearly independent), 1차독립] 

 

같은 수의 성분을 가진 n개의 벡터 a(1), ..., a(n) 에 대하여, 이들 벡터의 1차결합(linear combination) 인 

 

  (1)      c1a(1) + c2a(2) + ... + cna(n) = 0     (단, c1, ..., cm 은 임의의 실수)

 

의 선형연립방정식을 만족하는 해가 유일하게 {c1, ..., cn 이 모두 0} 만 존재하는 경우 벡터 a(1), ..., a(n)은 선형독립 혹은 1차독립이라고 합니다. 반면에 {c1, ..., cn} 중에서 1개라도 0이 아닌 경우에 벡터 a(1), ..., a(n)은 선형종속 혹은 1차종속이라고 합니다.

 

이전에 선형독립 혹은 1차독립(linearly independent)에 대한 이해가 필요한데요, 선형독립에 대한 자세한 설명은 아래 링크를 참고하시기 바랍니다.

   ☞ 선형독립(linear independence) :  http://rfriend.tistory.com/163

 

 

선형독립과 선형종속 개념이 중요한 이유를 살펴보시죠.

행렬 A가 선형종속(linearly dependent) 이면 벡터 a(1), ..., a(n) 중에서 최소 1개 이상을 다른 벡터들의 1차 결합으로 나타낼 수 있다. 예를 들어 만일 식 (1)이 성립하고 c1 ≠ 0 이면, 벡터 a(1) 을

 

        a(1) = k2a(2) + ... + kna(n)     (여기서 kj = -cj/c1)

와 같이 나타낼 수 있다.

 

그것은 1차종속인 벡터집합에서, 다른 벡터들의 1차 결합으로 표현되는 벡터들을 소거함으로써, 최종적으로 각 벡터들이 나머지 다른 벡터의 1차결합으로는 절대 표현되지 않는, 즉 1차독립인 부분집합을 얻을 수 있다는 것이다. 이 집합이 결국 우리가 필요로 하는 가장 작은 벡터 집합일 것이다.

  (* 출처 : 선형대수와 벡터 미적분학, Erwin Kreyszig 저, 범한서적주식회사)

 

 

 

문제는 1차독립인지 1차종속인지 여부를 암산을 가지고 판별하는 것이 그리 쉽지 않다는 점입니다.  그리고 계수(rank)는 바로 이 지점에서 1차독립, 선형독립과 연결이 됩니다.

 

자, 그럼 이제 계수(rank)로 넘어가 볼까요?

 

 

 

[ 계수 (rank) 정의 ]

 

선형대수에서 어떤 행렬 A의 열계수(列階數, column rank)는 선형독립인 열 벡터의 최대 개수입니다. 마찬가지로 행계수(行階數, row rank)는 선형독립인 행 벡터의 최대 개수입니다.

 

행렬에서 열계수와 행계수는 항상 같으며, 이를 계수 정리(rank theorem)라고 합니다.

 

이에 따라 일반적으로 이 둘을 구분없이 A의 계수(階數, rank)라고 부릅니다.

행렬 A의 계수는 rk(A), 혹은 rank A로 표기합니다.

 

In linear algebra, the rank of a matrix A is the dimension of the vector space generated (or spanned) by its columns. This is the same as the dimension of the space spanned by its rows. It is a measure of the "nondegenerateness" of the system of linear equations and linear transformation encoded by A. There are multiple equivalent definitions of rank. A matrix's rank is one of its most fundamental characteristics.

The rank is commonly denoted rank(A) or rk(A); sometimes the parentheses are unwritten, as in rank A

   * 출처: wikipedia

 

 

 

 

 

 

계수는 이전에 포스팅했던 사상 f의 핵(Ker f), 상공간(Im f) 개념으로도 정의가 가능한데요,

R^m의 부분공간인 Im f의 차원(dimension)을 m*n 행렬의 계수(rank)라고 정의할 수도 있습니다.

(이건 이해하기가 더 어렵죠? ^^')

 

 

좀더 직관적으로 이해할 수 있도록 아래에 2가지 예를 들어보겠습니다.

 

[예 1]

 

 

 

[예 2]

 

 

 

행렬의 계수를 계산하는 좀 더 간단한 방법이 있습니다. 행렬에 대하여 기본 행연산을 시행하여 행 사다리꼴(row echelon form)으로 변환시켜 놓으면 그 행렬의 계수(rank)를 쉽게 알 수 있습니다. 행 사다리꼴 행렬의 0 아닌 행의 개수를 세면 되기 때문입니다.

 

아래의 행렬A를 행렬에 대한 기본 행연산(elementary row operation, 두 행을 교환하는 것, 한 행의 상수배를 다른 행에 더하는 것, 한 행에 0이 아닌 상수를 곱하는 것)에 의해 행 사다리꼴로 변환해보겠습니다.

 

 

 

 

R로 행렬의 계수(rank)를 구할 때는 rank() 함수를 사용하면 안되며, Matrix 패키지의 rankMatrix() 함수를 사용해야 합니다. R의 rank() 함수를 쓰면 크기 순서대로 랭킹이 나옵니다. 행렬의 계수(rank) 개념과는 거리가 한참 멉니다. 위의 예를 가지고 R의 rank() 함수와 rankMatrix() 함수를 사용해보겠습니다.

 

 

> # making a matrix A > A <- matrix( + c(2, 1, 0, 4, + 4, 3, -1, 12, + 0, -3, 3, -12), + nrow = 3, + ncol = 4, + byrow = TRUE) > > A [,1] [,2] [,3] [,4] [1,] 2 1 0 4 [2,] 4 3 -1 12 [3,] 0 -3 3 -12 > > # rank() : sequence, order, <= be cautious!!! it's not rank of Matrix A > rank(A) [1] 7.0 10.5 4.5 6.0 8.5 2.0 4.5 3.0 8.5 10.5 12.0 1.0 > > # rankMarix() : rank of matrix A, <= this is wha we are looking for > library(Matrix) > rankMatrix(A) [1] 2 attr(,"method") [1] "tolNorm2" attr(,"useGrad") [1] FALSE attr(,"tol") [1] 8.881784e-16

 

 

 

 

 

행렬의 계수는 아래의 4가지 정리를 따릅니다. (증명은 생략)

 

 

정리 1)  행동치의 행렬 (Row-Equivalent Matrices)

 

 : 행동치인 행렬들은 같은 계수(rank)를 가진다.

 

행동치(Row-Equivalent)란, 행렬 A2에 기본 행연산을 유한번 수행하여 행렬 A1을 얻을 수 있다면 행렬 A1과 A2는 행동치라고 합니다.

 

 

정리 2)  1차종속과 1차독립

 

 : 각각 n개의 성분을 갖는 p개의 벡터들은 이 벡터들을 행벡터로 취하여 구성된 행렬의 계수가 p이면 1차독립이고, 만약 그 계수가 p 보다 작으면 그들은 1차종속이다.

 

 

정리 3)  열벡터에 의한 계수

 

 : 행렬 A의 계수 r은 A의 1차독립인 열벡터의 최대수와 같다. 그러므로 A와 A^T 는 같은 계수를 가진다.

 

 

 

정리 4)  벡터의 1차종속

 

 : n개의 성분을 갖는 벡터가 p개 있고, n < p 라면 이들 벡터는 항상 1차종속이다.

 

* reference : Erwin Kreyszig, 선형대수와 벡터 미적분학, 범한서적주식회사

 

 

 

행렬식 det()와 계수(rank)와는 아래의 관계가 있습니다.

 

 

참고로, 역행렬이 존재하는지 여부를 확인하는 방법으로 행렬식(determinant, 줄여서 det)이라는 지표를 사용하는데요, 이 행렬식이 '0'이 아니면 역행렬이 존재하고, 이 행렬식이 '0'이면 역행렬이 존재하지 않습니다. (행렬식 공식 포스팅 참고 ☞ http://rfriend.tistory.com/142 )

 

 

다음 포스팅에서는 행렬의 계수(rank) 개념을 이용해서 선형연립방정식 해의 존재성, 유일성, 해집합의 일반적인 구조에 대한 정보를 구할 수 있는 방법을 알아보겠습니다.

 

이번 포스팅이 도움이 되었다면 아래의 공감 ♡ 꾸욱~ 눌러주세요. ^^

 

 

Posted by R Friend R_Friend

지난번 포스팅에서는 선형사상(linear map) 또는 다른 말로 선형변형(linear transformation)에 대해서 알아보았습니다.

 

간략히 복기해보자면, 두 벡터공간 V와 W 사이의 선형사상 f : V -> W 에 에 대하여, 선형사상의 상(image)으로 만들어진 집합 f(V) = {f(v) | v ∈ V }는 W의 부분집합이며, f(V)는 W의 부분공간이 됩니다.

 

이번 포스팅에서는 사상 f의 핵(kernel), 사상 f의 상공간(image), 그리고 핵과 상공간의 차원의 관계에 대한 차원정리(dimension theorem)에 대해서 소개하겠습니다.

 

 

  • 사상 f의 핵 (核, kernel), 『Ker f

f를 m*n 행렬에 의해 R^n에서 R^m으로의 선형사상이라고 했을 때, 상(像, image)이 제로벡터(zero vector)가 되는 원소의 집합을 '사상 f의 핵(核, kernel)'이라고 하며, 『Ker f』 라고 표기합니다. 핵을 영공간(零空間, null space)이라고도 합니다.

 

ker f = { v ∈ V | f(v) = 0 } 

 

 

 

 

 

  • 사상 f의 상 (像, image), Im f

유한 차원 벡터공간 V에서 정의되는 선형사상 f : V -> V 에 대해, 사상 f가 모든 원소를 자기 자신으로 보낼 때 사상 f의 상(像, image)라고 하며, 『Im f 로 표기합니다.

 

Im f = { f(v) | v ∈ V } 

 

 

 

 

위의 핵과 상의 정의를 보고서 잘 이해가 안가는 분은 아래의 핵 Ker f와 상 Im f 의 관계를 Diagram 을 보면 좀더 쉽게 이해가 갈 거 같습니다.  

 

 

 

 

  • 차원정리 (dimension theorem)

Ker f 는 R^n 의 부분공간이며, Im f 는 R^m 의 부분공간일 때, dim(Ker f)와 dim(Im f) 사이에는 아래의 관계가 성립합니다. 

 

   dim(V) = dim(Ker f) + dim(Im f) 

 

위의 다이어그램을 보면 dim(V) = n, dim(Ker f) = k, dim(In f) = (n - k) 이므로, 이를 차원정리에 대입해보면 아래와 같습니다.

 

  dim(V) =  dim(Ker f) + dim(Im f)

         n =             k +     (n-k)  =  n

 

이 차원정리를 이용하면 dim(Ker f) 또는 dim(Im f) 중에서 하나를 알면 나머지 하나를 계산할 수 있습니다.

 

 

다음번 포스팅에서는 진짜로 진짜로 중요한 계수(RANK)를 알아보겠습니다.

 

이번 포스팅이 도움이 되었다면 아래의 공감 ♡ 꾸욱~ 눌러주세요. ^^

 

 

Posted by R Friend R_Friend

지난번 포스팅에서는 벡터공간(vector space), 벡터 부분공간(vector subspace), 생성공간(span), 차원(dimension)에 대해서 알아보았습니다.

 

이번 포스팅에서는 선형사상(linear map)에 대해서 소개하겠습니다.

선형사상(linear map)은 두 벡터공간 사이에 정의되는 사상(베낄 사 寫 형상 상 像, map) 가운데 벡터공간의 성질을 보존하는, 즉 선형성을 갖는 함수를 말합니다. 선형변환(linear transform) 이라고도 합니다.

 

두 벡터공간 V와 W에 대하여 선형사상 f : V -> W 라고 하면, 아래의 두가지 조건(벡터의 합, 스칼라 곱 조건)을 만족하는 사상입니다.

 

[선형성(linearity) 조건] 

(1) 벡터의 합 조건 : f(v1 + v2) = f(v1) + f(v2)

(2) 스칼라 곱 조건 : f(cv) = cf(v), 단 c는 임의의 실수

 

 

 

 

사상 f가 R^n에서 R^m으로의 선형사상인 경우에, f를 m*n 행렬에 의해 정해지는 R^n에서 R^m으로의 선형사상이라고 합니다.

 

 

 

 

벡터공간 R^n과 R^m 사이의 모든 선형사상(linear map)은 행렬(matrix)을 이용해서 나타낼 수 있으며, 또 행렬은 선형일차연립방정식(system of linear equations)으로 나타낼 수 있습니다. 유한차원 벡터공간 사이의 선형 연산을 연구하고 싶다면, 행렬을 보면 된다는 뜻입니다. 

 

선형일차연립방정식 - 행렬 - 선형사상의 관계를 아래의 3개의 x변수와 2개의 y변수를 가지는 선형일차연립방정식, 2*3 행렬, R^3에서 R^2로의 선형사상 f 의 예를 들어보겠습니다.

 

 

 

 

 

 

m*n 행렬에 의해 R^n에서 R^m 으로의 선형사상의 간단한 몇 가지 경우를 나타내보면 아래와 같습니다.

m*n 행렬의 m, n 순서와 R^n에서 R^m으로의 선형사상의 n, m 순서에 유의하시기 바랍니다.

 

 

 

 

다음번 포스팅에서는 핵(kernel), 상공간(image), 차원정리(Dimension Theorem)에 대해서 알아보겠습니다.

 

이번 포스팅이 도움이 되었다면 아래의 공감 ♡ 꾸욱~ 눌러주세요. ^^

 

 

 

 

Posted by R Friend R_Friend

지난번 포스팅에서 선형독립(linearly independent)과 선형종속(linearly dependent), 기저(base, basis)에 대해서 알아보았습니다

 

이번 포스팅에서는 벡터공간(vector space), 벡터 부분공간(vector subspace), 생성공간(span, space spanned by), 차원(dimension)에 대해서 소개하겠습니다. 이들은 선형대수를 공부하는데 있어서 기본개념이 되며, 기저와 차원을 이해하기 위해서는 부분공간을 알고 있어야 합니다.

 

기계학습에서도 벡터공간에 대한 개념이 나오므로 공부해놓으면 좋겠지요. 가령, 기계학습 공부하다보면 SVM(Support Vector Machine)에서 최대 마진 초평면(MMH, Maximum Margin Hyperplane) 이라고 해서 두 범주를 최대로 나누어주는 평면(Hyperplane)을 찾게 되는데요, 선형대수와 최적화에 대해서 잘 알지 못하면 알고리즘에 대해 깊이 있게 이해하기가 힘듭니다.

 

그럼 순서대로 설명을 해보겠습니다.

  • 벡터공간(vector space)

같은 수의 성분을 가지는 벡터들로 이루어진 공집합이 아닌 집합 V가 있을 때,

- V에 속하는 임의의 두 벡터 ab의 일차결합이 αa + βb (α, β 는 임의의 실수)가 또한 V에 속하고

- 벡터에 대한 덧셈과 스칼라곱이 아래의 8가지 벡터의 합과 스칼라곱에 대한 연산법칙을 만족하면 집합 V를 벡터공간(vector space) 또는 선형공간(linear space)이라고 하며, 그 원소를 벡터(vector)라고 합니다.

 

 벡터의 합에 대해

   (1) abba   : 교환(commutative)법칙

   (2) (a + b) + ca + (b + c)   : 결합(associative) 법칙

   (3) a + 0 = a : 항등원

   (4) a + (-a) = 0 : 역원

 

  스칼라곱에 대해

   (5) c(a + b) = ca + cb : 분배법칙

   (6) (c + k)a = ca + ka : 분배법칙

   (7) c(ka) = (ck)a

   (8) 1a = a 

 

 

"벡터는 좌표축과 무관한 개념입니다. 벡터의 "방향"을 놓고 보면, 이 우주에서 유일한 절대 좌표가 존재하지 않는 한 방향이 무엇인지 정의하기가 쉽지 않습니다. 반면에, 두 벡터의 방향이 같다는 것은 한 벡터의 길이를 적당히 늘여 다른 벡터와 일치하게 만들 수 있는 것으로 간단히 정의할 수 있습니다. 이런 점에서 벡터를 실수배하는 것은 벡터의 크기와 방향을 추상화하는데 있어 중요한 개념입니다. 벡터를 추상화하는데 있어 (1) 두 벡터의 합, (2) 벡터의 실수배, 이 두가지 연산이 가장 중요합니다."

(출처 : "8일간의 선형대수학", 박부성 지음, 경문사)

 

이게 왜 중요한지, 무슨 의미가 있는지 의아하실 수도 있는데요, 아래 벡터와 벡터공간에 대한 역사에 대한 인용글을 한번 보시지요.

 

수학에서 방향과 크기를 가진 양으로서 벡터를 다루게 된 것은 복소수에 대한 연구에서 비롯되었다. 복소수를 2차원 공간의 한 점으로 생각할 수 있다는 아이디어는 노르웨이의 베셀(Wessel)에서 비롯되어, 가우스를 비롯한 수많은 수학자들에 의해 크게 발전하였다. 이후 복소수를 확장하여, 3차원 공간의 한 점을 나타내는 새로운 수체계인 사원수(quaternion)를 구성하는 데 성공한 수학자는 아일랜드이 해밀턴(Hamilton) 이었다. 이후 그라스만(Grassmann), 페아노(Peano) 등에 의해 추상적인 벡터공간(vector space)의 개념이 도입되었다.

... 중략 ...

이것은 벡터를 구체적으로 정의한 다음 그 모임으로 벡터공간을 정의하는 보통의 관점을 뒤집은 것이다. 어떤 대상을 직접 정의하는 대신, 그 대상에 대해 성립해야 하는 연산을 통하여 거꾸로 대상을 정의하는 것은 혁명적인 관점 전환이라 할 수 있다. 한편 이 정의는 벡터의 크기를 정의하지 않는다는 점에서 "크기와 방향을 가진 양"이라는 고전적 의미의 벡터를 더 추상화한 것으로 생각할 수 있다

 

    - 출처 : "8일간의 선형대수학", 박부성 지음, 경문사

 

선형대수학이 이해하기 어려운 이유 중의 하나가 '추상화'된 정도가 심한 학문이기 때문일텐데요, 그게 수학의 역사에서는 혁명적인 관점의 전환이라고도 하는군요. 

 

 

  • 벡터 부분공간(vector subspace)

 벡터공간 V의 공집합이 아닌 부분집합 W가 벡터공간 구조를 가질 때, 즉 부분집합 W가 벡터공간 V에서 정의된 (1) 덧셈 연산과 (2) 스칼라곱 연산을 만족할 때, 그 부분집합 W를 벡터 부분공간(vector subspace)이라고 합니다.

 

좀 어렵지요? ^^' 한번더 풀어서 설명하자면 이렇습니다.

 

 

 

위에서 벡터공간(vector space) V의 부분집합 W가 위에서 설명한 (1) 덧셈 조건, (2) 스칼라배 조건을 모두 만족할 때 W를 부분공간(subspace)라고 했는데요, 이를 벤 다이어그램(venn diagram)으로 나타내보면 아래와 같습니다.

 

 

 

 

부분공간은 '원점을 지나는 직선'이나 '원점을 지나는 평면'(zero vector를 포함)인데요, 좀더 쉽게 설명하기 위해서 부분공간인 경우의 예를 들어보겠습니다. 아래 예는 '원점을 지나는 평면'인 부분공간 예가 되겠습니다.

 

 

 

 

좀더 확실한 이해를 돕기 위해 부분공간이 아닌 경우를 아래에 예로 들어보겠습니다.  부분공간의 2가지 조건이었던 (1) 덧셈 조건, (2) 스칼라곱 조건을 만족하지 않으면 부분공간이라고 할 수 없겠지요?  아래 예를 참고하시기 바랍니다.

 

 

 

 

  • 생성공간(span), 생성된 부분공간(space spanned by)

 성분의 수가 같은 벡터들 a(1), ..., a(n)이 주어졌다고 하고, 이들의 1차결합으로 표현되는 모든 벡터들의 집합을 이들 벡터들의 생성된 부분공간(space spanned by)이라고 합니다. 생성공간(span)은 그 자체로 벡터공간이 되며, 만일 주어진 벡터들 a(1), ..., a(n)이 1차독립이라면, 이 벡터들은 해당 생성공간의 기저가 됩니다.

 

무슨 말이가 어렵죠? ^^'

 

위의 a(1), ..., a(n) 벡터를 풀어서 설명해보면 아래와 같습니다.

 

 

 

 

이걸 예를 들어서 한번 더 풀어보겠습니다.  아래의 x1x2 평면(plane)은 vector(3, 0, 0)과 vector(0, 2, 0) 에 의해 생성된 R^3의 부분공간 (space spanned by (3,0,0), (0,2,0)) 이 되겠습니다. 당연히 아래 생성공간은 벡터공간이며, vector(3,0,0)과 vector(0,2,0)은 선형독립(1차 독립)이므로 이 두 벡터의 집합은 벡터공간의 기저(base)가 되겠습니다.

 

 

위의 예의 생성된 공간(span)은 기저의 원소(벡터)의 개수가 2개이므로 2차원(2 dimension)의 부분공간(subspace)이 된답니다.  차원의 개념은 아래 설명을 참고하세요.

 

 

 

  • 차원(dimension)

벡터공간 V에 속한 1차독립 벡터들의 최대수를 V의 차원(dimension)이라 부르고, dim V로 표기합니다. 여기서 벡터공간의 차원은 유한(finite)하다고 가정합니다.

 

W가 R^m의 부분공간이고, 벡터 a(1), a(2), ..., a(n) 이 W의 선형독립 원소라고 할 때, 기저의 원소이 개수를 부분공간 W의 차원이라고 합니다.  이를 좀더 쉽게 풀어서 쓰면 아래와 같습니다.

 

 

 

앞으로 선형사상을 공부하게 되면 n 차원의 상에 m*n 행렬을 곱해서 m차원의 상으로 바꾸는게 나옵니다. 예를 들면, 2차원 영화를 3차원 3D영화로 바꾼다거나, 3차원 3D영화를 2차원 2D영화로 영상을 바꿀 때 선형대수가 쓰인답니다. 물리학자들이 말하는 초끈이론에서는 11차원속에서 진동하는 미세한 에너지끈을 연구를 한다는것을 들어보신분도 있을텐데요, 3차원까지는 우리가 상상을 해도 4차원 이상이 되면 '도대체 4차원, 5차원, 6차원....11차원이 뭐지?'라고 갸우뚱할 분이 많을 것 같습니다. 

 

이세돌과 대국을 펼쳤던 알파고는 "19 x 19 바둑판의 각 칸마다 48차원의 특징점들을 적용하여 총 19x19x48=17328차원의 거대한 벡터를 입력값으로 사용하였는데, 이는 마치 이미지와 같은 고차원의 상태공간으로 볼 수 있다"(핸드폰 메모장에 적어놨던건데요, 출처 기억 못함... -_-;)고 하는군요. 

 

암튼 수학자들이 정의하는 차원은 위와 같습니다. m차원의 R^m 벡터공간의 부분집합 W의 원소가 n개 이면 W의 차원은 n차원이 된다. 헷갈리고 이해가 안된다면 위의 설명 한번 더 보시구요. ^^'

 

 

R 의 matrix() 함수를 사용해서 m*n 행렬(matrix)를 만드는 방법과, dim() 함수를 사용해서 차원(dimension)을 알아보는 방법은 아래와 같습니다.

 

 
> A <- matrix( 
+      c(1:12), # the data elements 
+      nrow=3,              # number of rows 
+      ncol=4,              # number of columns 
+      byrow = TRUE)        # fill matrix by rows
> A
     [,1] [,2] [,3] [,4]
[1,]    1    2    3    4
[2,]    5    6    7    8
[3,]    9   10   11   12
> 
> dim(A)
[1] 3 4

 

 

 

다음 포스팅에서는 선형사상에 대해 알아보고, 그 다음으로 핵(kernel, Ker f), 상공간(Image, Im f), 차원정리(dimension theorem), 계수(rank)에 대해서 차례로 알아보겠습니다.

 

이번 포스팅이 도움이 되었다면 아래의 공감 ♡ 꾸욱~ 눌러주세요. ^^

 

 

Posted by R Friend R_Friend