alpyrithm_알파이리즘

DAY3. Dimension Reduction - PCA 본문

SM공부/Data Mining & Machine Learning

DAY3. Dimension Reduction - PCA

알파이 2020. 7. 24. 08:13

 

Summary

  • Dimension Reduction(차원 축소)
    • Dimension Reduction 기초
    • Dimension Reduction 적용 분야
    • Dimension Reduction의 목표
  • PCA(주성분 분석) 기초
    • PCA 개념
    • PCA 플로우

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Main

Dimension Reduction

  1. Dimension Reduction 기초
    • Dimension(차원)의 이해
      • 차원은 데이터 샘플과 관련된 차원, 기능 또는 변수의 수
      • 스프레스 시트를 예로 들 때, 시트의 여러 열을 생각할 수 있는데, 각 샘플은 새로운 행에 있고 각 열은 샘플의 속성들을 설명함
    • Dimension Reduction(차원 축소)의 필요
      • 변수를 축약하여 정보를 쉽게 표현(고차원 변수 -> 저차원 주성분 선택) 
      • 에코 심전도 데이터의 예
        • 에코 심전도 신호와 같은 시계열 데이터의 데이터 세트가 매우 크다고 가정하고, 의사들은 이 데이터 셋의 관찰을 통해서 심장마비 또는 뇌졸증의 징후를 찾아야 함
          • 개별 심장 박동의 대부분은 매우 유사
          • 기록된 환자의 심박 데이터에 약간의 노이즈가 포함
          • 노이즈에도 불구하고 심박 신호는 뚜렷하게 확인 가능
      • 차원의 저주
        • 차원의 저주란 feature 공간에서 차원이 많은 데이터로 작업할 때 발생하는 문제를 말하는 것으로 각 샘플에 대해 수집된 속성의 수를 말함
        • Pac-man이 이동을 위한 결정을 내리기 위해 필요한 데이터의 dimension로 그 의미를 이해 가능
      • Dimension Reduction의 유의미성
        • 차원 축소를 사용하면 데이터에서 불필요한 노이즈를 제거하여 결과적으로 데이터 세트의 크기를 축소하고, 전체 처리의 속도와 성능 향상이 가능
        • PCA, Auto Encoder는 데이터 셋들을 효과적으로 클러스터링하고 처리하는데 이용된 알고리즘
      • Dimension Reduction(차원 축소)의 의미
        • 데이터 시각화
          • 3차원이 넘어간 시각화는 우리 눈으로 볼 수 없으므로, 차원 축소를 통해 시각화 가능, 시각화를 통해 데이터의 패턴 인지 용이
        • 노이즈 제거
          • 쓸모없는 feature를 제거하여 노이즈 제거
        • 메모리 절약
          • 쓸모없는 feature를 제거로 메모리 절약
        • 퍼포먼스 향상
          • 불필요한 feature들을 제거하여 모델 성능 향상에 기여
  2. Dimension Reduction(차원 축소)의 적용 분야
    • Pre-procession / feature engineering
      • 머신러닝 솔루션 개발의 전처리 또는 feature engineering 단계에서 적용
      • 정보의 품질과 입력 데이터와 원하는 결과 간의 상관관계를 높이는데 이용
      • PCA의 경우, 가장 중요한 정보 구성 요소를 데이터에서 분리하고 모델에 제공하여 가장 관련성이 높은 정보만을 제공
      • PCA는 모델에서 사용할 feature의 수를 줄임으로써 연산 횟수와 시간을 줄여주므로 시스템 트레이닝 시간을 줄임
    • Noise Reduction
      • Dimension Reduction은 Noise Reduction 및 Filtering 기술로 이용
      • 데이터 세트 내의 잡음은 데이터 내의 변동의 큰 성분을 포함하지 않으므로 작은 변동 성분을 제거한 다음 데이터를 원래 데이터 공간으로 복원하면, 데이터에서 불필요한 노이즈 제거 가능
    • Generating Artificial Dataset(인공 데이터 생성)
      • PCA를 이용하여 데이터 집합을 정보 (또는 변형)의 구성 요소로 분류하고 고유 값 사이의 비율을 조정, 각 구성 요소의 영향을 조사하거나 새로운 데이터 집합 샘플 생성 가능
      • 데이터 구성 요소를 확장하고, 실제 해당 구성 요소의 중요도를 조절 가능
      • 통계적 형상 모델링, active shape modelling 프로세스에서 이미지 내 주요 요소들(랜드마크)를 감지하는 데 사용
    • Financial modelling / risk analysis
      • 금융 시장에 유용한 툴킷을 제공 가증, 다수의 개별 시장 지표 또는 신호를 더 적은 수의 구성 요소로 통합할 수 있기 때문에 보다 빠르고 효율적인 연산 가능
      • PCA로 고위험 상품, 위험군의 회사 감지 가능
  3. Dimension Reduction(차원 축소) 기술의 목표
    • 데이터 셋의 유용한 정보를 유지하면서 데이터 집합의 희소성을 감소, 관리하는 것이 목표
    • 분류 단계 전에 사용되는 중요한 전처리 단계
    • 대부분의 Dimension Reduction(차원 축소) 기술은 feature projection 프로세스를 통해 더 높은 차원의 공간에서 더 작은 차원의 공간으로 데이터를 조정하여 데이터에서 희소성을 감소시킴
    • 중요한 정보를 유지하면서 Dimension Reduction
      • 전체 변동의 80% 이상을 설명하는 성분 수 선택(정보 손실 20% 미만)
    • 변수 screening : 변수가 많을 때 주요 특징을 보이는 주성분 선택을 통한 변수 축소(screening)
    • 특징을 반영한 지표(변수 간의 선형 결합) 생성, 모니터링 및 이상 발생 경보

 

 

