지난 포스팅에서는 대각행렬(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 행렬에 적용가능해 활용성이 매우 높은 방법이므로 기대해주세요.

 

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

 

 

728x90
반응형
Posted by Rfriend
,

지난번 포스팅에서는 특성방정식(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)에 대해서 알아보겠습니다.

 

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

 

728x90
반응형
Posted by Rfriend
,

지난번 포스팅에서는 고유값(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)에 대해서 알아보도록 하지요.

 

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

 

728x90
반응형
Posted by Rfriend
,

지난번 포스팅에서는 행 사다리꼴(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)를 구하는 방법에 대해서 소개하도록 하겠습니다.

 

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

 

728x90
반응형
Posted by Rfriend
,

야구 좋아하시나요?  4월 1일날 프로야구가 개막을 했습니다.

 

퇴근 길에 야구 & 빅데이터 관련한 신문기사 제목이 눈에 띄길레 봤더니 내용이 '이렇게 분석을 해도 되나?' 싶은게 있어서 몇 자 적어봅니다. 

 

 

오늘 포스팅의 대상으로 삼는 뉴스는 아래의 연합뉴스 2016.04.04일자 기사 입니다.

 

 

 

빅데이터로 본 '프로야구 5강'…한화·삼성·SK·두산·KIA

 

다음소프트, SNS 언급량과 경제·실력변수 분석해 예측

 

빅데이터 분석업체 다음소프트는 지난달초부터 28일까지 사회관계서비스망(SNS)상 각 팀의 언급량과 경제·실력 변수 등 3가지 요소를 조합해 '2016 KBO리그 5강'을 예측한 결과를 4일 발표했다.

순위 예측에 사용된 SNS변수는 지역·팀 이름과 치킨 언급량을 조합했다. 경제변수는 구단이 속한 기업의 시가총액과 구단의 평균 연봉을 조합했고, 실력변수는 지난해 KBO 정규리그 경기 결과를 토대로 계산된 구단별 타자율과 방어율을 고려했다. 이들 세가지 변수는 각각 가중치에 따라 최종적으로 지수화됐다.

 

 

 

 

* 원문 링크: http://www.yonhapnews.co.kr/bulletin/2016/04/03/0200000000AKR20160403056900033.HTML

 

 

원문은 위의 링크를 참조하시기 바랍니다. 

 

신문기사 보고 나서 생각해봤던 것들을 적어보겠습니다.

 

 

1) 상관관계(correlation) vs. 인과관계(causation)

 

먼저, 상관관계는 인과관계가 아니다는 것부터 시작해보죠. 다음소프트에서는 분석을 할 때 SNS, 경제, 실력변수를 2014년, 2015년 실제 승률과의 상관관계를 검증해서 선정했다고 했네요.

 

최재원 다음소프트 이사는 "순위 예측에 사용된 SNS·경제·실력 변수는 2014년과 2015년의 실제 승률과 상관관계를 검증해 선정됐다"고 설명했다.

 

미국닭고기협회(NCC)는 올해 미국프로풋볼리그(NFL) 플레이오프에서 미국인의 대표 간식인 '버팔로윙'(닭날개)이 많이 팔린 도시의 팀이 좋은 성적을 거뒀다는 자료를 소개했다. 올해 플레이오프 10경기에서 상대 팀보다 닭날개 판매 실적이 더 높은 도시의 7개 NFL팀이 승리를 거뒀다는 것이다.

다음소프트는 이같은 '닭날개 가설'을 한국 프로야구에 적용했다. 각 구단의 홈 지역이나 구장, 팀이름이 '치킨'과 함께 언급된 SNS 데이터를 최근 2년간 승률과 비교했다. 결과적으로 치킨 언급량과 승률의 상관관계는 0.3으로, 사회학적으로 '약한 상관관계'가 있는 것으로 나타났다

 

"상관관계가 있다"고 할 때 대비 "인과관계가 있다"라고 말할 수 있으려면 "시간의 선 -> 후" 관계가 있고, 원인과 결과의 "방향"이 있어야 합니다. 

 

제가 보기에 치킨 언급량은 시간의 선/후가 뒤바뀌고 원인과 결과가 뒤바뀐 자료 같아 보이는데요.  치킨을 많이 먹어서 경기를 이기는게 아니라, 경기를 이기니깐 치킨을 많이 먹는거 아닌가 하구요.  상관관계 0.3이라면  의미가 있다고 할 수 있나요?

 

 

아래의 글에서도 보면 분석 결과 "공공의 적 햄버거, 패스트푸드가 비행청소년을 만든다"는 주장인데요, 제가 보기에는 그 반대의 설명, 즉 "가정형편이 어렵고 부모로부터 제대로된 보살핌을 못받은 비행청소년들이 먹을 수 있는 음식이 패스트푸드 위주일 수밖에 없는거 아닌가" 싶기도 합니다.  상관관계를 인과관계로 쉽사리 예단하기가 그리 간단하고 쉽지 않다는 것입니다.

 

