D: m×n인 n차원 확대/축소 - 확대/축소 크기에 따른 정렬형태 대각행렬 - 축방향으로 확대/축소
VT: n×n인 n차원 회전행렬 - 정규직교행렬(행벡터)
SVD의 의미
U: 입력 차원인 Rm공간에서의 회전
D: 입력 차원인 Rn 공간에 대해 축방향으로의 확대축소한 후, Rn→Rm으로차원변환
V: 입력차원인 Rn 공간에서의 회전
SVD의 활용
- A의 특이값 분해 U,D,V는 각각 열벡터의 순서대로
행렬 A의 열벡터가 어떤 방향으로 강한 응집성을 보이고 있는지를 분석한 것입니다.
- 열벡터를 순서대로 p개 취한다면,
강한 응집성을 가지는 p개의 방향으로 수선의 발을 내린 A의 근사치 A′를 재구성 할 수 있습니다.
- 영상처리 등에서 많이 쓰입니다.
예 A3×2=U3×3D3×2VT2×2 ⎣⎢⎡22−2121−2−2⎦⎥⎤=⎣⎢⎡21021010−210−21⎦⎥⎤⎣⎢⎡421⎦⎥⎤[2121−2121] =U′3×1D′1×1V′T1×2=A′3×2 =⎣⎢⎡210−21⎦⎥⎤[4][2121]=⎣⎢⎡2200−2−2⎦⎥⎤ A′=⎣⎢⎡2200−2−2⎦⎥⎤ => 응집성이 낮은 것을 버린 결과 => 유의미한 부분을 더 돋보이게 할 수 있습니다.
주성분 분석: (PCA: principal component analysis)
다수의 n차원 데이터에 대해 데이터의 중심으로부터 데이터의 응집력이 좋은 n개의 직교방향을 분석하는 방법입니다.
데이터의 공분산행렬(covariance matrix)에 대한 고유값(eigenvalue) 분해에 기반을 둔 직교분해입니다.
데이터의 중심 구하기 -> 데이터의 평균 m
m=k1∑i=1Kxi
가진 임의의 데이터 xi와 중심간의 벡터의 외적을 통해 차원을 쌓습니다.
C=k1∑i=1K(xi−m)(xi−m)T
C=WDWt
W: n차원 회전행렬 - 정규 직교행렬
D: n차원 확대축소 - 대각행렬 고유값이 크면 응집성이 큽니다.
PCA의 활용: 벡터공간의 최소제곱법
집합과 공간
집합(Set)
임의의 원소(element)를 수집하여 만든 모임을 말합니다.
연산에 닫혀있다
집합에 속해있는 원소를 뽑아 연산을 실행항 결과가 다시 그 집합에 속한 경우를 말합니다.
공간(Space): 다음 두 연산에 닫혀있는 집합을 말합니다.
1. 덧셈 연산에 닫혀있다.
2. 스칼라 곱 연산에 닫혀있다.
열공간 (column space)
행렬 A의 열벡터들에 대한 가능한 모든 선형조합의 결과를 모아 집합으로 구성한 공간을 말합니다.
해가 있다 : 열공간 내에 있다는 것을 말합니다.
해가 없다: 열공간을 벗어난다는 것을 말합니다.
최소제곱법 (least squares method)
선형시스템 Ax=b에 대한 해가 없음에도 불구하고, 가장 가까운 해답(근사해)을 내는 방법입니다.
벡터 b를 행렬 A가 정의하는 열공간으로 투영한 결과를 가장 가까운 답인 x로 봅니다.
Ax=b=projab
목표 b와 달성가능한 목표 b의 차이를 나타내는 벡터 (b−b)2의 길이를
최소화 시키는 의미를 지니기 때문에 최소제곱법이라고 불립니다.
Ax=b
=> ATAx=ATb
=> x=(ATA)−1ATb
최소제곱법의 응용: 선형회기 (linear regression)
선형시스템 구성 Ax=b ⎣⎢⎢⎢⎡−31−111131⎦⎥⎥⎥⎤[mb]=⎣⎢⎢⎢⎡−1−133⎦⎥⎥⎥⎤
=> A4×2x2×1=b4×1
최소제곱법 적용 (ATAx)2×2x2×1=(ATb)2×1
SVD, PCA, 최소제곱법 실습해보기
SVD
import numpy as np
A = np.array([[1,1],[-2,2],[-1,-1]])print("A:")print(A)
A:
[[ 1 1]
[-2 2]
[-1 -1]]
U: 정규직교행렬(열벡터), UU: 열벡터를 한 개 취함
U = np.array([[1/1.414,0,1/1.414],[0,1,0],[-1/1.414,0,1/1.414]])
UU = U[:,:1]print("U:")print(U)print("UU:")print(UU)
import numpy as np
from sklearn.decomposition import PCA
X = np.array([[-1,-1],[-2,-1],[-3,-2],[1,1],[2,1],[3,2]])
pca = PCA(n_components=2)
pca.fit(X)