참고 : http://alexhwilliams.info/itsneuronalblog/2016/03/27/pca/

 

 

참고 : http://alexhwilliams.info/itsneuronalblog/2016/03/27/pca/

 

PCA

  1. PCA(Principle Component Analysis, 주성분 분석) 개념
    • 변수 간의 관계(공분산, 상관)를 기반으로 정보 손실을 최소화하면서 주요 성분을확인하고 차원을 축소하는 기법
    • 기존 변수의 선형 결합으로 분산이 가장 큰 축, 주성분(새로운 변수)를 구하려는 것 
    • PCA는 데이터를 일련의 구성 요소로 분리하여 데이터 세트의 희소성을 줄이는 알고리즘
    • 각 구성 요소는 데이터 내의 정보 소스를 나타내며, 이름에서 알 수 있듯이 PCA에서 생성된 첫 번째 구성 요소인 주요 구성 요소는 대부분의 정보 또는 데이터 내 분산을 포함
  2. PCA 플로우
    • 데이터 나열
    • 데이터 중심 정하기
    • 데이터의 중심으로 원점 이동
    • 원점 지나는 직선 그리기(Randomly)
    • 데이터에 fit한 직선으로 회전(최소거리 d)
    • Scaling으로 Eigen Vector 만들기
    • PC-n의 진행
    • 각 PC축 회전
    • 데이터 복원
  3. PCA에 필요한 통계의 기초 개념
    • Mean
      • 평균 또는 평균값은 단순히 모든 값을 세트의 값 수로 나눈 값 혹은 그 값들의 합
    • Standard Deviation(STD, 표준편차)
      • 데이터의 분산, 평균에 근접한 데이터의 양을 측정한 것
      • 일반적으로 정규 분포 데이터 집합에서 데이터 집합의 약 68%는 평균의 1 표준 편차 내에 존재
    • Covariance(공분산)
      • 한 차원(또는 특징)과 다른 차원의 분산
      • dimension에 대한 공분산이 자신에 대해 연산을 할 때의 결과는 단순히 차원의 분산을 연산하는 것과 같음
    • Covariance Matrix(공분산 행렬)
      • 공분산 행렬은 데이터 집합에 대해 계산할 수 있는 가능한 공분산 값의 행렬 표현
      • 데이터 탐색에 특히 유용한데, 데이터 세트의 PCA를 실행하기 위해 공분산 행렬도 필요
      • 하나의 feature의 타 feature에 대한 STD를 결정하기 위하여 공분산 행렬에서 해당 값을 찾아보기만 하면 되므로 전체 데이터 처리 속도 향상에 매우 용이
    • Eigen Value & Eigen Vector
      • Eigen Value(고유 값)와 Eigen Vector(고유 벡터)의 수학적 개념은 물리 및 공학 분야에서 매우 중요한 개념으로 데이터 세트의 주요 구성 요소를 계산하는 마지막 단계에 영향
      • Eigen Value(고유 값, S)
        • 각 Eigen Vector(고유 벡터)가 데이터 세트에 제공하는 양을 나타내는 개별 값
        • 가장 큰 기여도를 나타내는 데이터의 Eigen Vector(고유 벡터)는 가장 적은 양의 분산 또는 데이터 영향을 줌
      • Eigen Vector(고유 벡터, U)
        • 주요 구성 요소에 대한 데이터 세트의 주요 정보를 제공하는 구성 요소
        • 각 Eigen Vector(고유 벡터)는 데이터 세트 내에서 약간의 변동성을 표현
  4. PCA Summary
    • 주요 개념
      • PCA(주성분 분석)은 Dimension Reduction(차원 축소)를 위해 사용, 데이터의 손실을 최소화하는 방향으로 고차원의 데이터를 저차원의 데이터로 변환
      • 데이터의 Dimension Reduction을 통해 데이터의 해석을 용이하게 하고 모델의 성능을 강화, 데이터 시각화를 용이하게 함
      • 여러 변수들 사이의 분산, 공분산 관계를 이용하여 변수들의 선형 결합으로 이루어지는 주성분(PC)를 찾고, 이렇게 찾은 2~3 주성분으로 variance를 설명
      • 주어진 데이터의 손실을 최소화하면서 데이터를 가장 잘 설명할 수 있는 변수의 선형조합을 찾아내어 데이터 간의 관계 표현
    • PCA 플로우 AS Coding
      1. 필요한 Python 패키지(numpy, pandas) 임포트
      2. 전체 data set 로드
      3. data set에서 Dimension Reduction에 사용할 feature 선택
      4. 선택 데이터의 covariance matrix 연산 & 확인
      5. covariance matrix의 eigen value와 eigen vector 값 확인
      6. eigen value와 eigen vector를 descending sort(내림차순 정렬)
        • PCA 함수와 svd 함수에는 내림차순 정렬이 이미 포함되어 있어 직접 내림차순 정렬을 해줄 필요는 없지만 내림차순이 필요하다는 것을 인지하고 있어야 한다.
        • singular vector와 eigen vector의 값들은 모두 0보다 크거나 같고 실수이다.
      7. data set의 total covariance 백분율로 eigen value 연산 및 확인
      8. Minimum composition variance 구성에 필요한 eigen value 및 eigen vector 선택
      9. 선택 eigen vector x Dataset 을 통해 PCA 완료
      10. PCA 결과 Plotting
  5. Codes
    • numpy.linalg.eig() : 고유값(Eigenvalue), 고유벡터(Eigenvector)
      • 정방행렬(square matrix) A에 대하여 Ax = λx (상수 λ)가 성립하는 0이 아닌 벡터 x가 존재할 때 상수 λ를 행렬 A의 고유값(eigenvalue), x를 고유값에 대응하는 고유벡터(eigenvector)라고 한다.
        • 정방행렬 : 같은 수의 행과 열을 가지는 행렬
      • 고유값과 고유벡터를 반환함
    • numpy.linalg.svd() : 특이값 분해(Singular Value Decomposition)
      • 특이값 분해 : 고유값 분해처럼 행렬을 대각화하는 방법으로 정방행렬 뿐만 아니라 모든 mxn 행렬에 적용 가능
        • 차원축소, 데이터 압축 등에 사용
      • parameter
        • full_matrices : bool, optional
          • True(default) : 특이값 개수는 행렬의 열과 행의 개수 중 작은 값을 기준으로 전체 사용
          • False : 특이값 분해 축소형
      • eigenvector는 sorted in descending order로 return
    • numpy.cumsum() : 배열 원소 간 누적 합 구하는 함수
      • 배열 원소들을 누적(cumulative)으로 합해 나가는 함수
        • axis = 0이면 같은 행(column)의 위에서 아래 방향으로
        • axis = 1이면 같은 열(row)의 왼쪽에서 오른쪽 방향으로
    • numpy.cov : 공분산(covariance) matrix 출력하는 함수
      • 공분산은 2개의 확률 변수의 상관정도 나타내는 값
    • numpy.transpose() : transpose 함수
    • A.dot(B), numpyp.dot(A, B) : matrix 내적 곱
      • A, B : both scalars or 1-D array → scalar 값 return
      • 그 외의 경우 → array return
      • A * B는 원소 간의 곱을 의미

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형
Comments