본문 바로가기
R

주성분 분석(차원 축소, 주성분 분석, 주성분 개수 선택법)

by jun_code 2021. 7. 27.

< 주성분 분석 >

1. 주성분분석

데이터의 변수가 너무 많은 경우 변수의 수를 줄여 분석과 예측에 유리하도록 하는 것을 차원 축소라고 한다. 차원 축소과 관련된 분석이 주성분 분석이다.  주성분 분석(Pincipal Component Analysis, PCA)는 고차원 데이터를 압축하거나 정보가 더 잘 드러나도록 표현하기 위해 주성분 분석을 하는 방법이다. 예를 들어, 3차원 공간 정보를 최대한 유지하면서 2차원 사진을 찍는 것이 차원 축소이다. 여기서 주성분이란 희생되는 정보가 적고 전체 변수의 변동성 대부분을 설명할 수 있는 적은 수의 변수 집합을 의미한다.

 

2. 주성분 분석 목적

데이터에서 노이즈를 제거하거나 주성분에서 유지되는 정보를 시각화하는데 사용한다

회귀분석 시 독립변수 간에 다중공선성이 존재하여 종속 관계가 있는 경우 p-value 커지는 문제가 발생하여 차원 축소를 통해 모델을 생성하면 성능 향상

측정 데이터를 결정짓는 데이터인 잠재변수를 찾아 정보가 더 잘 드러나는 표현을 찾기 위해 사용한다

 

 

3. 주성분 개수 선택법

데이터 시각화를 위해 차원을 축소하는 경우 주로 2~3개의 주성분이 적당하다. 데이터 시각화가 아닌 목적이라면 설명된 분산의 합인 누적 기여율이 설정한 임계치를 넘어설 때까지 주성분을 선택한다. 주성분 개수 선택법의 경우 아래 실습 코드에서 세가지를 설명하도록 하겠다.

 


<실습>

1. princomp() 함수

princomp() 함수로 주성분 분석 수행이 가능하다. 상관행렬로 보여주거나 공분산행렬로 보여줄 수 있다. 디폴트 값은 공분산행렬(cor=FALSE)이다.

아래 코드 결과를 보면 첫 번째 주성분이 전체 분산의 72.9%를 설명하고, 누적기여율을 보면 두 번째 주성분까지가 전체 분산의 95.8%를 설명한다.

 

fit <- princomp(iris[,1:4], cor= TRUE)
summary(fit)
'''
Importance of components:
                          Comp.1    Comp.2     Comp.3      Comp.4
Standard deviation     1.7083611 0.9560494 0.38308860 0.143926497
Proportion of Variance 0.7296245 0.2285076 0.03668922 0.005178709
Cumulative Proportion  0.7296245 0.9581321 0.99482129 1.000000000
'''

 

2. loadings() 함수

각 주성분의 로딩 벡터를 구하는데 loadings() 함수가 사용된다. 첫 번째 주성분의 로딩 벡터를 선형 결합으로 계산한다.

 

loadings(fit)
'''
Loadings:
             Comp.1 Comp.2 Comp.3 Comp.4
Sepal.Length  0.521  0.377  0.720  0.261
Sepal.Width  -0.269  0.923 -0.244 -0.124
Petal.Length  0.580        -0.142 -0.801
Petal.Width   0.565        -0.634  0.524

               Comp.1 Comp.2 Comp.3 Comp.4
SS loadings      1.00   1.00   1.00   1.00
Proportion Var   0.25   0.25   0.25   0.25
Cumulative Var   0.25   0.50   0.75   1.00
'''

 

3. summary()

주성분 개수를 선택하는데 스크리 그래프를 사용할 수 있다. 스크리 그래프란(Scree plot) 주성분의 상대적인 중요도를 시각화한 것으로 값이 수평을 유지하기 전단계로 주성분의 수를 결정하게 된다. 아래 예시에서 주성분은 2개 혹은 3개로 선택하는 것이 바람직하다.

 

screeplot(fit, type= 'lines', main = 'scree plot')

<그림1>