지난번 포스팅에서는 행과 열의 개수가 같은 정방행렬(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

댓글을 달아 주세요

  1. 임태준 2017.05.08 18:49  댓글주소  수정/삭제  댓글쓰기

    마지막에 U * 시그마* V에서 2번째 컬럼이 왜 -로 된거죠~?

    • R Friend R_Friend 2018.01.04 22:33 신고  댓글주소  수정/삭제

      안녕하세요 임태준 님,
      댓글 달린 줄 모르고 있다가 한참이나 지나서 이제서야 봤네요. 늦어서 죄송합니다. 댓글 남겨주셔서 감사합니다.

      제가 실수로 V를 transpose 하는 걸 빼먹어서 잘못 계산된 것이었습니다.
      (기존 U*Sigma*V => 수정 U*Sigma*t(V) )

      본문에 잘못되었던 부분을 바로 잡아서 수정해놓았습니다.

      참고로, 원래의 행렬 A와 일부 차이가 나는 것은 특이값분해 과정에서 일부 오차에 의한 것입니다.

      댓글 감사합니다.

  2. songhunhwa@naver.com 2018.10.30 18:03  댓글주소  수정/삭제  댓글쓰기

    선생님, 정말 훌륭한 내용의 블로그 올려주셔서 감사드립니다. 선형대수 카테고리의 모든 글을 읽어보았는데, 이전에 손에 잡힐듯 안 잡혔던 내용들이 너무 많아서 고생 했었습니다. 이제야 다 이해가 됩니다. 퍼즐조각이 딱딱 맞아 들어가는 이느낌이 저를 행복하게합니다. 다시한번 감사드립니다.

  3. 나그네 2019.01.25 01:21  댓글주소  수정/삭제  댓글쓰기

    안녕하세요.
    주성분 분석 중 알게 되었습니다.
    덕분에 주성분 분석 C = AB' = UDV' 를 손으로 풀 수 있게 되었습니다.
    감사합니다. 꾸벅
    질문이 있습니다.
    행렬 위에 첨자 m은 각 원소를 m 제곱 하라는 기호인지요?

 지난 포스팅에서는 대각행렬(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

댓글을 달아 주세요

  1. @@ 2018.07.19 17:14  댓글주소  수정/삭제  댓글쓰기

    X2 = X0 * A^2 를 행렬식 계산할때

    (1 0) 이 어떻게 나온 건지 궁금합니다... y값이 없어서 그런건가요?

    • R Friend R_Friend 2018.07.23 22:49 신고  댓글주소  수정/삭제

      제일 처음에 (즉, state 0) 구매한 맥주가 카스 1, 하이트 0 이었으므로 (1, 0)으로 기입한 것입니다. 만약 첫주에 하이트를 구매(즉, 카스 0, 하이트 1) 했던거면 (0, 1) 이 되는거구요.

지난번 포스팅에서는 특성방정식(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

댓글을 달아 주세요

  1. 2019.10.14 03:13  댓글주소  수정/삭제  댓글쓰기

    글이 정말 좋아요 ㅠㅠ 대학 공부하는데 한 줄기 빛입니다... 최고!

  2. 트루 2019.10.29 22:16  댓글주소  수정/삭제  댓글쓰기

    eigen decomposition의 의의가 궁금했는데 저도 많은 도움 얻고 갑니다. 감사해요

지난번 포스팅에서는 고유값(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

댓글을 달아 주세요

  1. 대학생 2016.04.18 21:58  댓글주소  수정/삭제  댓글쓰기

    친절한 설명 정말 감사합니다!!!

  2. 감사 2017.08.10 01:42  댓글주소  수정/삭제  댓글쓰기

    고유벡터 (-1, 1) 인데, ( 1, -1)로도 되지않나요?
    그러면 벡터의 방향이 바뀌어 우측 하부로 증가하는데, 벡터이기 때문에 같은 결과인가요?

    • stat 2018.10.21 11:01  댓글주소  수정/삭제

      eigenvector의 부호가 반대로 바뀌어도 무방합니다. vector space는 vector들의 linear combination으로 만들어지기 때문에 부호를 반대로 표현해도 같은 공간을 span할 수 있습니다.

  3. songhunhwa@naver.com 2018.10.30 16:53  댓글주소  수정/삭제  댓글쓰기

    정말 너무 감사합니다. eigenvalue, eigenvector를 아무리 여러군데서 찾아봐도, 명확히 이해가 안됐는데,, 이제야 확실히 이해가 되네요! 정말 설명이 친절하고 이해하기가 쉽습니다. 머리숙여 감사드립니다.

  4. sansi 2019.09.27 20:40  댓글주소  수정/삭제  댓글쓰기

    선형대수도 모르고 R 공부하다가 친절한 설명으로 이해하게 되었습니다 감사합니다 !

지난번 포스팅에서는 계수(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

댓글을 달아 주세요

  1. 학생 2016.04.04 11:11  댓글주소  수정/삭제  댓글쓰기

    도움이 많이 되었습니다. 정말 감사합니다.

  2. 삼다수 2016.04.19 01:56  댓글주소  수정/삭제  댓글쓰기

    죄송한데 혹시 질문 몇가지 해도될까요..?
    det값이 0이 아니면 rank값이 n인 것인가요?
    그러면 어떤 행렬이 가역적이면 rank값이 n인 건가요?

    감사합니다.

    • R Friend R_Friend 2016.04.19 08:37 신고  댓글주소  수정/삭제

      행렬식(det)이 '0'이 아니면 가역적이고 해가 존재한다는 의미이구요, rank는 1~n(차원) 사이의 어떤 값이겠지요. rank는 사다리꼴행렬로 변환해서 따로 계산해야 합니다

  3. 질문좀 드릴게요... 2016.05.14 11:44  댓글주소  수정/삭제  댓글쓰기

    행렬을 선형변환으로 표현할수 있다고 배웠는데 기억이안나네요...
    원리좀 설명해주실수 있으세요?

지난번 포스팅에서는 선형사상(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

댓글을 달아 주세요

  1. 고맙습니다 2016.03.26 21:04  댓글주소  수정/삭제  댓글쓰기

    너무 잘 보고있어요 감사합니다 ..

  2. Good!! 2016.05.08 16:40  댓글주소  수정/삭제  댓글쓰기

    잘 봤습니다~
    저도 머신러닝에 관심이 있어 다시 수학책을 집어들었습니다.
    궁금한건 선형대수학의 활용 범위인데요,
    머신러닝 알고리즘을 배울 때도 많이 쓰이나봐요?
    지금은 한빛 기초선형대수학 책을 공부중인데... 추천해주실 만한 책이 있으신가요?
    그리고 선형대수학은 '한빛 기초선형대수학' 본 후에 어떤 책을 더 봐야할 지와 그 깊이는 어디까지인지 알고싶습니다. 텐서도 선형대수학 범주에 있는건지...
    답주시면 감사하겠습니다~

    • R Friend R_Friend 2016.05.10 22:18 신고  댓글주소  수정/삭제

      안녕하세요 Good!! 님,

      (1) 선형대수학은 다변량통계분석, 머신러닝, 최적화 등에 두루 사용됩니다. 예를 들면, 다중회귀분석에도 보면 계수를 구하는 알고리즘으로 깊이 들어가면 선형대수, 미적분(편미분) 사용합니다. 주성분분석도 알고리즘 깊이 들어가보면 특이값분해(SVD, Singular Value Decomposition), 편광분해(Spectral Decomposition), 고유값(Eigenvalue), 고유벡터(Eigenvector) 등을 사용합니다. Neural Network/Deep learning 도 선형대수(행렬)이랑 Gradient descent (최적화) 등이 사용되고요. 기본적으로 다변량이면 선형대수가 쓰인다고 보면 될거 같습니다. 저도 머신러닝 알고리즘 좀 깊이 이해하고 싶어서 선형대수 공부하고 있는 중입니다.

      머신러닝 알고리즘을 깊이 있게 이해하려면 선형대수, 확률/통계, 미적분, 최적화/알고리즘, 프로그래밍(R이나 Python 추천)을 기본 base로 알고 있으면 아주 좋을것 같습니다.

      (2) 선형대수는 학교에서 제대로 배운적은 없구요, 그냥 책이랑 Wikipedia, 인터넷으로 공부하고 있습니다. 그런지라 제가 좋은 책을 추천할만큼 많이 알지 못합니다. 죄송합니다. ㅜ_ㅜ 책 추천해주시면 제가 고맙겠습니다. ^^;

      제가 가지고 있는 책은 '선형대수와 벡터 미적분학'(Erwin Kreyszig), '8일간의 선형대수학'(박부성), '만화로 쉽게 배우는 선형대수'(Shin Takahashi) 3권인데요, 젤 처음에 '8일간의 선형대수학'으로 시작했다가 하나도 못 알아 듣고 좌절하고 선형대수 포기할 뻔 했다가 '만화로 쉽게 배우는 선형대수'로 컨셉 이해하고 다시 공부 중입니다. 책은 잘 알아서 고른건 아니구요, 그냥 인터넷서점 가서 검색해보니 선형대수 책이 정말 많아서 뭘 사야할지 몰라서 그냥 목차 보고 대충 산거예요. 좋은 책 있으면 저한테도 추천해주시면 고맙겠습니다.

      (3) '텐서(tensor)'는 '외적(cross product)'이랑 같은 의미이고, 그러므로 선형대수학 범주에 속한다고 볼 수 있겠네요.

  3. Ashtray 2016.12.02 17:51  댓글주소  수정/삭제  댓글쓰기

    안녕하세요! 오랜만에 질문드립니다.
    부분공간이 아닌 예시로 들어주신 것이 맞는지 아닌지 좀 헷갈려서요.
    특히 ≠ 표시해주신 부분이 잘 이해가 안되는데요.

    예를 들면, a1^2 + a2^2=k^2를 만족하는 실수 k가 항상 존재하니까 그냥
    두 벡터의 합이 부분공간에 속하게 되는 것 같은데요..
    제가 뭔가 착각한 것인가요?

  4. Ashtray 2016.12.03 17:18  댓글주소  수정/삭제  댓글쓰기

    저도 만화로 배우는 선형대수 책을 가지고 있어서(미뤄두고 안하고 있던...) 한번 살펴봤는데요.
    책의 167페이지 예시를 옮기시면서 약간 오류가 발생한 것 같습니다.
    책에서는 x성분이 α이고 y성분이 α^2이여서, 그 두 성분간에 y=x^2이라는 관계가 있는 집합이 부분공간인지에 대해 다루고 있습니다.
    즉, (α1, α1^2, 0)과 (α2, α2^2, 0) 두 벡터를 합한 성분이 (α1+α2, α1^2+α2^2, 0)이 되는데 이 벡터는
    애초에 집합에서 정의했던 x^2=y 이라는 관계( (α1+α2)^2 ≠ α1^2+α2^2 )가 성립되지 않기 때문에 부분공간이 아니게 되는 것입니다.
    (물론 α1=α2=0을 제외하구요)

    그런데, 블로그에 옮기신 예시의 집합은 x성분이 a^2이고 y성분은 b이므로 두 성분사이에는 아무 관계도 없습니다.
    그러므로, 두 벡터의 합은 여전히 부분공간 W에 속할 수 있습니다.
    예를 들자면 a1=2, b1=3, a2=6, b2=11이라고 했을 때의 두 벡터는 (4,3,0), (36, 11, 0)이 나오고 두 벡터의 합은
    (40, 14, 0)이라는 벡터가 나옵니다.
    이 벡터는 (루트40^2, 14, 0)와 같이 표기할 수 있고, 당연히 정의했던 집합의 어떠한 조건에도 위배되지 않아
    (a^2, b, 0)이라는 부분공간에 속한다고 말할 수 있습니다.

    • R Friend R_Friend 2016.12.04 20:44 신고  댓글주소  수정/삭제

      댓글에 남겨주신 내용을 제가 잘 이해를 못하겠습니다.

      예를 들어주신걸 가지고 덧셈 조건, 스칼라곱 조건에 적용해보면 부분공간 조건을 둘다 만족 못합니다.

      (1) 덧셈 조건
      a: (2^2, 3, 0)T + (6^2, 11, 0) = (40, 14, 0)T 입니다.

      b: ((2+6)^2, (3+11), (0+0))T = (64, 14, 0)T

      위의 a와 b가 서로 다르므로 덧셈 조건을 충족시키지 않습니다.


      (2) 스칼라곱 조건
      임의의 상수 c를 계산하기 편하게 3이라고 했을 때,
      a : 3(2^2, 3, 0)T = (12, 9, 0)T 입니다.
      b : ((3*2)^2, 3, 0)T = (36, 3, 0)T 입니다.

      a와 b가 서로 같지 않으므로 스칼라곱도 성립하지 않습니다. 임의의 실수 c에서 '0' 빼고는 아무 값도 스칼라곱 조건을 만족하지 않습니다.

      "x성분과 y성분 사이에 아무 관계도 없습니다"라고 멘트하신 부분이 무슨 뜻인지 모르겠습니다.

  5. Ashtray 2016.12.05 10:01  댓글주소  수정/삭제  댓글쓰기

    상세 수치를 약간 생략하고, 부분공간 정의 위주로 좀 접근해볼게요.

    간단하게, 예를 드신 벡터공간은 (a^2, b, 0)T입니다.
    즉, "x성분은 0이상인 양수, b벡터는 모든 실수, z성분이 0인 벡터"라면 모두 위 벡터공간에 속한다고 말할 수 있습니다.
    부분공간 정의에 따라서, 이 부분공간에 속하는 벡터간의 합이든 간에 그 결과값이
    "x성분은 0이상인 양수, b벡터는 모든 실수, z성분이 0인 벡터"면 모두 이 부분공간에 속하는 것입니다.
    위 예시에서 두 벡터의 합 결과물이 (40, 14, 0)T 이 나왔는데요, 당연히 x성분(40)이 양수, y성분이 14로 실수, z성분이 0이므로 위 부분공간에 속합니다.

    그런데, 책에 나온 예시의 집합은 (a^2, a, 0)입니다. "y성분(a)의 제곱=x성분값(a^2)" 이라는 제약조건이 걸려있는 것이죠.
    이 경우, 이 집합에 속하는 어떤 두 벡터의 합이든, 그 결과물에서 "y성분의 제곱=x성분값" 이라는 결과를 만족해야 부분공간이라고 할 수 있습니다.
    예를 들면 간단히 (4,2,0)T + (9,3,0)T = (13, 5, 0)T이라는 것을 볼게요.
    이 결과물에서 y성분의 제곱(25)은 x성분(13)과 같지 않습니다.
    즉, 이 집합에 속하는 두 벡터를 더했는데, 이 집합에 속하지 않는 벡터가 나왔습니다. 덧셈조건을 만족하지 않는 것이죠.
    따라서 이 집합은 부분공간이 아닙니다.

  6. Lalipuna 2017.09.18 13:52  댓글주소  수정/삭제  댓글쓰기

    저도 Ashtray님과 동일한 의문을 갖고 웹에서 검색해 본 결과, 저도 알프렌드님 설명이 좀 잘못된게 아닌가 싶네요.
    일단 이글에서 벡터의 부분공간에 대한 정의부의 (1)덧셈공식을 보면 어떤 집합 M이 있을때 이 집합의 임의의 원소가 집합 W에 속해 있고, 그 임의의 원소들의 합들도 W에 속해 있으면 조건이 참인 것으로 설명이 되어 있습니다. 그런데, 부분공간이 아닌 예시에서는 a1^2 + a2^2 ≠ (a1 + a2)^2이므로 덧셈공식이 성립되지 않는다라고 설명이 되어 있습니다. 왜 좌항과 우항이 같아야 덧셈공식이 성립이 된다는 것인지 잘 모르겠네요. (a1 + a2)^2 역시 임의의 양의 실수값이기때문에 덧셈공식의 경우는 조건이 참일 것 같은데요. Ashtray님께서 말씀하신 'a1^2 + a2^2=k^2를 만족하는 실수 k가 항상 존재'하기에 참이라고 생각이 듭니다.(다만 a^2이라는 조건 자체가 양수이므로 실수 집합을 W집합이라고 둔다면 그 자체만으로 부분집합이 아닌게 되겠네요. 하지만 덧셈조건식을 따지는 여기서는 논외)
    또한 부분공간이 아닌 예시에서 (2)곱셈공식의 경우도 마찬가지로 상수 c가 왜 제곱식 안쪽으로 들어 가는지도 의문이 생깁니다. 왜 좌항과 우항이 등식을 이루어야하나요? 곱셈공식의 경우는 c가 음수인 경우에는 첫항이 음수가 되어 a^2(양수)으로 구성된 첫항 조건이 만족하지 않아서 해당 집합은 부분공간이 되지 않는다라고 설명하는게 맞는 것이 아닌가요?
    요점은 왜 덧셈,곱셈 조건식에서 좌항과 우항이 등식을 이루어야 하는것인가이며, 등식조건은 정의부에서는 언급이 되어 있지 않고 포함관계만이 조건여부를 결정 짓는 것으로 설명이 되어 있다는 것입니다.
    부분공간이 아닌 예시부분 설명이 잘못 된 것인지, 아니면 부분공간에 대한 정의에서 빠뜨리신게 있는지.. 이 글 내용으로만 봐서는 부분공간의 정의부와 예시부가 조금 맞지 않는 부분이 있는듯합니다.

    제가 잘못 이해하고 있는 부분이 있다면 알려주셨으면 합니다.

    항상 잘 보고 있습니다.

    • R Friend R_Friend 2017.09.18 14:43 신고  댓글주소  수정/삭제

      안녕하세요 Lalipuna님, 댓글 감사합니다.

      퇴근 후에 집에 가서 차분히 다시 읽어보고, 책도 찾아보고 제가 잘못 쓴 부분이 있는지 확인해보겠습니다. 이번주 제가 좀 정신이 없이 바빠서요, 금주 중에는 답글 올리도록 하겠습니다.

      다른 포스팅도 혹시 이상한 부분있으면 언제든지 댓글 감사합니다. 제가 선형대수를 책으로 독학을 해서요, 잘못된 부분이 있을 수 있답니다. ^^;