해당 내용은 Andrew Ng 교수님의 Machine Learning 강의(Coursera)를 정리한 내용입니다.
[Data Compression]
엄청 많은 feature가 있는 training set이 있다고 하자. 그리고 그 중에서 아래와 같이 cm와 inch의 feature만을 뽑아서 그래프로 나타내보았다.

이와 같이 cm와 inch는 길이에 대한 feature이며, 두 feature가 연관성이 높다고 볼 수 있다. 우리는 2차원의 data를 1차원으로 줄여서 합칠 수 있다.
이렇게 차원을 줄이면 data의 양이 감소해서 사용되는 메모리를 절약할 수 있으며 학습 알고리즘의 속도를 높여준다.

3차원에서 2차원으로 감소하는 것은 위와 같다. feature 을 2차원의 평면에 투영해서 feature 로 감소하였다.
[Data Visualization]

우리가 만약 50개, 즉, 50차원의 feature가 있다면 어떻게 이 특성을 visualizing 할 수 있을까?
데이터의 차원이 3차원이 넘으면 시각적으로 표시하기 어렵고, 고차원 데이터를 2차원 또는 3차원으로 감소시켜서 시각화하여야 한다.

여기서는 에서 로 차원을 축소하였다. 이렇게 차원을 축소하면 아래 그래프와 같이 시각적으로 쉽게 표현되며, 우리는 기존 feature를 효과적으로 요약해주는 새로운 feature 를 찾으면 된다.

- Principal Component Analysis(PCA)
차원 축소에 가장 널리 사용되는 알고리즘은 Principal Component Analysis(PCA) : 주성분분석이다.

2차원에서 1차원으로 줄이는 예제를 한번 살펴보자. PCA에서는 우선 projection(투영)하기 좋은 line을 찾아야 한다.
projection하기 좋은 line은 projection error가 가장 작도록하는 line을 선택하면 된다.
만약 우리가 위 그래프에서 빨간색 line을 선택했다면, projection error는 빨간색 line에서 sample들의 거리의 합이 될 것이다. 만약 분홍색 line을 선택했다면 projection error의 크기가 커지기 때문에 적절하지 않다고 볼 수 있다.
요약하면 아래와 같다.

만약 2차원에서 1차원으로 감소하는 문제가 있다면, 우리는 projection error를 최소로 만드는 하나의 벡터()를 찾으면 된다.
확장해서 n차원에서 k차원으로 감소하는 문제가 있다면, 우리는 projection error를 최소로 만드는 k개의 벡터()를 찾는다.
PCA는 Linear Regression과 유사하게 보이지만 전혀 다르다.

Linear Regression은 각 sample data와 line 사이의 square error(vertical distance)를 최소화하는 것이고, y를 예측하기 위한 함수이다.
PCA는 각 sample data와 line 사이의 shortest orthogonal distance를 최소화하며, y와는 전혀 관계없다.
[PCA Algorithm]
PCA 알고리즘을 적용하기 전에 우선 Data preprocessing이 필요하다.

첫 번째로 mean normalization을 해서 를 구한 후에, 각 를 로 변경한다.
두 번째는 feature scaling이며, 로 범위를 scaling 한다. 는 standard deviation(표준편차)이다.

PCA 알고리즘에서 우리는 벡터 와 새로운 feature 구해야 한다.
우리는 이 두 가지를 구하기 위해서 아래와 같은 방법을 사용한다.

1. 아래의 식으로 covariance matrix(공분산행렬)을 계산한다. 여기서 는 summation 이 아니라 matrix를 의미하며, 만약 feature 이라면 covariance matrix는 n x n 행렬이 된다.
2. 1번에서구한 covariance matrix의 eigenvectors를 계산한다.
(여기서는 단순히 Octave의 라이브러리를 사용해서 구한다고 설명한다. 다음에 PCA를 다시 한번 살펴보면서 정리가 필요할 것 같다...)
Octave에서 사용하는 방법은 아래와 같다.
[U, S, V] = svd(Sigma);
여기서 Sigma는 n x n의 covariance matrix이다.
이 식을 통해서 우리는 n x n의 matrix를 구할 수 있고, matrix의 1에서 k번째 열까지가 우리에게 필요한 matrix이다.

3. 2번에서 구한 matrix에서 1 ~ k열까지를 취하고, 를 계산한다. 는 아래와 같이 Ureduce(k번째 열까지 취한 matrix)를 Transform해서 의 곱으로 구한다. 결국 는 k차원의 vector가 된다.

요약하면 아래와 같다.

- Applying PCA
[Reconstruction from Compressed Representation]
위에서 우리는 n-차원에서 k-차원으로 축소하는 것을 배웠는데, 다시 k-차원에서 n-차원으로 어떻게 돌아갈 수 있을까?

