※ 본 내용은 Coursera, Machine Learning - Andrew Ng 강의, 강의자료를 바탕으로 작성하였습니다.
<Dimensionality Reduction>
Dimensionality Reduction은 여러 feature를 하나의 feature로 변환하는 등의 방식으로 차원을 줄이는 것을 의미한다.
- Motivation 1 : Data Compression
Dimesionlity Reduction을 사용하는 이유 중 하나는 Data Compression이다.
말그대로 feature의 수를 줄이므로써 데이터를 압축하는 것이다.
이렇게하면,
(1) Memory, Disk 등의 자원을 효율적으로 사용할 수 있다.
(2) 알고리즘이 더 빠르게 동작할 수 잇다.
주로 (2)번의 이유가 핵심적이라고 볼 수 있다.
위 그림은 2차원 데이터를 1차원으로 압축한 예시이다. 2개의 변수를 조합하여 하나의 새로운 변수 z를 생성한다.
* 10,000차원 -> 1000차원으로 압축하는 등의 과정도 가능하다.
- Motivation 2 : Visualization
시각화는 3차원까지만 가능하기 때문에, 많은 feature를 압축하는 것이 시각화하는 것에도 유용하다.
국가별로 다양한 feature가 있어 특징을 시각화하기 어렵지만, 적절하게 두 개의 차원으로(z1, z2) 축소시켜 시각화할 수 있다.
그 결과 대략적으로 GDP가 어느 정도인지 GDP/person 은 어느 정도인지에 대한 정보를 파악할 수 있게 되었다.
<PCA, Principal Component Analysis>
PCA는 Dimensinality Reduction에 자주 사용되는 알고리즘 중 하나이다.
데이터를 projection시킬 벡터를 찾는데,
해당 직선(2차원에서 투영할 시)과 데이터 사이의 거리제곱의 합이 최소가 되는 벡터를 찾는다.
예를 들어 위와 같은 데이터가 있을 때, l1으로 표시된 직선에 데이터를 projection하는 것이 l2로 표현된 직선에 projection하는 것보다 데이터와 직선사이의 거리 제곱의 합이 더 작을 것임을 알 수 잇다.
이때의 거리를 projection error라고 한다.
※ PCA와 linear regression의 차이
기본적으로 linear regression과 PCA에서 오차를 계산하는 방법이 다른 것을 알 수 있다.
또한 근복적으로도 다른 알고리즘이다.
- Preprocessing
PCA를 적용하기 전에는 다음과 같은 전처리를 수행해야 한다.
(1) Mean Normalization( 평균을 0으로, x:= x-m)
원점 지나는 vector를 찾는 과정이기 때문에 필요한 것으로 생각됨.
* PCA의 경우 수학적 증명을 많이 생략하였다. 자세한 이유는 수학적 내용을 살펴봐야 될듯.
(2) Feature Scaling (scale 차이가 큰 경우)
feature sacling은 변수의 variance를 최대한 보존하는 방향으로 수행되는데,
scale이 유독 큰 변수가 있는 등의 경우 해당 변수가 variance계산에 미치는 영향이 커지는 등의 문제가 발생하기 때문이다.
- 알고리즘 적용
수식과 라이브러리를 통해 PCA를 적용하는 법은 다음과 같다.
이하의 수식이 projection error를 최소화하는 수식과 동일한 내용이다. (증명은 생략하였음)
(1) sigma = covariance matrix를 계산한다. (nXn 크기)
*sum을 표시하기 위한 sigma와 다른 것에 주의
(2) 해당 matrix에 대한 singular value decomposition을 수행한다.
* Octave기준 svd 함수 사용,
* Covariance matrix의 경우, eigenvector를 찾는 것과 동일
(3) 결과로 나온 U 행렬 (nXn 크기)에서 k번째 열까지를 선택하여 $ U_{reduce}$ matrix로 사용한다.(nXk 크기)
*k는 축소 후 차원
(4) $ z^{(i)} = (U_{reduce})^Tx^{(i)} $, kX1 크기의 차원이 축소된 데이터를 얻을 수 있다.
다시 한 번 정리하면 위와 같다.
- Reconstruction
압축했던 데이터를 다시 복원해야할 수도 있다.
압축에 사용됐던 식을 이용하여 복원을 수행할 수 있다.
$ z^{(i)} = (U_{reduce})^Tx^{(i)} $
임을 이용하여
$ x_{approx}^{(i)} = U_{reduce}z^{(i)}$
로 계산하면 된다.
(* U는 orthogonal 하기 때문에 transpose가 역함수와 동일하다고 한다. 따라서 위 식이 성립)
완전히 복원에 성공하는 것은 아니고, projection을 했던 형태 그대로 원래의 차원에 위치시킬 수 있다.
따라서 $ x_{approx}$로 표시한다.
- 성능 평가, choosing k (# of principal components)
PCA를 수행할 때는 차원을 축소한 후에 variance가 얼마나 보존되는지가 중요하다.
따라서 다음과 같은 수식을 통해 k를 선택할 수 있다.
그렇다면 k를 하나씩 줄여가며 위 식을 모두 계산해야할까?
앞서 svd(Sigma)의 결과로 나왔던 S matrix를 이용하면 그렇지 않아도 된다.
좌측의 경우 k마다 계산을 반복해야 되는 reconstruction을 수행해야하는 번거로움이 있지만,
우측은 matrix의 결과만을 이용하여 k를 선택할 수 있다.
S matrix는 대각행렬로 주어지고,
검은색 사각형으로 표시한 식이 varinace의 보존 비율을 계산하는 식과 동일한 의미이다.
우측의 방법이 계산상 유리하다.
꼭 k를 선택할 때 뿐만 아니라, 어떤 k를 선택했을 때 variance가 얼마나 보존되었는지 나타내는 지표로도 사용할 수 있다.
* 이 부분 역시 수식에 대한 의미는 별도로 공부해야 할 듯.
- Applying PCA
PCA를 적용할 때 주의해야할 점이 있다.
PCA를 적용한 모델을 test할 때 test data도 같은 과정으로 압축을 수행해야 할 것이다.
즉, 앞서 x->z로 압축할 때, $ U_{reduce}$ matrix를 사용한 수식을 새로 들어오는 test 또는 validation data에도 적용을 해야한다.
이때 $ U_{reduce}$ 행렬이 train 데이터로만 결정되어야 한다.
다시 말해 U = svd(sigma)로 계산되므로, sigma = Convariance Matrix가 training data로만 계산되어야 한다.
또한 잘못된 사용 예시도 존재한다.
(1) to prevent overtting
feature를 줄임으로써 overfitting을 방지하게 위해 PCA를 사용하는 것은 권장하지 않는다.
대신 regularization을 사용하는 것이 좋다.
PCA가 효과 있을 수도 있지만, 잃는 데이터가 존재하기 때문이다.
regularization은 잃는 데이터 없이 overfitting을 방지할 수 있으므로 이를 쓰는 것이 더욱 좋다.
(2) 무조건 PCA를 적용
PCA는 유용한 알고리즘이지만 앞서 말했듯이 잃는 데이터가 존재할 수 있다.
따라서 original 데이터로 사용해서 발생한 문제를 PCA로 해결할 수 있을 때만 사용하는 것이 좋다.
ex) 너무 많은 feature로 인한 속도 저하
'머신러닝 > Machine Learning(Ng)' 카테고리의 다른 글
[9주차 - 2] Recommender System (0) | 2021.08.24 |
---|---|
[9주차 - 1] Anomaly Detection (0) | 2021.08.23 |
[8주차 - 1] Clustering, K-means algorithm (0) | 2021.08.21 |
[7주차] Support Vector Machine (0) | 2021.08.19 |
[6주차 - 2] prioritizing what to do, error matrix (0) | 2021.08.18 |