1. Dimensionality Reduction 의 장점
- Data Compression
1) 이를 통해, 컴퓨터 메모리를 절약할 수 있다
2) 학습 알고리즘의 속도를 더 높일 수 있다
2. Principal Component Analysis (PCA algorithm)
- 목적 : 각각의 데이터들의 차원을 줄이려 할 때, 어떤 차원으로 줄일 것인지 결정해줌
-> reduce할 surface를 구하는 알고리즘이라고 생각
- 방법 : reduce 할 surface를 찾기 위해서, 각각의 data들로부터의 합이 최소가 되는 surface를 찾는다
** 이러한 data들로부터의 거리 합을 "projection error"이라고 부른다
- 다른 해석 : 사실상, 특정 값을 구성하는 함수의 "벡터"들의 갯수를 줄인 것이라고 봐도 됨
-> 이렇게 해서 줄여진 벡터들이 구성하는 걸 "surface"라고 부른다
3. PCA 와 Linear Regression 의 차이점
- projection error (PCA) 와 cost function (linear regression) :
-> PCA의 경우, "surface로부터의" 수직거리 합을 최소화 하는걸 목표로 함
-> linear regression의 경우, "x축, y축으로부터의" 수직거리 합을 최소화 하는걸 목표로 함
- prediction 의 유무
-> PCA의 경우, 따로 predict 하려는 y 값이 없다
-> linear regression의 경우, predict하려는 y값이 있다
4. PCA에서 surface를 찾는 과정
1) Data preprocessing
- trainning set들의 변형 :
- trainning set들의 mean(평균값)을 구한다
- 각각의 trainning set들을 mean normalization(또는 feature scaling) 해준다
-> ( x - μ ) 처리를 해준다
- data들의 scale이 너무 심하게 다를 경우, 정규화를 시켜준다
-> ( x - μ ) / S 처리를 해준다
2) "covariance matrix"를 계산
3) "eigenvectors"를 계산한다 ( 2번 과정의 결괏값을 넣어서 ) -> 이걸 octave에 svd 함수에 적용하면 됨
-> svd 함수의 출력값 중 U : n*n 매트릭스 꼴이다
-> 만약, n차원에서 k 차원으로 줄이고싶다면, U에서 1~k 번쨰 매트릭스만 선택하면 된다
-> z = U^T * x 이므로, U^T에 의해 k차원으로 축소됨
5. PCA를 통해 k차원으로 줄이고자 할 때, 어떤 값을 k값으로 설정할 것인가?
- k차원으로 줄였을때, 얼만큼의 데이터가 정확하게 보존이 되는가?
1) projection error값을 구한다 (각 데이터들과 sirface 사이의 거리**2 평균)
2) 전체 데이터의 variance값을 구한다
3) 1번 값을 2번값으로 나눈다
ex. 3번값이 1%보다 작은 경우 -> 99%의 데이터가 보존된다
4%보다 작은 경우 -> 96%의 데이터가 보존된다 ....등등
- 방법(1) : k=1 에서부터 시작해서 하나씩 늘려간다
1) k=1일때, 99%가 보존되는지 확인한다
2) 만족하지 않을 경우, k+=1 을 한 다음에, 1번부터 다시 시작한다
- 방법(2) : svd를 octave에서 실행하면 S 매트릭스가 산출된다
- 이때의 S 매트릭스를 이용해서 보존률이 99%가 되는지를 확인한다 (훨씬 계산이 간단)
why? S 매트릭스의 경우, 대각성분만 존재하는 간단한 매트릭스이다