-
Notifications
You must be signed in to change notification settings - Fork 1
darkpgmr 선형대수학
WooKyoung Noh edited this page Dec 4, 2015
·
2 revisions
http://darkpgmr.tistory.com/103
- identity matrix
julia> eye(3)
3x3 Array{Float64,2}:
1.0 0.0 0.0
0.0 1.0 0.0
0.0 0.0 1.0
julia> A = [1 -1; -2 1]
2x2 Array{Int64,2}:
1 -1
-2 1
- transpose of a matrix
julia> transpose(A)
2x2 Array{Int64,2}:
1 -2
-1 1
julia> A'
2x2 Array{Int64,2}:
1 -2
-1 1
- determinant
julia> det(A)
-1.0
- trace
julia> trace(A)
2
- diagonal matrix
julia> diag(A)
2-element Array{Int64,1}:
1
1
- eigenvalue, eigenvector
julia> D,V = eig(A)
([2.414213562373095,-0.4142135623730949],
2x2 Array{Float64,2}:
0.57735 0.57735
-0.816497 0.816497)
julia> D,V = eigvals(A), eigvecs(A)
([2.414213562373095,-0.4142135623730949],
2x2 Array{Float64,2}:
0.57735 0.57735
-0.816497 0.816497)
- singular value decomposition
julia> U,S,V = svd(A)
(
2x2 Array{Float64,2}:
-0.525731 0.850651
0.850651 0.525731,
[2.6180339887498945,0.381966011250105],
2x2 Array{Float64,2}:
-0.850651 -0.525731
0.525731 -0.850651)
http://darkpgmr.tistory.com/104
- 행렬 A의 행렬식 값 det(A) = 0이면 행렬 A는 역행렬을 갖지 않고 det(A)≠0이면 A의 역행렬이 존재
- det(A)는 선형변환의 스케일(scale) 성분을 나타내는 값
- det(A)>0이면 도형의 방향(orientation)이 보존되고 det(A)<0이면 도형의 방향이 보존되지 않는다
julia> A = [1 2; -1 3]
2x2 Array{Int64,2}:
1 2
-1 3
julia> det(A)
5.0
julia> A = [1 -1; -2 1]
2x2 Array{Int64,2}:
1 -1
-2 1
julia> det(A)
-1.0
- det(A) = 0이면 직선(선분)으로 변환됨
julia> A = [-2 -1; 2 1]
2x2 Array{Int64,2}:
-2 -1
2 1
julia> det(A)
0.0
julia> A = [2 -1; -2 1]
2x2 Array{Int64,2}:
2 -1
-2 1
julia> det(A)
0.0
- 길이 1인 정육면체를 변환시키면 부피가 7인 평행육면체로 변환
julia> A = [2 2 1; -1 1 0; 3 0 -1]
3x3 Array{Int64,2}:
2 2 1
-1 1 0
3 0 -1
julia> det(A)
-7.0
- 3차원의 경우에는 det(A) = 0이면 동일 평면상의 점들로 변환됨
julia> A = [2 2 1; -1 1 0; 0 0 0]
3x3 Array{Int64,2}:
2 2 1
-1 1 0
0 0 0
julia> det(A)
0.0
http://darkpgmr.tistory.com/105
- 어떤 행렬에 대해 고유값은 유일하게 결정되지만 고유벡터는 유일하지 않기 때문
- 정방행렬 중에서도 일부 행렬에 대해서만 적용 가능한 대각화 방법
- symmetric matrix (대칭행렬)
- 항상 고유값 대각화가 가능
- 직교행렬(orthogonal matrix)로 대각화가 가능
- 특이값분해(SVD), 주성분분석(PCA) 등에서 가장 기본이 되는 성질로 활용
- orthogonal matrix (직교행렬)
- 자신의 전치행렬(transpose)를 역행렬로 갖는 정방행렬
- 열벡터들은 서로 orthonomal(정규직교)
http://darkpgmr.tistory.com/106
- SVD
- 행렬을 대각화하는 한 방법
- 모든 m x n 행렬에 대해 적용 가능
- pseudo inverse를 계산하는 가장 효율적인 방법 중 하나
- singular matrix (특이행렬)
- det(A) = 0인 정방행렬
- full SVD
- 행렬 m×n 행렬 A를 SVD로 분해 (m > n)
- reduced SVD
- thin SVD, compact SVD, truncated SVD
- pseudo inverse
- 임의의 m x n 행렬에 대해서 정의
- least square method
- pseudo inverse를 이용하여 해를 구함
http://darkpgmr.tistory.com/108
julia> A = [1 3.5 1; 2 4.3 1; 3 7.2 1; 4 8.0 1]
4x3 Array{Float64,2}:
1.0 3.5 1.0
2.0 4.3 1.0
3.0 7.2 1.0
4.0 8.0 1.0
julia> U,S,V = svd(A)
(
4x3 Array{Float64,2}:
-0.276574 0.82045 -0.0191787
-0.360731 0.200903 0.761256
-0.586348 0.0923116 -0.630615
-0.670505 -0.527236 0.14982 ,
[13.405223731206739,0.8653898605797355,0.3620457229374691],
3x3 Array{Float64,2}:
-0.405745 -0.704598 0.582162
-0.902998 0.21056 -0.374511
-0.1413 0.677647 0.721684)
julia> S
3-element Array{Float64,1}:
13.4052
0.86539
0.362046
http://darkpgmr.tistory.com/110
- Principal Component Analysis
- n 개의 벡터로 데이터 분포를 설명
- 벡터의 방향과 크기를 알면 이 데이터 분포가 어떤 형태인지를 가장 단순하면서도 효과적으로 파악할 수 있다.
- 여러 데이터들이 모여 하나의 분포를 이룰 때 이 분포의 주 성분을 분석해 주는 방법
- 데이터들의 분산(흩어진 정도)이 가장 큰 방향벡터
- 차원감소라 함은 n차원의 데이터를 xk = c1e1 + ... + ckek로 표현했을 때 e1, ..., ek를 새로운 좌표축으로 하는 공간에서 x를 (c1, c2, ..., ck)와 같이 k차원의 점으로 표현한다는 의미
- 데이터 압축의 의미는 {x}들을 그대로 저장하지 않고 k개의 주성분 벡터들과 계수 (c1, .., ck)들만을 저장하면 저장용량을 크게 줄일 수 있다는 의미이다. 참고로 SVD(특이값분해)를 이용한 데이터 압축은 데이터를 개별적으로 압축하지만 PCA는 데이터를 집합적으로 압축한다는 점이 다르다.
- 노이즈 제거란 의미는 k개의 주성분만을 이용해서 데이터를 복원함으로써 의미없는 노이즈 부분을 날린다는 의미
<< darkpgmr