“한국청소년연구소(이사장 박명윤·보건학 박사)가 2000년 11월 조사한 '비행청소년의 식생활에 관한 연구'를 보면 라면, 햄버거, 피자, 탄산음료 등 인스턴트 음식의 섭취량에서 일반청소년과 비행청소년들 사이에 상당한 차이가 있는 것으로 드러났다.
즉 비행청소년들은 일반 청소년들에 비해 이와 같은 음식물을 2배 가량 많이 섭취하고 있었다. 박명윤 이사장은 “대량의 카페인, 당분, 방부제, 향료, 인공 착색료 등이 들어 있는 음식을 '정크 푸드'라고 하는데 특히 어린이들의 경우 이런 인공물질에 대한
신체 저항력이 불완전하므로 지속적으로 그런 음식을 섭취하면 주의력이 흩어지고, 욕구불만이 쌓여 폭력행동으로 나타날 가능성이 있다”고 지적했다.”

 

- 주간동아 제345호 '공/공/의/적/햄/버/거' 중에서 -

 

 

이런 예도 있습니다. 2012년 미국 콜롬비아 대학의 프란츠 H 메저리(Franz H. Messerli) 박사가 의학분야 최고 수준의 저널인 뉴 잉글랜드 의학 저널(New England Journal of Medicine·NEJM)에 전 세계의 주요 국가의 100만명 당 연간 초콜릿 소비량과 노벨상 수상자 수와의 상관관계 분석에 대한 결과의 논문을 발표하였습니다. 그리고 아래처럼 인상적인 산포도를 보여주었습니다.  

 

 

(* 출처 논문 보러가기 ☞ http://www.biostat.jhsph.edu/courses/bio621/misc/Chocolate%20consumption%20cognitive%20function%20and%20nobel%20laurates%20(NEJM).pdf ) 

 

 

위 그래프는 Franz H. Messerli, M.D., "Chocolate Consumption, Cognitive Function, and Nobel Laureates", 2012, 논문에 실린 산포도 그래프인데요, 결론을 이렇게 냈습니다.

 

There was a close, significant linear correlation (r = 0.791, P<0.0001) between chocolate consumption per capita and the number of Nobel laureates per 10 million persons in a total of 23 countries (Fig. 1).

 

초코렛 소비량과 노벨상 수상자 간의 상관계수가 0.79 로서 매우 강한 상관관계가 나왔다고 결론을 내고 있습니다.  그런데 말입니다, 소득수준이라는 제 3의 교란요인(confounding factor)가 있는건 아닐까요?   

초코렛 소비량과 노벨상 수상자 수 간에 높은 상관관계가 있는 것은 맞습니다.  하지만 이게 '초코렛 소비량이 많으면 (다른 말로 하자면 '초코렛 소비량을 늘리면') 노벨상 수상자가 많아진다'는 인과관계로 확대해석 하는 것은 주의를 요합니다. 

 

도시별 '경찰관의 수'와 '도둑놈의 수'는 강한 상관관계를 가집니다.  그렇다고 '도둑놈이 많은 이유(원인)이 경찰관이 많아서' 인가요?  중간에 '인구 수'라는 제 3의 교란요인이 숨어있다고 보는게 맞지 않겠습니까?

 

 

 


여러분 생각은 어떠세요?  치킨 언급이 많다고 승률이 올라가는게 타당하다고 보시나요?

 

 

 

 

2) 실험군 vs. 대조군

 

보통 분석을 할 때 보면 대조군(control group)이라고 해서 비교의 대상, 분석 정확도의 향상 정도를 판단할 수 있는 기준을 둡니다.

 

"각 구단의 홈 지역이나 구장, 팀이름이 '치킨'과 함께 언급된 SNS 데이터를 최근 2년간 승률과 비교했다"라고 했는데요, 그럼 '각 구간의 홈 지역이나 구장, 팀이름만 나오고 치킨이라는 말이 안들어 갔을 때'의 승률과의 상관관계(대조군)는 어떠했을지 궁금하네요.

 

대조군 없는 분석은 과학이라기 보다는... 그냥 우연이었을 가능성을 배제할 수 없습니다.

 

 

그리고 분석의 성과(performance) 얘기할 때 보통 '눈감고 찍었을 때 보다 xx배 예측/분류 정확도 증가' 이런식으로 나타내곤 하는데요, 혹시 지나가는 사람 아무나 10명 붙잡고 '올해 어느 팀이 우승할 거 같나요?'라고 물어보고나서 야구팀 올해 성적 순위를 매긴 것하고 비교했을 때 예측 정확도가 우월하지 않고 시원치 않다면, 비슷비슷 하다면 굳이 빅데이터 분석한다고 난리를 피울 값어치가 있나 싶기도 합니다. 2년치 SNS 분석? 음....

 

