ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Week 8] Principal Component Analysis
    Courses/Andrew Ng - Machine Learning 2022. 1. 30. 15:13

    Principal Component Analysis Problem Formulation

     

     차원 축소를 실행하는 알고리즘인 PCA(Principal Component Analysis)에 대해 알아봅니다.

     

     데이터 셋을 관통하는 임의의 빨간 직선을 긋습니다. 데이터들을 직선 위에 투영합니다. 투영된 점과 데이터들 사이의 거리가 가장 짧은 더 낮은 차원의 표면이나 직선을 찾는 것이 PCA입니다. PCA를 적용하기 전에 feature scaling을 진행해야 합니다.

     

     PCA를 수학적으로 풀어보자면 , 데이터를 2차원에서 1차원으로 축소하는 벡터 u^(1)을 찾는 것 입니다. 이 그림에서 u^(1)은 2차원 벡터입니다. u^(1)은 투영 오차를 최소화하는 직선입니다. 즉 PCA는 n차원 데이터를 k차원으로 축소합니다.  

     

     3차원에서 2차원으로 축소한다면 K=2가 됩니다. 찾는 벡터는 u^(1), u^(2)가 됩니다. 두 벡터는 평면을 정의하게 됩니다. 그 평면에 3차원 데이터들을 투영합니다. 이 때 데이터들은 평면에 90도 직교로 투영한 후 오차의 제곱을 최소화합니다. 

     

     PCA와 선형 회귀는 유사해보이지만 전혀 다른 알고리즘입니다. 선형 회귀는 데이터와 가설 사이의 수평축에 수직인 거리의 최솟값이고 PCA는 직교 오차의 최솟값입니다. 또 선형 회귀는 예측하려는 변수 y가 있지만 PCA는 변수 y가 존재하지 않습니다. 모든 변수는 동일하게 취급됩니다.

     

    Principal Component Analysis Algorithm

     

     

     PCA를 구현해봅니다. 적용 전 반드시 데이터 전처리가 필요합니다. 각 데이터에 데해 평균 정규화(Mean Normalization)이 필요합니다. 모든 데이터의 평균을 구한 후 각 데이터를 평균으로 빼고 표준 편차나 최대값 - 최소값으로 나눕니다.

     

     그 후 공분산 행렬을 계산합니다. 어떤 행렬에 공분산 행렬을 내적하면 데이터가 어떻게 분산되는 지 보여줍니다.

     

     필요한 함수들은 라이브러리에 구현되어 있습니다. 

    1. feature scaling 진행

    2. 공분산 행렬 계산

    3. svd 함수 실행하여 행렬 U,S,D를 얻는다

    4. U^(1) ~(k) 까지의 열로 Ureduce 행렬을 만든다

    5. z 방향으로 투영한 x^(i)의 값을 구한다

     

     강의에서도 수학적인 설명은 스킵하고 저도 이해가 잘 가지 않아 이번에는 제대로 요약을 할 수 없었네요.. 공분산 행렬이나 특이값 분해같은 토픽에 대해 더 알아봐야 할 것 같습니다.

     


    혼자서 강의를 듣고 정리한 것이니 틀린 점이 있다면 언제든지 지적 부탁드립니다 :)

    'Courses > Andrew Ng - Machine Learning' 카테고리의 다른 글

    [Week 9] Anomaly Detection  (0) 2022.02.08
    [Week 8] Applying PCA  (0) 2022.01.30
    [Week 8] Motivation  (0) 2022.01.30
    [Week 8] Clustering  (0) 2022.01.27
    [Week 7] SVMs in Practice  (0) 2022.01.23

    댓글

Designed by Tistory.