파이썬에서 주성분 분석(PCA)을 계산하는 방법

차원 축소를 위한 중요한 머신러닝 방법을 주성분 분석이라고 합니다.

선형 대수와 통계의 간단한 행렬 연산을 사용하여 원래 데이터의 투영을 동일한 수 또는 더 적은 차원으로 계산하는 방법입니다.

이 자습서에서는 차원 축소를 위한 주성분 분석 머신러닝 방법과 Python에서 처음부터 구현하는 방법을 알아봅니다.

이 자습서를 완료하면 다음을 알 수 있습니다.

  • 주성분 분석을 계산하는 절차와 주성분을 선택하는 방법.
  • NumPy에서 주성분 분석을 처음부터 계산하는 방법.
  • scikit-learn에서 더 많은 데이터에 재사용하기 위해 주성분 분석을 계산하는 방법.

튜토리얼 개요

이 튜토리얼은 다음과 같이 세 부분으로 나뉩니다.

  1. 주성분 분석
  2. 수동으로 주성분 분석 계산
  3. 재사용 가능한 주성분 분석


주성분 분석

주성분 분석 또는 줄여서 PCA는 데이터의 차원을 줄이는 방법입니다.

m-열(특징)이 있는 데이터를 원래 데이터의 본질을 유지하면서 m 개 이하의 열이 있는 부분 공간으로 투영하는 투영 방법으로 생각할 수 있습니다.

PCA 방법은 선형 대수학 도구를 사용하여 설명하고 구현할 수 있습니다.

PCA는 n x m 행렬 A로 표시되는 데이터 세트에 적용되는 연산으로, B라고 부르는 A의 투영을 생성합니다. 이 작업의 단계를 살펴보겠습니다.

첫 번째 단계는 각 열의 평균값을 계산하는 것입니다.

또는

다음으로 평균 열 값을 빼서 각 열의 값을 중앙에 배치해야 합니다.

다음 단계는 중심 행렬 C의 공분산 행렬을 계산하는 것입니다.

상관 관계는 두 열이 함께 변경되는 양과 방향(양수 또는 음수)의 정규화된 측정값입니다. 공분산은 여러 열에 걸친 상관 관계의 일반화되고 정규화되지 않은 버전입니다. 공분산 행렬은 자신을 포함하여 다른 모든 열이 있는 모든 열에 대한 공분산 점수가 있는 주어진 행렬의 공분산을 계산하는 것입니다.

마지막으로 공분산 행렬 V의 고유분해를 계산합니다. 그 결과 고유값 목록과 고유벡터 목록이 생성됩니다.

고유벡터는 B의 축소된 부분공간에 대한 방향 또는 성분을 나타내는 반면, 고유값은 방향의 크기를 나타냅니다. 이 주제에 대한 자세한 내용은 다음 게시물을 참조하십시오.

고유 벡터는 고유 값을 내림차순으로 정렬하여 A에 대한 새 부분 공간의 성분 또는 축의 순위를 제공 할 수 있습니다.

모든 고유값이 비슷한 값을 갖는다면 기존 표현이 이미 합리적으로 압축되거나 조밀할 수 있으며 투영이 거의 제공하지 않을 수 있음을 알 수 있습니다. 0에 가까운 고유값이 있으면 폐기될 수 있는 B의 구성 요소 또는 축을 나타냅니다.

선택된 부분공간을 구성하기 위해 총 m 이하의 성분을 선택해야 합니다. 이상적으로는 주성분이라고 하며 k개의 가장 큰 고유값을 갖는 k 개의 고유벡터를 선택합니다.

특이값 분해 또는 SVD와 같은 다른 행렬 분해 방법을 사용할 수 있습니다. 따라서 일반적으로 값을 특이 값이라고하며 부분 공간의 벡터를 주성분이라고합니다.

선택한 데이터는 행렬 곱셈을 통해 부분 공간으로 투영 될 수 있습니다.