를 구할 때의 식에서 matrix를 곱해준다.
여기서 구해지는 값은 완벽하게 동일한 x값이 아니라 근사값이다. 즉, 완벽하게 원상태로는 돌아갈 수 없다.
만약 을 구하고 싶으면, 을 구해주면 된다.
[Choosing the number of principal components]
이번에 알아볼 내용은 우리가 축소하길 원하는 차원 k(number of principal components)를 어떻게 정할 수 있느냐에 관한 것이다.

우리는 아래와 같은 concept로 k의 값을 선택할 것이다.
1. Average squeared projection error:
projection error의 제곱 평균을 구한다.
2. Total variation in the data:
분산을 구한다.
3. 다음 식을 만족하는 가장 작은 k값을 선택한다.
위의 조건을 만족할 때, variance의 99%가 보존된다고 한다. 필요에 따라서 0.01이 아닌 0.05, 0.10 등 다른 값을 사용할 수 있고, 그때 보존되는 variance는 95%, 90%가 된다.

그래서 우리는 k를 점차 늘려가면서 위 알고리즘을 수행하면서 3번식의 값이 0.01보다 작은지 확인하는 방법(왼쪽)을 사용할 수 있다. 그러나 이것은 비효율적이고, 행렬 연산을 사용(오른쪽)하면 효율적으로 수행할 수 있게 된다.
오른쪽 방법처럼 SVD(Singular Value Decomposition)을 사용하면 효율적으로 k를 구할 수 있다.
먼저 covariance matrix Sigma를 구하고, Sigma에 대해서 SVD를 적용한다.([U, S, V] = svd(Sigma))
이때, matrix를 사용하면 retained variance가 99% 이상이 되는지 확인하는 과정을 쉽게 수행할 수 있다.
matrix는 다음과 같이 나타난다.
그리고 위 알고리즘에서 3번식은 다음 부등식으로 바꾸어서, 아래 부등식을 만족하는 가장 작은 k를 찾는다.

[Advice for Applying PCA]
어떻게 우리가 PCA를 사용해서 학습 알고리즘의 속도를 높히는지 살펴보자.
Supervised Learning Problem에서 input 와 label 로 이루어진 training example이 있을 때, 이 input의 feature dimension이 10000인 경우를 보자. 만약 vision problem을 처리하기 위해서 100px x 100px image를 사용할 때, 10000pixel이 feature가 되고, 이런 경우에는 학습 알고리즘의 속도는 매우 느릴 수 밖에 없을 것이다.

이 때, 우리는 PCA를 사용해서 위와 같이 feature의 차원을 1000으로 축소하면 학습 알고리즘의 속도는 훨씬 빨라질 것이다. 에 대해서 를 사용해서 의 새로운 feature를 얻는다.
주의해야 것은 PCA는 Training Set에 대해서만 해야하며, 이후에 Training Set에서 적용한 Mapping을 CV Set이나 Test Set에 적용해야 한다.(를 구하는데에 training set만 사용해서 구하고, 이렇게 구한 를 사용해서 를 구하라는 의미인 것 같다)
PCA를 적용함으로써 다음과 같은 이점을 얻을 수 있다.

1. 압축
- 저장되는 data의 memory/disk 감소
- 학습 알고리즘 속도 증가
2. 시각화
- k = 2 or k = 3으로 차원을 낮추어서 시각적으로 확인하기 용이해짐
Bad use of PCA : To prevent overfitting

PCA를 사용하면 feature dimension이 줄어들기 때문에 overfitting을 피하는데에도 사용할 수 있을 것 같지만, overfitting 문제를 해결하려고 PCA를 사용하는 것은 좋지 않다. PCA는 정보의 양을 감소시키고, 특히 예측값에 상관없이 차원을 축소하기 때문에 꼭 필요한 정보를 잃을 수도 있다.
따라서, overfitting 문제를 해결하려면 regularzation을 사용하는 것이 권장된다.
- Regularization

때때로 많은 사람들이 위와 같은 절차로 Machine Learning 시스템을 디자인한다.
하지만, PCA 없이 original/raw data로 ML을 학습하고, 원하는데로 동작을 하지 않는다면 그때 PCA를 고려하는 것이 더 좋은 방법이다.

'Coursera 강의 > Machine Learning' 카테고리의 다른 글
[Machine Learning] Anomaly Detection (0) | 2020.09.02 |
---|---|
[Machine Learning] Exam 7 (Week 8) (0) | 2020.08.27 |
[Machine Learning] Unsupervised Learning 비지도 학습 (0) | 2020.08.25 |
[Machine Learning] Exam 6 (Week 7) (0) | 2020.08.25 |
[Machine Learning] SVM : Kernel (0) | 2020.08.23 |
댓글