250x250
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
- pipwin
- matplotlib
- 에러
- geopandas설치
- kepler
- Python
- QGIS라벨링
- geopnadas
- 시각화
- Folium
- riotapi
- kepler.gl
- map
- 인코등
- covid19
- covid
- r
- 라이엇api
- 지도
- 마커클러스터
- 파이썬
- 오픈API
- 오류
- 라이엇
- API
- OSMnx
- geopandas에러
- 막대그래프
- 공공데이터포털
- 코로나
Archives
- Today
- Total
Nerdy
주성분 분석(PCA) 본문
728x90
ㅣ주성분 분석(principal component analysis, PCA) 개요
서로 상관관계를 갖는 많은 변수를 상관관계가 없는 소수의 변수로 변환하는 차원축소 기법
ㅣ주성분 분석의 목적
데이터 셋에 많은 변수가 포함될수록 분석의 복잡성이 증가할 뿐만 아니라 의미있는 정보를 찾아내기가 쉽지 않다.
또한 분석할 대상의 변수가 많다고 모두 활용하는 것은 좋지 않으며 오히려 변수간의 다중공선성이 있을 경우 분석 결과에 영향을 줄 수 있다.
이럴경우 데이터 셋에 포함된 다수의 변수를 몇개의 관리 가능하고 해석 가능한 소수의 변수로 축소하는 것이 유용, 즉 데이터 셋의 차원을 줄여줌으로써 데이터의 복잡성을 감소시킬 수 있다.
*다중공선성 : 독립변수들 간의 선형 관계를 나타내는 것. 독립변수들 간의 높은 상관관계로 인해 종속변수에 미치는 각각의 영향을 구분하기 어려운 상황을 말함
X₁ : 기존에 관측된 변수
PC : 관측변수의 선형결합인 주성분
a₁ : 가중치
선형결합을 위한 가중치는 주성분 간 상관관계가 없음.
ㅣR 실습
데이터는 state.x77이며 미국 50개주에 대한 8가지 정보가 기록 되어 있다.
> str(state.x77)
> head(state.x77)
Population Income Illiteracy Life Exp Murder HS Grad Frost Area
Alabama 3615 3624 2.1 69.05 15.1 41.3 20 50708
Alaska 365 6315 1.5 69.31 11.3 66.7 152 566432
Arizona 2212 4530 1.8 70.55 7.8 58.1 15 113417
Arkansas 2110 3378 1.9 70.66 10.1 39.9 65 51945
California 21198 5114 1.1 71.71 10.3 62.6 20 156361
Colorado 2541 4884 0.7 72.06 6.8 63.9 166 103766
* 주성분 실행하기
# 주성분 분석
> pca <- prcomp(state.x77, scale = TRUE)
# scale = T를 이용해서 측정단위 통일시킴, 모든 변수를 표준 : 0/ 표준편차 : 1로 통일
> summary(pca) # 분석결과 확인
Importance of components:
PC1 PC2 PC3 PC4 PC5 PC6 PC7 PC8
Standard deviation 1.8971 1.2775 1.0545 0.84113 0.62019 0.55449 0.38006 0.33643
Proportion of Variance 0.4499 0.2040 0.1390 0.08844 0.04808 0.03843 0.01806 0.01415
Cumulative Proportion 0.4499 0.6539 0.7928 0.88128 0.92936 0.96780 0.98585 1.00000
#Standard deviation : 표준편차
#Propertion of Variance : 분산비율
#각 주성분의 차지하는 비율을 말하며 클 수록 영향도가 그만큼 높다는 의미를 가짐
#Cumulative Proportion : 분산의 누적 합계
# 첫번째 성분은 전체 분산의 45%를 설명
# 두번째 성분읜 전체 분산의 20.4% 설명
# 누적비율(Cumulative Proportion) : PC1 + PC2 = 0.6539
# 성분의 개수가 증가하면 누적비율이 증가하며 전체 성분을 추출하면 1이 나타남
ㅣ성분적재값과 성분점수
> round(pca$rotation, 3)
PC1 PC2 PC3 PC4 PC5 PC6 PC7 PC8
Population 0.126 0.411 -0.656 -0.409 0.406 -0.011 -0.062 -0.219
Income -0.299 0.519 -0.100 -0.088 -0.638 0.462 0.009 0.060
Illiteracy 0.468 0.053 0.071 0.353 0.004 0.387 -0.620 -0.339
Life Exp -0.412 -0.082 -0.360 0.443 0.327 0.219 -0.256 0.527
Murder 0.444 0.307 0.108 -0.166 -0.128 -0.325 -0.295 0.678
HS Grad -0.425 0.299 0.050 0.232 -0.099 -0.645 -0.393 -0.307
Frost -0.357 -0.154 0.387 -0.619 0.217 0.213 -0.472 0.028
Area -0.033 0.588 0.510 0.201 0.499 0.148 0.286 0.013
# 성분적재값은 성분과 변수간의 상관정도를 의미함, 값이 클수록 관련성이 높음
# 추출한 성분에 대한 전체 성분점수 계산
> round(scale(state.x77) %*% pca$rotation, 3) # 표준화된 데이터셋 행렬 * 성분 적재값 행렬
PC1 PC2 PC3 PC4 PC5 PC6 PC7 PC8
Alabama 3.790 -0.235 0.229 0.383 -0.248 -0.434 0.057 0.535
Alaska -1.053 5.456 4.241 0.576 0.109 1.001 0.302 -0.118
Arizona 0.867 0.745 0.077 1.719 -0.560 -0.305 0.131 -0.525
Arkansas 2.382 -1.288 0.223 0.623 0.647 0.259 0.034 0.488
California 0.241 3.510 -2.806 -0.070 0.969 -0.651 0.045 -0.257
Colorado -2.062 0.506 0.511 -0.110 0.002 -0.266 -0.644 0.375
Connecticut -1.899 -0.243 -0.663 0.170 -0.789 1.078 -0.538 -0.073
Delaware -0.425 -0.508 0.219 -0.193 -1.307 -0.157 0.292 -0.240
Florida 1.172 1.135 -1.282 0.488 -0.676 -0.341 0.411 0.257
<중략>
Wisconsin -1.758 -0.636 -0.425 -0.112 0.611 0.415 -0.009 0.041
Wyoming -1.484 0.042 1.354 -0.639 -0.296 -0.764 -0.224 -0.131
# round(pca$x, 3)
# prcomp 함수는 각 케이스에 대한 성분점수를 계산해서 주성분 객체 x원소에 행렬형태로 제공함
# 설명력이 큰 상위 2개의 성분들만 성분점수 추출할 수 있음
> round(pca$x[, c(1 ,2)], 3) # 데이터의 복잡성을 줄일 수 있음
PC1 PC2
Alabama 3.790 -0.235
Alaska -1.053 5.456
Arizona 0.867 0.745
Arkansas 2.382 -1.288
California 0.241 3.510
Colorado -2.062 0.506
Connecticut -1.899 -0.243
<중략>
# 성분간의 상관계수 보기
> round(cor(pca$x), 3)
PC1 PC2 PC3 PC4 PC5 PC6 PC7 PC8
PC1 1 0 0 0 0 0 0 0
PC2 0 1 0 0 0 0 0 0
PC3 0 0 1 0 0 0 0 0
PC4 0 0 0 1 0 0 0 0
PC5 0 0 0 0 1 0 0 0
PC6 0 0 0 0 0 1 0 0
PC7 0 0 0 0 0 0 1 0
PC8 0 0 0 0 0 0 0 1
728x90
'R' 카테고리의 다른 글
[R] 코로나 19 누적 데이터를 대상으로 막대 차트 만들기 (0) | 2022.06.23 |
---|---|
[R] 오픈 API를 활용한 코로나 19 사망자 수 그래프 그리기 (0) | 2022.06.23 |
[R] 메모리 부족 시 늘리는 방법 (0) | 2022.06.22 |
[R] Why data.table? (0) | 2022.06.22 |
KOSPI 지수 데이터를 활용한 시계열 분석 (0) | 2022.06.15 |