여기서 A는 투영하려는 원본 데이터이고 B^T는 선택한 주성분의 전치이며 P는 A의 투영입니다.

이를 PCA를 계산하기 위한 공분산 방법이라고 하지만 계산하는 다른 방법이 있습니다.


수동으로 주성분 분석 계산

NumPy에는 pca() 함수가 없지만 NumPy 함수를 사용하여 주성분 분석을 단계별로 쉽게 계산할 수 있습니다.

아래 예제에서는 작은 3×2 행렬을 정의하고, 행렬의 데이터를 중심에 맞추고, 중심 데이터의 공분산 행렬을 계산한 다음, 공분산 행렬의 고유분해를 계산합니다. 고유 벡터와 고유 값은 주성분과 특이값으로 취해져 원래 데이터를 투영하는 데 사용됩니다.

예제를 실행하면 먼저 원래 행렬이 인쇄된 다음 중심 공분산 행렬의 고유 벡터와 고유값이 인쇄되고 마지막으로 원래 행렬의 투영이 인쇄됩니다.

흥미롭게도 첫 번째 고유 벡터만 필요하다는 것을 알 수 있으며, 이는 3×2 행렬을 손실이 거의 없는 3×1 행렬에 투영 할 수 있음을 시사합니다.


재사용 가능한 주성분 분석

scikit-learn 라이브러리의 PCA() 클래스를 사용하여 데이터 세트에 대한 주성분 분석을 계산할 수 있습니다. 이 접근 방식의 이점은 프로젝션이 계산되면 새 데이터에 매우 쉽게 적용할 수 있다는 것입니다.

클래스를 만들 때 구성 요소 수를 매개 변수로 지정할 수 있습니다.

클래스는 먼저 fit() 함수를 호출하여 데이터 세트에 적합하고, transform() 함수를 호출하여 원래 데이터 세트 또는 기타 데이터를 선택한 차원 수의 부분 공간에 투영할 수 있습니다.

일단 적합하면 explained_variance_ 및 components_ 특성을 통해 PCA 클래스에서 고유값과 주 구성 요소에 액세스할 수 있습니다.

아래 예제에서는 먼저 인스턴스를 만들고, 3×2 행렬에 맞추고, 프로젝션의 값과 벡터에 액세스하고, 원래 데이터를 변환하여 이 클래스를 사용하는 방법을 보여 줍니다.

예제를 실행하면 먼저 3×2 데이터 행렬이 인쇄되고, 그 다음에 주성분과 값이 인쇄되고, 그 다음에 원래 행렬의 투영이 인쇄됩니다.

아주 작은 부동 소수점 반올림을 통해 이전 예제와 동일한 주성분, 특이수 값 및 투영을 달성한다는 것을 알 수 있습니다.


확장

이 섹션에는 탐색할 수 있는 자습서를 확장하기 위한 몇 가지 아이디어가 나열되어 있습니다.

  • 사용자 고유의 작은 행렬 값으로 예제를 다시 실행하십시오.
  • 데이터 세트를 로드하고 데이터 세트에서 PCA를 계산하고 두 방법의 결과를 비교합니다.
  • 머신러닝 논문에서 PCA가 사용된 10가지 예를 검색하고 찾습니다.


추가 정보

이 섹션에서는 더 자세히 알아보려는 경우 주제에 대한 더 많은 리소스를 제공합니다.



API


기사


자습서


요약

이 자습서에서는 차원 축소를 위한 주성분 분석 머신러닝 방법을 알아보았습니다.

특히 다음 내용을 배웠습니다.

  • 주성분 분석을 계산하는 절차와 주성분을 선택하는 방법.
  • NumPy에서 주성분 분석을 처음부터 계산하는 방법.
  • scikit-learn에서 더 많은 데이터에 재사용하기 위해 주성분 분석을 계산하는 방법.

네피리티
No Comments

Sorry, the comment form is closed at this time.