두 벡터 u,v 간의 내적이 0이면 두 벡터는 직교 (orthogonal) 입니다.
두 벡터 u, a가 있을 때, 벡터 u를 a 위에 투영한 벡터를 projau라 하고 다음과 같이 구합니다.
proj (ection) a (위에) u (를 떨궜다) 라는 뜻입니다.
투영된(프로젝션) 벡터와 남은 보완(컴플리먼트) 벡터는 90도의 관계를 이룹니다. 이것이 무슨 뜻이냐면, 벡터를 a에 투영하고 나면 a에 떨구고 남은 u벡터의 방향성이 b벡터라고 하겠습니다. 그렇다면 b벡터는 보완 벡터라고 부르게 되고, 이는 u - projau 로 표현할 수 있습니다.
고로, 프로젝션된 벡터와 컴플리먼트 벡터는 직교한다. 그리고 프로젝션 벡터와 컴플리먼트 벡터를 합하면 원래의 벡터로 돌아올 수 있다는 것. 프로젝션을 하면 직교분할을 얻을 수 있다는 것을 얻을 수 있습니다.
주어진 행렬의 모든 열벡터가 서로 직교한다면, 이를 직교행렬이라고 합니다. 예시로,
이런 행렬들이 직교행렬이라 할 수 있는데, 서로 내적해보면 그 합이 전부 0이 되는것을 알 수 있습니다.
(1×4 + -2×2) = 0 , (2×2 + 2×1 + 6×-1) = 0 등등
이 중에서도 특별한 녀석이 있는데, 정규직교행렬이라고 하는 것이 있습니다. 이는 직교행렬이면서 모든 열벡터의 크기가 1인 행렬입니다.
선형시스템 Ax=b에서 행렬 A가 직교행렬이면, 해 x는 역행렬의 계산없이 다음과 같이 구할 수 있습니다.
축 별로 따로 계산할 수가 있습니다. 이건 굉장히 편한 방법인데, b에서 수선의 발을 내려 스칼라 값만큼 곱한 a만큼 이동하면 그것이 바로 Ax=b의 해라는 말입니다.
이 그림과 같은 예시로, 분홍색은 수선의 발을 내린만큼, 파란색또한 수선의 발을 내린만큼 이동하면 병렬으로 구할 수 있다는 것입니다.
하지만 이는 직교행렬이어야만 가능합니다.
정규직교행렬에서는 분모가 무조건 1이 되기 때문에, 내적만 곱하면 답이 됩니다.
QR 분해는 Q : 정규직교행렬, R : 상삼각행렬(upper trianglar matrix)로 이루어진 행렬분해입니다.
고로, Ax-b 문제를 분해해보면,
(QR)x = bQ(Rx) = b
Qy = b
로 보았을때,
내적으로 정규직교행렬의 해를 구하고, 후방대치법을 사용하여 Rx = y의 해를 구하면 됩니다.
QR분해는 그람-슈미트 과정을 행렬로 코드화 한 것입니다. QR분해는 주어진 행렬에서 정규직교성을 추출하여 계산의 편의를 도모한다는 점이 핵심입니다.
LU 분해의 경우, 선형시스템을 풀 때 병렬처리 할 수 없습니다.
QR 분해의 경우, Q 행렬이 꽉찬 구조를 가진 행렬이기 때문에 메모리 사용량이 많은 단점이 있습니다.
LU 분해와 QR 분해는 n x n 정방행렬에 대한 행렬분해이고,
SVD, 즉 특이값 분해는 일반적인 m x n 행렬에 관한 행렬분해입니다. 특이값 분해는 직교분할, 확대축소, 차원변환과 관련이 있습니다.
특이값 분해는 주어진 행렬을 세 행렬의 곱으로 나누는 행렬분해입니다.
U: 입력 차원인 Rm 공간에서의 회전
D: 입력 차원인 Rn 공간에 대해 축방향으로의 확대축소한 후, Rn -> Rm으로 차원 변환
V: 입력 차원인 Rn 공간에서의 회전
위와 같은 세 과정을 말합니다.
공분산 행렬에 관한 어떤 직교분해를 한다!
2차원 평면을 1차원 직선으로 변환할 수 있는 방법입니다. 펼쳐져 있는 데이터를 한 직선에 수선의 발을 내려 데이터를 응집시킵니다. 이렇게 하면 scatter된 데이터가 하나의 직선으로 모일 수 있고 응집성이 강한 방향으로 해당 데이터들의 경향을 파악할 수 있습니다.
공분산행렬에 대해 주성분분석(PCA)은 다음과 같습니다.
이런 내적의 과정을 거쳐 모든 점을 합하면 데이터는 6개, 공분산행렬은 위와같은 28 18 18 12 의 2 x 2 행렬이 나오게 된다고 합니다.
(사실 잘 모르겠으니 공분산행렬을 조금 더 공부하기)
공간은 덧셈연산에 닫혀있고, 스칼라 곱 연산에 닫혀있는 집합입니다. 대표적인 공간은 n-차원 벡터의 집합입니다. 모든 n-벡터 집합은 공간이라고 할 수 있습니다.
최소제곱법은 선형시스템 Ax=b에 대한 해 x가 없음에도 불구하고, 할 수 있는 최선의 대안 x̅ 를 도출하는 기법입니다. 최소제곱법은 원래의 선형시스템 Ax=b 가 아닌 아래의 선형시스템을 해결합니다.
이 방법은 목표 b와 달성가능한 목표의 차이를 나타내는 벡터의 제곱길이를 최소화시키는 의미를 가지기 때문에 최소제곱법 (least squares method)이라고 불리웁니다.
이 해를 구하기 위해서는 주어진 선형시스템의 양변에 전치행렬을 곱하면 구할 수 있습니다.
원래의 선형시스템을 만족하는 해는 절대로 구할 수 없지만, 근사해(approximate solutin)을 구할 수 있습니다. b를 평면에 투영한 결과물의 근사해를 찾아낼 수 있는 것입니다.
이는 흔히 알고 있는 선형회귀 (linear regression) 에 사용될 수 있습니다.
평균으로 구했을 때, 극의 값(최대, 최소)에 영향을 많이 받기 때문에 이를 소거하기 위해 중앙값을 사용합니다.
import statistics
a = [79, 54, 74, 62]
statistics.mean(a) # 평균
statistics.median(a) # 중앙값
편차(값과 평균의 차이)의 제곱의 합을 자료의 수로 나눈 값입니다.
import statistics
statistics.variance(a) # 분산
statistics.pvariance(a) # 모분산
분산의 양의 제곱근입니다.
import statistics
statistics.stdev(a) # 표준편차
statistics.pstdev(a) # 모표준편차
import numpy
numpy.var(a) # 모분산
numpy.std(a) # 모표준편차
numpy.var(a, ddof=1) # 분산
numpy.std(a, ddof=1) # 표준편차
분모의 n-1 부분에서 1을 담당합니다.
자료를 정렬하였을 때 가장 큰 값과 가장 작은 값의 차이입니다.
max(a) - min(a)
전체자료를 정렬했을 때, 1/4, 2/4, 3/4 위치에 있는 숫자를 말합니다. (대략적인 숫자입니다.)
import numpy
numpy.quantile(a, .25)
numpy.quantile(a, .5)
numpy.quantile(a, .75)
numpy.quantile(a, .60)
# 0-1 사이 아무값이나 들어가도 됩니다.
# (왼쪽 60% 오른쪽 40%의 값입니다)
사분위수를 사용하면 어느정도 대략적인 모습을 파악할 수 있습니다.
numpy.quantile(a, .75) - numpy.quantile(a, .25)
어떤 값이 평균으로부터 몇 표준편차 떨어져있는지를 의미하는 값입니다.
import scipy.stats
scipy.stats.zscore(a)
scipy.stats.zscore(a, ddof=1)
분모의 n-1 부분에서 1을 담당합니다. 주어진 데이터가 모집단이냐, 아니면 표본이냐의 차이에 따라 다른값을 계산해주면 됩니다.