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(대각항렬)은 여러번 곱해도 대각에 있는 수를 그 자리에서 그대로 거듭제곱한 결과가 나오기 때문에 계산이 훨씬 용이함
고윳값과 고유 벡터
- 왜 해야 하는가 ?
- 어떤 행렬의 고유한 특징은 고유 벡터(방향)와 고윳값(고유 크기)임
- 행렬은 일종의 필터 (한 벡터를 공간에서 다른 벡터로 변환) 역할을 하는데, 이 행렬만이 갖는 변환의 특징을 알려 주는 것임
- 알아보는 법
- 주어진 정방 행렬 A 에 대해 아래와 같이 정의한다
- x = 원소를 n개 갖는 벡터
- i = 상수, 고윳값
- I = 항등행렬 (뭘 곱해도 자기 자신 나오는 애)
- Ax = ix
- 행렬 (2x3) x 벡터(3x1)= 새로운 값인 벡터(2x1) : 원래의 벡터를 선형 변환 시키는 행렬.
- Ax-ix=0
- (A-iI)x=0
- x가 해를 가지기 위해선 즉 0이 아니기 위해선 (A-iI)의 역행렬이 없어야 함
- 역행렬이 없으려면 A-iI의 행렬식이 0 이어야 함
- 행렬식이 0이기 위해선 det(A-iI)=0 이 필요함 우리는 이를 특성방정식이라고 지칭함
- ad-bc = 0 으로 정의하고 미지수인 i , 즉 고윳값을 구하면 됨
- 2차방정식을 풀어야 하기 때문에 고윳값이 2개의 경우가 나오며 각각의 case에 따라 해당하는 벡터를 구하면 됨
- i값을 (A-iI)x=0에 대입하여 고유벡터의 값을 구함
- 벡터의 값은 3x=2x'이런 식으로 나옴 (여기도 수식쓰기 귀찮아서...x=엑스원, x'=엑스투 라고 봅시다)
- x=2/3x'이기 때문에 벡터의 첫번째 값은 2/3, 두번째 값은 1이 되겠으나 동일한 기준으로 벡터를 작성하는것이 필요하니 가상의 수 t를 가정하고 두 값에 동일하게 곱한다고 볼 경우 첫번째 값은 2t, 두번째 값은 3t가 됨
- 이렇게 되면 고유벡터는 2,3으로 이루어진 벡터이며 동일하게 t 가 곱해진 형태가 됨
- 주어진 정방 행렬 A 에 대해 아래와 같이 정의한다
분석모형 응용 - 주성분 분석
주성분 분석 : 크기가 큰 행렬 (공분산, 상관 행렬 등 변수 많은 행렬) 을 나타날 때 변수 크기를 줄여주는 차원 축소를 하는 기법
- 주성분 분석 하는 이유
- 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가 출력됨
'👩💻LEARN : ML&Data > Book Study' 카테고리의 다른 글
[머신러닝을 위한 수학 with 파이썬, R] #5. 확률분포와 통계적 추론 (0) | 2023.01.30 |
---|---|
[머신러닝을 위한 수학 with 파이썬, R] #4. 확률과 통계 (2) | 2023.01.29 |
[머신러닝을 위한 수학 with 파이썬, R] #3. 미분과 적분의 이해와 응용 (0) | 2023.01.28 |
[머신러닝을 위한 수학 with 파이썬, R] #2. 머신 러닝을 위한 선형 대수 part1. 벡터, 내적외적, 역행렬 (0) | 2023.01.24 |
[머신러닝을 위한 수학 with 파이썬, R] #1. 데이터 과학과 파이썬 소개 (0) | 2023.01.24 |