Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- tableau
- Deep Learning Specialization
- 자격증
- 파이썬
- 데이터분석
- pytorch
- 데이터 분석
- ADsP
- 이것이 코딩테스트다
- 태블로
- IRIS
- 회귀분석
- 딥러닝
- ML
- scikit learn
- SQLD
- Python
- 데이터 전처리
- 데이터분석준전문가
- 이코테
- r
- 머신러닝
- SQL
- matplotlib
- 통계
- 시각화
- Google ML Bootcamp
- pandas
- 코딩테스트
- sklearn
Archives
- Today
- Total
함께하는 데이터 분석
[EDA] PCA with R 본문
오늘은 Principal Component Analysis 일명 PCA에 대해
간단한 예제를 R을 통해 알아보는 시간을 갖겠습니다!
그러기에 앞서 필요한 파일을 첨부하겠습니다.
위 데이터는 주식에 관한 10개 회사의 값입니다.
그럼 시작해볼까요?
rm(list=ls()) #할당변수 모두 제거
load("stockreturns.RData") #데이터 불러오기
ls() #변수 확인
>>> [1] "stocks"
head(stocks)
tail(stocks)
str(stocks) #구조 파악
>>> 'data.frame': 100 obs. of 10 variables:
$ comp1 : num 0.44781 0.98811 0.87456 0.7144 0.00535 ...
$ comp2 : num 0.0673 1.5816 0.7562 -0.6898 -1.3429 ...
$ comp3 : num 0.15 -0.611 -2.18 0.254 -2.065 ...
$ comp4 : num 2.991 2.62 -0.362 2.209 -2.408 ...
$ comp5 : num -0.208 0.536 1.372 0.58 -0.187 ...
$ comp6 : num 0.456 0.59 0.919 1.837 -0.173 ...
$ comp7 : num -0.781 1.208 1.115 0.92 0.155 ...
$ comp8 : num 0.205 1.066 1.545 0.422 -1.104 ...
$ comp9 : num -0.00137 -0.55163 1.5231 -0.41715 0.20312 ...
$ comp10: num 1.465 0.203 0.348 -1.009 1.998 ...
dim(stocks) #차수 확인
>>> [1] 100 10
이때 EDA관점에서 PCA를 할 때 중요한 것은
오리지널 데이터와 표준화 작업을 한 데이터 두 가지 다 해봐야 한다는 것입니다.
origin <- apply(stocks, 2, mean) #오리지널 열별 평균분석
origin
>>> comp1 comp2 comp3 comp4 comp5 comp6 comp7 comp8
-0.20597360 -0.18538148 -0.41773362 -0.00058670 -0.04152566 -0.07953460 0.16694075 -0.13969141
comp9 comp10
-0.10858906 0.03052026
standard <- apply(scale(stocks), 2, mean) #표준화 후 열별 평균분석
standard
>>> comp1 comp2 comp3 comp4 comp5 comp6 comp7
3.688456e-18 -8.085980e-18 -1.512489e-17 -3.869789e-18 -1.497934e-17 1.409246e-17 -1.427677e-17
comp8 comp9 comp10
-2.286203e-17 -1.442856e-17 -1.949396e-18
plot(standard, ylim = c(-0.1, 0.1)) #그래프로 확인
위의 그래프를 보면 평균이 0으로 표준화가 됐다는 것을 알 수 있습니다.
stock.PCA1<-prcomp(stocks) #오리지널
stock.PCA2<-prcomp(scale(stocks)) #표준화
par(mfrow=c(3,2))
screeplot(stock.PCA1)
screeplot(stock.PCA2)
biplot(stock.PCA1, 1:2, main = "no scale") #PCA1, PCA2
abline(h=0, lty=3, col='red')
abline(v=0, lty=3, col='red')
biplot(stock.PCA2, 1:2, main = "scale") #PCA1, PCA2
abline(h=0, lty=3, col='red')
abline(v=0, lty=3, col='red')
biplot(stock.PCA1, 2:3, main = "no scale") #PCA2, PCA3
abline(h=0, lty=3, col='red')
abline(v=0, lty=3, col='red')
biplot(stock.PCA2, 2:3, main = "scale") #PCA2, PCA3
abline(h=0, lty=3, col='red')
abline(v=0, lty=3, col='red')
par(mfrow=c(2,2))
with(stock.PCA2, plot(rotation[,1], rotation[,2], type='n', xlab="PC1", ylab="PC2", main='scale'))
with(stock.PCA2, text(rotation[,1], rotation[,2], 1:10))
abline(h=0, lty=3, col='red')
abline(v=0, lty=3, col='red')
with(stock.PCA2, plot(rotation[,2], rotation[,3], type='n', xlab="PC2", ylab="PC3", main='scale'))
with(stock.PCA2, text(rotation[,2], rotation[,3], 1:10))
abline(h=0, lty=3, col='red')
abline(v=0, lty=3, col='red')
with(stock.PCA1, plot(rotation[,1], rotation[,2], type='n', xlab="PC1", ylab="PC2", main='no scale'))
with(stock.PCA1, text(rotation[,1], rotation[,2], 1:10))
abline(h=0, lty=3, col='red')
abline(v=0, lty=3, col='red')
with(stock.PCA1, plot(rotation[,2], rotation[,3], type='n', xlab="PC2", ylab="PC3", main='no scale'))
with(stock.PCA1, text(rotation[,2], rotation[,3], 1:10))
abline(h=0, lty=3, col='red')
abline(v=0, lty=3, col='red')
경향성이 뚜렷한 표준화된 그래프를 살펴보면
comp5, 6, 7은 PCA2에 영향을 받으면서 그룹화되어있는 것을 볼 수 있고
comp1, 2, 3, 4와 comp8, 9, 10이 따로 뭉쳐있는 것을 확인할 수 있습니다.
앞서 배운 Hierarchical Cluster을 사용해보면 더 확인할 수 있습니다!
plot(hclust(dist(t(as.matrix(scale(stocks))))))
감사합니다!

'통계학과 수업 기록 > EDA' 카테고리의 다른 글
[EDA] FA with R (0) | 2022.02.06 |
---|---|
[EDA] SVD with R (0) | 2022.02.05 |
[EDA] K-Means Clustering with R (0) | 2022.02.02 |
[EDA] Hierarchical Clustering with R (0) | 2022.02.02 |