(옆으로 좀 세보자면, SNS 분석에서 대상으로 삼는 온라인 상의 데이터는 모집단을 대표하는 샘플이라고 말할 수 없습니다. Daum의 댓글들만 보면 새누리당은 다음주 4.13 선거에서 폭망할 것 같지만 댓글 안다는 노인분들은 새누리당 묻지마 지지거등요. 샘플이 모집단을 대표하지 못하기 때문입니다.  분석결과 해석도 분석가 A가 하면 이렇게, 분석가 B가 하면 저렇게 해석할 여지가 많아서 이건 과학이 아니라 예술에 가깝다고 생각합니다. 재현가능성이 무척 낮기 때문에요.)

 

 

 

3) 과거 데이터로 검증, 미래 예측

 

"순위 예측에 사용된 SNS·경제·실력 변수는 2014년과 2015년의 실제 승률과 상관관계를 검증해 선정됐다"고 다음소프트에서 말했는데요, 모델을 만들었으면 과거 데이터를 가지고 모델에 적용했더니 적중률이 어떠했다고 말해주면 좋았겠다 싶습니다.  변수 상관관계 검증한거랑 모델의 정확도 검증한거랑은 다르잖아요.

 

과거 이력 데이터로 검증했을 때 통과했다고 칩시다. 문제는 미래를 얼마나 잘 예측하냐일텐데요. 

예측 모델이라는 것이 과거 데이터를 가지고 과거의 패턴, 추세 등이 지속된다는 가정 하에 만들어집니다.  그런데 만약 이 가정사항이 흔들리면 어떻게 될까요?

 

 

 

시사저널 2016.04.04일 기사에 보니 아래와 같은 내용이 있네요. 저는 야구는 안보는지라 사실 올해 KBO리그가 어떻게 돌아가는지 하나도 모릅니다. 다만 아래 기사를 보니 과거 데이터로 모델을 만들었을 때 조마조마하겠다는 느낌 아닌 느낌이 옵니다.

 

야구의 계절이 돌아왔다. 새로운 봄의 시작을 알리는 2016 KBO리그가 4월1일 개막전을 시작으로 각 팀마다 144경기를 치르게 된다. 올해 KBO리그에서는 스타 플레이어들의 해외 진출과 메이저리거 출신 외국인 선수 영입, FA 선수들의 이적으로 선수 구성이 바뀐 팀이 많다. 지난해 상위권 팀이 하위권으로 추락하고, 하위권이던 팀이 상위권에 입성하는 등 예년보다 순위 변화가 클 것으로 예상된다. 개막 첫날부터 시즌 마지막 날까지 결과를 예측할 수 없는 치열한 순위 다툼이 펼쳐질 것으로 기대를 모으고 있다.

 

* 출처 : http://www.sisapress.com/news/articleView.html?idxno=76538

 

 

 

 

4) 데이터, 빅데이터, 승률 예측

 

뭐, 그렇다고 데이터를 가지고 스포츠 승률 예측하는게 불가능하냐 하면 또 그렇지만도 않습니다.  스포츠에서는 이미 데이터 기반의 의사결정이 널리 쓰이고 있습니다.

 

브래드피트가 나왔던 영화 '머니볼' 보셨나요?  데이터를 가지고 선수 스카우트하는데 있어 "한정된(constraints) 예산으로 시장에서 저평가된 야구 선수를 스카우트해서 팀 승리 기여도를 최대(maximization)화 하여라"는 최적화 문제를 푸는 내용이 나오는 영화입니다.

 

 

 

 

('머니볼' 영화 속의) '오클랜드 애슬레틱스'의 단장 빌리 빈(브래트 피트)은 턱없이 부족한 예산으로 팀을 준우승으로 이끈 (실화에 바탕을 둔) 야구 영화입니다. 기존의 전통적인 스카웃터들이 사용한 다섯가지 지표가 "타격 파워", "타격 정확도", "주루 스피드", "송구 능력", "수비 능력"이었습니다.  그런데 (머니볼에 나오는) 예일대를 졸업한 젊고 계산에 능한 경제학자(조나 힐)의 분석 결과에 따르면 "출루율"이 승률 기여도에 매우 중요한 걸로 나왔어요. 남들이 무시하는 "출루율"을 가지고 선수들을 평가해보니 오클랜드 애슬레틱스는 "저평가"된 선수들을 남들과 달리 선별/선발할 수 있었다는 얘기가 나옵니다.

 

야구계에서는 이미 '세이버 메트릭스'라고 해서 데이터로 야구 의사결정을 지원해주는 분석 방법론이 있습니다. 

