👩‍💻LEARN : ML&Data/Book Study

[머신러닝을 위한 수학 with 파이썬, R] #2. 머신 러닝을 위한 선형 대수 part2. 고윳값, 고유벡터, 대각화

쟈니유 2023. 1. 26. 23:42
728x90

이해한 거 같으면서도 계속 이 상태임

 

더보기

🐍👣

ㅎ ㅏ...

행렬 자신 있따고 썼던 지난 글의 나는 어디에,,,?

개념적으로 이해가 될랑가말랑가 하다가 대충 감이 잡힐랑가 말랑가 하는 중임

지금은 억지로 꾸겨 넣는 중... 나중에 선대 책 보면서 더 잘 이해 할거라고 믿어 의심치 않아

미래의 나야 화이팅~ ^^! 

 


#2. 머신러닝을 위한 선형 대수 

 

Background : 왜 대각화를 해야 하는가? 

- 마르코프 체인에서 전이 행렬을 거듭 제곱 x 무한대 하다 보면 아래와 같은 문제가 발생함  ㄴ 10,000개의 상태 (10,000개의 행과 열)을 가진 행렬일 경우 계산량이 많아짐 - 하지만 행렬 내에 0이 많다면 쉽게 곱셈하여 문제를 해결할 수 있음 - 전이 행렬을 거듭 제곱해야 하는 상황에서 대각화를 이용하면 보다 쉽게 계산이 가능함 

 

대각화(분해)

  • 개념 : 주어진 행렬을 다른 행렬의 곱으로 나타내는 것
  • 대각화 원리 
    • M 이라는 가상의 정방행렬이 있다고 가정
    • 행렬 P의 역행렬 (수식쓰기 귀찮으니까 P`라고 여기에선 기재) x M X 행렬 P= 대각 항렬이 된다고 가정 
      • P`MP = D(대각행렬)
      • P(P`MP)P'=PDP'
      • IMI=PDP'
      • M=PDP'
    • 마르코프체인처럼 M을 10번 거듭제곱한다고 했을 때 
      • MMMMMMMMMM=PDP'PDP'PDP'....PDP'
      • =PDIDIDIDIDID...P'
      • =PDDDDDDDDDP'
    • D(대각항렬)은 여러번 곱해도 대각에 있는 수를 그 자리에서 그대로 거듭제곱한 결과가 나오기 때문에 계산이 훨씬 용이함  

고윳값과 고유 벡터

  • 왜 해야 하는가 ? 
    • 어떤 행렬의 고유한 특징은 고유 벡터(방향)와 고윳값(고유 크기)임
    • 행렬은 일종의 필터 (한 벡터를 공간에서 다른 벡터로 변환) 역할을 하는데, 이 행렬만이 갖는 변환의 특징을 알려 주는 것임 
  • 알아보는 법 
    1. 주어진 정방 행렬 A 에 대해 아래와 같이 정의한다 
      • x = 원소를 n개 갖는 벡터 
      • i = 상수, 고윳값
      • I = 항등행렬 (뭘 곱해도 자기 자신 나오는 애)
      • Ax = ix 
        • 행렬 (2x3) x 벡터(3x1)= 새로운 값인 벡터(2x1) : 원래의 벡터를 선형 변환 시키는 행렬.
    2. Ax-ix=0
    3. (A-iI)x=0
      • x가 해를 가지기 위해선 즉 0이 아니기 위해선 (A-iI)의 역행렬이 없어야 함 
      • 역행렬이 없으려면 A-iI의 행렬식이 0 이어야 함 
      • 행렬식이 0이기 위해선 det(A-iI)=0 이 필요함 우리는 이를 특성방정식이라고 지칭함
      • ad-bc = 0 으로 정의하고 미지수인 i , 즉 고윳값을 구하면 됨 
    4. 2차방정식을 풀어야 하기 때문에 고윳값이 2개의 경우가 나오며 각각의 case에 따라 해당하는 벡터를 구하면 됨 
    5. i값을 (A-iI)x=0에 대입하여  고유벡터의 값을 구함 
      • 벡터의 값은 3x=2x'이런 식으로 나옴 (여기도 수식쓰기 귀찮아서...x=엑스원, x'=엑스투 라고 봅시다)
      • x=2/3x'이기 때문에 벡터의 첫번째 값은 2/3, 두번째 값은 1이 되겠으나 동일한 기준으로 벡터를 작성하는것이 필요하니 가상의 수 t를 가정하고 두 값에 동일하게 곱한다고 볼 경우 첫번째 값은 2t, 두번째 값은 3t가 됨 
      • 이렇게 되면 고유벡터는 2,3으로 이루어진 벡터이며 동일하게 t 가 곱해진 형태가 됨 

 

 

분석모형 응용 - 주성분 분석 

주성분 분석 : 크기가 큰 행렬 (공분산, 상관 행렬 등 변수 많은 행렬) 을 나타날 때 변수 크기를 줄여주는 차원 축소를 하는 기법

 

  • 주성분 분석 하는 이유
    • Y를 표현하는 x, x1, x2, x3...이 있는데 현실 세계에서는 서로 상관이 있어 Y를 온전하게 표현하는 데 어려움
    • 만약 이 x 들 간 상관이 없다면 좀 더 효과적으로 데이터를 분석할 수 있게 됨
    • 이에 기존 변수를 선형 변환(=행렬이 벡터를 선형변환시키듯이!)시켜서 상관관계가 적은 새로 변수를 만들어 내는 것임
      • 주성분 = 원 데이터 x 숫자 + 숫자  
    • 주 성분들을 인위적으로 서로 수직 (=상관이 없게)이 되도록 생성하여 선형 상관을 파괴하는 것
    • 오히려 기존 x 들이 선형 상관으로 나타나서 표현 안되던 비상관 요소들을 주성분 분석으로 더 잘 표현하게 되어 원 데이터의 분산, 형태 등을 잘 표현하게 함 

 

##주성분 분석 따라하기 

#sklearn 패키지에서 PCA 함수 불러오기 
from sklearn.decomposition import PCA 
M=np.arrary([[1,1,1],[2,3,2],[3,4,3],
             ... 이런 저런 데이터 ... 
           ])
           
           
#주성분을 두개로 지정
pca=PCA(n_components=2)
#주성분 분석
pca.cit(M)
PC=pca.transform(M)

#w=고유값, V=고유벡터 
w,V = np.linalg.eig(pca.get_covariance())
#원래 데이터를 나타내는 주성분 세개 
V.T.dot(M.T).T 
#이 과정을 거치면 주성분 분석된 array가 출력됨