본문 바로가기
공부/R & Python

15-1. 주성분 분석과 부분 최소자승법-주성분분석(Principle Component Analysis)

by 드인 2020. 3. 6.

15. 주성분 분석과 부분 최소자승법

15-1. 주성분분석

(Principle Component Analysis)


1) 주성분분석 (Principle Component Analysis)

- 다변량분석기법

- '주성분'이라고 불리는 선형조합으로 표현하는 기법

- 여기서 주성분은 공분산(X^TX)으로부터 eigenvector와 eigenvalue를 도출하여 계산됨

- 주성분간의 수직관계

- 1st 주성분 (PC1) : 독립변수들의 변동(분산)을 가장 많이 설명하는 성분

- 2st 주성분 (PC2) : PC1과 수직인 주성분

   (첫번째 주성분이 설명하지 못하는 변동에 대해 두번째로 설명하는 성분)

 

- iris데이터(4개변수)의 주성분분석 - 차원축소 & 예측력 향상

- iris데이터(4개변수)의 주성분 도출 - 차원축소 & 예측력 향상

주성분분석은 추가패키지 필요없음

데이터 불러들이기

 

cor(iris[1:4])

독립변수간 상관관계 확인

- 주성분분석을 위한 함수 : prcomp(독립변수들, center= , scale= )

ir.pca<-prcomp(iris[,1:4],center=T,scale.=T)

- 옵션을 주지않으면 center=T, scale=F

- center=T, scale=T는 변수들의 평균을 빼고, 편차로 나누어 표준화한다는 의미


ir.pca

PC1 = 0.5211*Sepal.Length -0.2693*Sepal.Width +0.5804*Petal.Length +0.5649*Petal.Width

 

- 전체분산 중 각 주성분의 설명하는 비율

summary(ir.pca)

=> 누적설명비율을 보면 PC1와 PC2, 두개의 성분으로 전체분산의 95.81%를 설명

 

그러면 몇 개의 주성분으로 전체분산을 설명하는게 최적? 

 

- 최적 주성분 수는? - scree plot을 그려보고 급격히 떨어지기 전까지의 PC를 선택

plot(ir.pca,type="l")

- 3rd PC에서 설명력이 급격하게 떨어짐을 볼 수 있음

- 기울기가 꺾이는 PC3을 'elbow point'라 부름

 

=> 이 경우는 PC1, PC2 까지 사용하는 것을 추천

 

- screeplot함수를 이용 : screeplot(pca결과)

screeplot(ir.pca)

앞의 그림과 동일한 결과

=> PC1, PC2까지 사용 추천

 

- PC계산= X_data(n*p) %*% PCA_weight(p*p)

PRC<-as.matrix(iris[,1:4])%*%ir.pca$rotation

PRC는 n*p행렬, 여기서는 150*4, %*%는 행렬과 행렬을 곱할 때 사용
head(PRC)

head(PRC)는 첫번째 6줄을 보여줌

- iris data => iris.pc data구성

iris.pc<-cbind(as.data.frame(PRC), Species)
head(iris.pc)

2) 주성분을 이용한 분류모형

- 주성분을 이용한 서포트벡터머신 수행 (iris data)

library (e1071)

m1<- svm(Species ~., data = iris.pc, kernel="linear")
summary(m1)

x<-iris.pc[, -5]
pred <- predict(m1, x)

y<-iris.pc[,5]
table(pred, y)

주성분을 이용한 분류 오분류율 : 2/150=0.013 (1.33%)