세이버메트릭스(Sabermetrics)는 빌 제임스가 창시한 SABR(The Society for American Baseball Research)라는 모임에서 만들어진, 야구를 통계학적/수학적으로 분석하는 방법론이다. 세이버메트릭스는 빌 제임스가 창시한 이래로 수많은 변화를 겪어왔으며, 이제는 단순한 개인의 취미 차원을 넘어서 야구 전반에서 쓰이고 있을 만큼 널리 퍼져 있다. 창시되었던 1970년대에는 많은 변화를 가져오지 못하였으나, 1980년대를 넘어 1990년대부터는 본격적으로 야구계에 영향을 미치기 시작하였다.
- 출처 : 위키피디아 -

 

타자의 노화곡선(aging curve)라든지 승리기여지수(WARP: Wins above replacement player) 등의 다양한 통계 지수가 이미 사용 중에 있습니다.  각 팀의 선수별 전투력 (공격력, 수비력)을 계량화하고 팀간 비교 혹은 시뮬레이션을 해보면 승률을 예측할 수 있을 것 같습니다.  다만, 제가 위에 링크한 연합뉴스 기사의 다음소프트의 예측에 사용한 방법하고는 아주 많이 다를 뿐입니다.

 

 

네이트실버가 쓴 '신호와 소음' 책에 보면 '3. 야구 : 야구 경기는 왜 모든 '예측'의 모델이 되는가?'라는 챕터가 있습니다.  야구 경기에 예측이 어떻게 활용되고 있는지 좀더 알고 싶은 분은 이 책 참고하시면 좋겠습니다.

 

 

예전에 어느 신문기사에서 보니 독일 축구팀이 SAP의 도움을 받아서 선수들의 옷/몸(?)에 센서를 부착해 실시간으로 선수들의 행동데이터를 수집하여 선수들의 체력, 행동량, 동선 등을 실시간 분석하고 코칭에 활용하고 있다...뭐, 이런 내용이 기억이 나는데요, 차라리 빅데이터로 이런 식의 분석을 한다면 도움이 될거 같기도 합니다. 

 

근데 SNS 데이터(인관관계가 있나????)....음....경제(돈 많이 쓴다고 우승할거면 머니볼 영화가 안나왔겠죠...)....음.... 실력(1년 전, 2년 전 성적표....시사저널 내용보니 올해는 많이 바뀌었다는데...)...음....

 

 

 

 

5) 도박사, 베이지언(Bayesian), 베이즈 정리(Bayes' theorem)

 

만약에 저보고 2016년 프로야구 5강을 예측해보라고 하면 저는 도박사들이 어느 팀에 돈을 걸고 있는지, 각 팀별로 승률을 어떻게 예측하고 있고, 그래서 배당율은 어떻게 되는지를 알아보겠습니다. 

 

도박사들은 '이전의 경험에 기반한 지식과 새로 들어온 증거를 기반으로 확률을 추론하고 지속 업데이트'하면서 '돈을 따기 위해, 돈을 잃지 않기 위해' 혈안이 된 잘 트레이닝된 베이지언(Bayesian) 들이거든요. ㅋㅋ

 

베이즈 정리에 대해서는 언제 시간을 내서 한번 포스팅 하겠습니다.

 

 

 

 

아래는 다음소프트에서 SNS, 경제, 실력을 가지고 스코어를 내서 예측한 2016년 프로야구 5강 예측 결과가 되겠습니다.  가을에 코리안시리즈 끝나고 나서 한번 결과를 살펴보면 재미있을 것 같습니다.

 

* 출처 : http://www.yonhapnews.co.kr/bulletin/2016/04/03/0200000000AKR20160403056900033.HTML

 

 

한화 팬들은 위의 예측 결과를 보고 가슴이 많이 설레고 뛰었을 것 같습니다. 마리화나 한화~  ^^b

 

 

728x90
반응형
Posted by Rfriend
,

지난번 포스팅에서는 계수(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)에 대해서 알아보겠습니다.

 

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

 

 

 

 

 

 

 

728x90
반응형
Posted by Rfriend
,

이번에는 동화책 두 권을 소개해드리고자 합니다.

 

피터 레이놀즈(Peter H. Reynols)의 『점』, 그리고 『느끼는 대로』

 

정말 아름답고 감동적인 동화책이예요.

아이들 있는 집이라면 꼭 추천하고 싶은 책이예요.

선물로도 만점입니다.

두 권을 세트로 사도 Good.

 

 

글과 그림을 그린 피터 레이놀즈는 미술을 아이들에게 가르치다가 미술에 어려움을 겪는 아이들을 보고 『점』과 『느끼는 대로』의 두권의 동화책을 그리고 쓰게 되었다고 해요.

 

 

 

 

 

 

줄거리를 대략 말씀드리자면,

 

그림 그리는데 자신감이 없는 베티가 있었는데요,

선생님께서 "어떤 것이라도 좋으니 한번 시작해 보렴. 그냥 네가 하고 싶은 대로 해봐"라고 격려해주시지요.

베티는 연필로 도화지에 쿡!  점 하나 찍어버리고 말아요.

선생님은 '점' 그림에 이름을 쓰라고 하지요.

 

 

 

                  (* 출처 : 피터 레이놀즈, 점, 문학동네어린이) 


 

다음주에 선생님께서 베티의 '점' 그림을 금테 액자에 넣어서 선생님 책상 위에 걸어놓지요. 그러자 베티가 자신감을 얻고는 각양각색의 '점' 그림을 그리기 시작하고, 급기야 전시회까지 해요. 

 

전시장에서 감명을 받은 한 아이가 베티에게 찾아와 물어요.

"누난 정말 굉장해!  나도 누나처럼 잘 그렸으면 좋겠어"라고요.

(이 부분에서 저희 집 아이들은 이구동성으로 "베티가 여자였어요? 꼭 남자애 같이 생겼는데..."라고 해요. ㅋㅋ)

 

그러자 베티가 "너도 할 수 있어. 한번 그려봐"라고 하지요.

그리고 그 아이가 그린 비뚤비뚤한 선을 한참 바라보더니 말하지요.

 

"자! 이제 여기 네 이름을 쓰렴"

 

 

 

(* 출처 : 피터 레이놀즈, 점, 문학동네어린이) 

 

 

 

동화책 사서 아이들과 함께 읽어보세요.

어른이 읽어도 참 아름답고 가슴 훈훈한 내용에 그림들 또한 걸작입니다.

 

 

위의 책 『점』의 가장 마지막 장에 나왔던 오른쪽의 꼬마 이름이 레이먼이예요.

레이먼의 그림그리기 이야기가 두번째 책 『느끼는 대로』예요.  이 두개의 책을 세트로 읽으면 더 좋은 이유이지요. 

 

형이 레이먼의 그림을 보고 놀리고 나자 레이먼이 급 자신감을 상실하고 "이제 안그려"하고 토래져있지요.  그때 동생 마리솔이 나타나서는 레이먼이 구겨서 버린 그림을 가지고 방안으로 도망을 가요.  레이먼이 그림 내놓으라며 쫒아갔더니 마리솔의 방안에 레이먼이 구겨서 버린 그림들이 방 벽에 다닥다닥 붙여져있는거예요.  마리솔이 한마디 하지요.

 

""내가 제일 좋아하는 그림이야.  꽃병 느낌이 나는 걸"

 

 

 

 

(* 출처 : 피터 레이놀즈, 느끼는 대로, 문학동네어린이) 

 

 

이 말에 영감을 얻은 레이먼은 급기야 감정까지 그림으로 그리게 돼요.

'오후 느낌'이라든지 '평화로운 느낌', '바보 같으 느낌', '신나는 느낌' 등을요.

 

시도 쓰게 되지요.  느낌이 가득한 시를요.

 

 

아이들이 잠자기 전 이들 두 권을 책을 읽어주면 아이들이 너무나 너무나 좋아라 한답니다. ^^

 

  

 

부모, 선생님, 멘토의 말 한마디가 참 중요하지요.

두 가지의 실제 사례를 소개할께요.

 

 

 첫번째 실제 이야기예요. 『통찰의 기술』(신병철 저)의 184p 에 소개된 내용 인용합니다.

 

「눈먼 소년이 한 명 있었습니다. 그 소년은 앞이 안 보이기 때문에 친구들과 뛰어놀 수 없었고 늘 혼자 지냈습니다. 그야말로 대단한 약점을 가진 것이죠.

 

  그런데 이 소년의 인생에 큰 전환점이 되는 사건이 하나 일어났습니다.  교실에 쥐가 한 마리 나타난 것입니다.  교실은 순식간에 난장판이 되었습니다.  쥐를 잡기 위해 선생님과 학생들이 야단법석을 떨었지만 아무도 그 쥐가 어디로 숨었는지 알지 못했습니다.  그런데 눈은 보이지 않지만 귀가 아주 밝은 이 학생은 쥐가 벽장 속에 숨어 있다는 것을 알아챘고 덕분에 쉽게 쥐를 잡을 수 있었습니다.  수업이 끝난 뒤 선생님은 눈먼 아이를 불러 이렇게 칭찬했습니다.

 

너에게는 놀라운 능력이 있구나. 
네 귀는 정말 특별하구나!

 

 

 이 말이 이 소년의 인생을 바꾸어 놓았습니다. 소년은 자신의 강점인 밝은 귀를 활용해서 인생을 살아야겠다고 결심합니다.」

 

 

이 소년이 바로 Stevie Wonder 입니다!

 

 

 

 


 

 

선생님의 말 한마디가 스티비원더의 일생을 바꾸었고, 덕분에 우리는 스티비원더의 주옥같은 노래를 들을 수 있게 되었습니다.

 

(여담이지만, 사이먼 앤 가펑클이 Bridge over troubled water 곡이 1971 Grammy Award 상을 수상했습니다. 그때 수상소감이 이랬다고 하네요. "저희는 운이 좋았습니다. 올 해는 스티비원더가 앨범을 내지 않았거든요" ^^) 

 

 

 

두번째 사례는 황성주 박사(사랑의 클리닉, 꿈의 학교, 월드리더십센터, 국제 사랑의 봉사단 설립자, 황성주 생식의 (주)이롬 사장)의 『10대, 꿈에도 전략이 필요하다』의 40~41p에서 인용합니다.  역사상 최초로 샴 쌍둥이 분리 수술을 성공시킨 벤 카슨 박사의 이야기예요.

 

「벤은 흑인 빈민가 출신의 열등생으로 초등학교 5학년 때 꼴등의 영광을 누리며 멍청이로 불렸습니다.  그럼에도 불구하고 어머니 소냐 카슨은 아들에게

베니야, 너는 영리한 아이란다. 네가 하고 싶은 일은 무엇이든지 할 수 있단다

 

라며 격려해주었습니다. 그러나 아무리 격려하고 자신감을 심어주려고 노력해도 변화가 없자 그녀는 하나님께 아들을 도울 지혜를 구하기 시작합니다.

 

  어머니가 받은 지혜와 전략은 아들에게 책을 읽히는 것이었습니다. 바로 '독서학습'이었습니다. 그날부터 벤 카슨은 방과 후 도서관에서 지내는 시간이 많아집니다. 무슨 책이든 일주일에 두 권을 읽고 어머니에게 독후감을 제출해야 했기 때문입니다.

 

  비버로부터 시작해서 동물에 대한 책에 매료된 벤은 늑대, 야생 개, 다람주 등으로 관심을 넓혀갑니다. 그 관심은 식물, 광물, 암석 등으로 확장되어 갔습니다. 그는 독서의 묘미에 깊이 빠져 들어가게 되었습니다.

 

  5학년 2학기 과학시간에 벤은 인생의 전환점을 맞게 됩니다.  잭 선생님이 검은 돌 조각 하나를 들고 "이것이 무엇인지 아는 사람, 이것은 화산과 어떤 관계가 있지?"라고 물었습니다. 

 

  아무도 손을 들지 않자 벤이 손을 들었습니다.  "그것은 흑요석입니다.  용암이 물에 닿으면서 일어나는 급격한 냉각으로 인해 만들어집니다."라고 말문은 연 뒤, 자신이 알고 있는 모든 지식들을 줄줄이 이야기하기 시작합니다. 

 

  선생님은

네 말이 모두 맞다.  아주 놀라워.  네가 지금 이야기한 내용은 굉장한 지식이다.  나는 정말 네가 자랑스럽다.

며 칭찬을 아끼지 않았습니다.

 

  아이들은 "저 애가 벤 카슨 맞아?"하고 속삭이면서 놀라워했습니다.  그러나 이날 가장 놀란 사람은 바로 벤 카슨 자신이었다고 합니다.  이 일로 성취의 감격을 맛본 벤은 멍청한 꼴등에서 학교의 영웅이 됩니다.  단 한 번의 승리로 자신감을 얻은 벤은 더욱 독서에 열중했습니다.  결국 그는 세계 최고의 신경외과 의사로 성장합니다.」

 

황성주 저자는 벤 카슨의 사례를 '독서'의 중요성을 강조하고자 언급했습니다만,

저는 '어머니'와 '선생님'의 인생을 바꾼 말 한마디에 주목합니다. 

 

멘토의 말 한마디, 인생을 바꿀 수 있습니다.

 

그림을 못 그린다고 지레 포기한 베티와 레이먼,

눈이 안보이는 스티비원더,

학교 꼴등 벤 카슨,

 

이들에게 인생을 바꾸는 멘토가 있었던 것처럼,

아들꽈 딸이 있는 부모라면, 학생이 있는 선생님이라면, 후배가 있는 선배라면 힘이 되는 믿음의 말 한마디 해주는 하루가 되면 좋겠습니다.

 

피터 레이놀즈의 '점', '느끼는 대로' 이야기 하다가 옆으로 많이 샜습니다.

어린 아이 키우는 집이라면 두권 모두 추천해요.

 

728x90
반응형
Posted by Rfriend
,

요즘에 개인정보, 금융정보를 다루거나 기술 기반의 제조회사의 경우 정보보안 (내부 대외비의 외부 유출 방지, 외부 해커의 침입 방지) 이슈가 커지다보니 인터넷망 사용에 제약이 가해지는 경우가 많습니다.

 

R의 경우 base package를 설치하고 나서 분석에 필요한 package를 install.packages("package name") 함수로 설치한 후 library()로 로딩해서 사용을 합니다.

 

그런데 만약 '인증된 웹 페이지' 외에는 일단 차단하고 보는 인터넷 사용 정책을 택하고 있는 회사의 경우에는 install.packages("package name") 함수로 package를 설치하려고 하면 "인증되지 않은 사이트"라서 설치가 안되었다는 에러 메시지가 콘솔 창에 뜹니다. 이럴 경우에 네트워크 담당자한테 아쉬운 소리 안하고도 분석가가 원하는 package를 설치할 수 있는 2가지 방법을 소개해드리겠습니다.  1번째 방법 추천이구요, 1번째 방법이 안되면 2번째 방법을 시도해보세요.

 

 

 

(1) Use secure download method for HTTP 메뉴 check box 해제

 

 

보안 인증이 안된 페이지라면서 R package 설치가 안되는 경우,

 

   Tools

     > Global Options...

          > Packages

               > Use secure download method for HTTP (check 박스 해제)

 

하면 해당 package 다운로드/설치 및 연계된 package도 모두 알아서 다운로드/설치됩니다.

 

혹시 이래도 안되면 아래 방법 (완전 수동 -_-) 사용하시면 됩니다.

 

 

 

 

 

(2) R package를 개별로 download해서 하나씩 수동 설치 (완전 노가다... -_-;;;)

 

Time Series Analysis 분석을 위해서 TSA package를 설치해야할 필요가 생겼다고 가정하고 예를 들어보겠습니다.

 

 

1) The Comprehensive R Archive Network  https://cran.r-project.org   

에 접속합니다.

 

 

2) 왼쪽 하단의 "Packages" 메뉴를 클릭 => 우측 본문 상단의 "Table of available packages, sorted by name" 클릭합니다.

 

 

 

 

3) 설치하고자 하는 package의 알파벳을 찾습니다.  (본 예에서는 "TSA" package를 설치하고자 하므로 상단의 "T" 알파벳을 누른 후에 "TSA" 나올 때까지 스크롤바를 내려서 찾았습니다.  Ctrl+F 한다음에 "TSA" 키워드를 넣고 찾아도 됩니다)

 

 

 

4) 찾은 package 이름을 클릭합니다. (본 예에서는 아래 캡쳐처럼 "TSA" package 를 클릭) 

 

 

 

5) 압축되어 있는 package를 다운로드 합니다.

    - 사용하는 OS에 맞게 다운로드 합니다. (본 예에서는, 저는 Windows OS를 사용하므로 중앙에 위치한 Windows binaries 의 r-release: TSA_1.01.zip 파일을 다운로드 함)

    - ※ package에 따라서는 상단에 'Depends' 라고 쓰여있는 곳에 package가 있으면 같이 다운로드를 해서 설치를 해줘야 합니다. 자동차가 엔진(예: TSA package)만 있다고 움직이는게 아니고, 네개의 바퀴(예: leaps, locfit, mgcv, tseries package) 도 있어야지 굴러갈 수 있으므로 엔진 설치할 때 바퀴도 덩달아서 같이 설치해줘야 한다고 생각하시면 편하겠습니다. 

(이런 경우 install.packages("") 함수를 사용하면 콘솔 창에 원래 설치하려고 했던 package 외에도 Depends packages 가 자동으로 주욱 깔리는 걸 본적이 있을 겁니다. 현재는 네트워크 망이 막혀서 자동으로 설치가 안되는 상황을 가정하고 설명하는 중이므로, 자동으로 못깔리므로 수동으로 다운로드해서 깔아줘야 한다는 뜻입니다.)

 

 

 

 

만약 Depends 에 있는 package (본 예에서는 leaps, locfit, mgcv, tseries package) 를 먼저 설치하지 않은 상태에서 바로 본론으로 들어가서 TSA_1.01.zip 을 설치하려고 하면 아래와 같은 에러 메시지가 뜰겁니다.

 

> install.packages("C:/Users/Owner/Downloads/TSA_1.01.zip", repos = NULL, type = "win.binary")
Installing package into ‘C:/Users/Owner/Documents/R/win-library/3.2’
(as ‘lib’ is unspecified)
package ‘TSA’ successfully unpacked and MD5 sums checked
> library(TSA)
Error: ‘leaps’에 의해 요구된 패키지 ‘TSA’를 찾을 수 없습니다
In addition: Warning message:
패키지 ‘TSA’는 R 버전 3.2.4에서 작성되었습니다 

 

 

 

6) 다운로드 완료

 

 

 

 

7) Rstudio > Tools > Install Packages... 메뉴 선택

 

 

 

8) install Packages 팝업 창이 뜨면 "Install from: Package Archive File (.zip; tar.gz)" 를 선택합니다.

 

 

 

 

9) "Package archive" 의 "Browse" 단추를 누르면 윈도우즈 탐색기가 뜹니다. 그러면 (6)번에서 보이는 package download 해놓은 폴더로 가서 방금 전에 다운로드한 package 압축파일을 선택합니다.

그리고 팝업창의 하단에 "Install" 단추를 누르면 됩니다.

 

 

 

 

 

> install.packages("C:/Users/Owner/Downloads/leaps_2.9.zip", repos = NULL, type = "win.binary")
Installing package into ‘C:/Users/Owner/Documents/R/win-library/3.2’
(as ‘lib’ is unspecified)
package ‘leaps’ successfully unpacked and MD5 sums checked

 

 

 

10) 나머지 package들(본 예에서는 locfit_1.5-9.1, mgcv_1.8-12, tseries_0.10-34, TSA_1.01)도 (9)번에서 했던 방법대로 설치를 해줍니다.

 

 

> install.packages("C:/Users/Owner/Downloads/locfit_1.5-9.1.zip", repos = NULL, type = "win.binary")
Installing package into ‘C:/Users/Owner/Documents/R/win-library/3.2’
(as ‘lib’ is unspecified)
package ‘locfit’ successfully unpacked and MD5 sums checked
> install.packages("C:/Users/Owner/Downloads/mgcv_1.8-12.zip", repos = NULL, type = "win.binary")
Installing package into ‘C:/Users/Owner/Documents/R/win-library/3.2’
(as ‘lib’ is unspecified)
package ‘mgcv’ successfully unpacked and MD5 sums checked
> install.packages("C:/Users/Owner/Downloads/tseries_0.10-34.zip", repos = NULL, type = "win.binary")
Installing package into ‘C:/Users/Owner/Documents/R/win-library/3.2’
(as ‘lib’ is unspecified)
package ‘tseries’ successfully unpacked and MD5 sums checked
> install.packages("C:/Users/Owner/Downloads/TSA_1.01.zip", repos = NULL, type = "win.binary")
Installing package into ‘C:/Users/Owner/Documents/R/win-library/3.2’
(as ‘lib’ is unspecified)
package ‘TSA’ successfully unpacked and MD5 sums checked

 

 

 

11) 마지막으로 library(package name) 함수로 로딩합니다.

(본 예에서는 library(TSA) 로 로딩을 했는데요, 중간에 보니 Error 메시지로 'quadprog'이라고 불리는 패키지가 없습니다.. 라고 떴네요. ㅋㅋ ^^;  찾아보니 Functions to solve Quadratic Programming Problems 해주는 package가 quadprog 인데요, 이것도 위에 안내해준 방법대로 설치하고 나서 다시 한번 library(TSA) 하면 Error 메시지 없이 잘 설치될겁니다... package 수동설치 방법 설명하는게 이번 포스팅의 목적이므로 quadprog 수동설치 예시는 더이상은 하지않겠습니다)

 

> library(TSA)
필요한 패키지를 로딩중입니다: leaps
필요한 패키지를 로딩중입니다: locfit
locfit 1.5-9.1 	 2013-03-22
필요한 패키지를 로딩중입니다: mgcv
필요한 패키지를 로딩중입니다: nlme
This is mgcv 1.8-12. For overview type 'help("mgcv-package")'.
필요한 패키지를 로딩중입니다: tseries
Error in loadNamespace(j <- i[[1L]], c(lib.loc, .libPaths()), versionCheck = vI[[j]]) : 
  ‘quadprog’이라고 불리는 패키지가 없습니다
In addition: Warning messages:
1: 패키지 ‘TSA’는 R 버전 3.2.4에서 작성되었습니다 
2: 패키지 ‘leaps’는 R 버전 3.2.4에서 작성되었습니다 
3: 패키지 ‘locfit’는 R 버전 3.2.4에서 작성되었습니다 
4: 패키지 ‘mgcv’는 R 버전 3.2.4에서 작성되었습니다 
5: 패키지 ‘tseries’는 R 버전 3.2.4에서 작성되었습니다

 

 

 

그리 어렵거나 복잡한 것은 아닌데요, 그래도 혹시 여기까지 쭉~ 읽어보시고 귀찮다 싶으시면 사내 네트워크 보안담당자에게 찾아가서 CRAN 사이트는 인증된 사이트로 열어주세요...라고 부탁(혹은 팀장 품의?) 하시면 됩니다. 

 

 

참고로, Python 사용자라면 SSL 인증 문제로 Python 패키지 설치가 안될 때는  http://rfriend.tistory.com/304 를 참고하세요.

 

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

 

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

 

728x90
반응형
Posted by Rfriend
,

지난 포스팅에서는 사상 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) 개념을 이용해서 선형연립방정식 해의 존재성, 유일성, 해집합의 일반적인 구조에 대한 정보를 구할 수 있는 방법을 알아보겠습니다.

 

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

 

 

728x90
반응형
Posted by Rfriend
,

지난번 포스팅에서는 선형사상(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)를 알아보겠습니다.

 

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

 

 

728x90
반응형
Posted by Rfriend
,