주성분 분석 (PCA)

R의 caret로 배우는 Machine Learning

Zach Mayer

Data Scientist at DataRobot and co-author of caret

주성분 분석

  • 저분산·상관 변수 결합
  • 고분산이고 서로 직교하는 예측 변수 집합 생성
  • 다중공선성(예측 변수 간 상관) 방지
R의 caret로 배우는 Machine Learning

PCA: 시각적 표현

  • 첫 번째 성분이 분산 최대
  • 두 번째 성분이 그다음 분산
  • 계속 동일한 방식 ...

붙여넣은-이미지-919.png

R의 caret로 배우는 Machine Learning

예시: 혈액-뇌 데이터

  • 예측 변수가 많음
  • 저분산 변수가 다수
# 혈액-뇌 데이터셋 불러오기
data(BloodBrain)
names(bbbDescr)[nearZeroVar(bbbDescr)]
[1] "negative"     "peoe_vsa.2.1" "peoe_vsa.3.1"
[4] "a_acid"       "vsa_acid"     "frac.anion7."
[7] "alert"  
R의 caret로 배우는 Machine Learning

예시: 혈액-뇌 데이터

# 기본 모델
set.seed(42)
data(BloodBrain)
model <- train(
  bbbDescr, 
  logBBB, 
  method = "glm",
  trControl = trainControl(
    method = "cv", number = 10, verbose = TRUE
  ),
  preProcess = c("zv", "center", "scale")
)
min(model$results$RMSE)
1.107702     
R의 caret로 배우는 Machine Learning

예시: 혈액-뇌 데이터

# 저분산 예측 변수 제거
set.seed(42)
data(BloodBrain)
model <- train(
  bbbDescr, 
  logBBB, 
  method = "glm",
  trControl = trainControl(
    method = "cv", number = 10, verbose = TRUE
  ),
  preProcess = c("nzv", "center", "scale")
)
min(model$results$RMSE)
0.9796199
R의 caret로 배우는 Machine Learning

예시: 혈액-뇌 데이터

# PCA 추가
set.seed(42)
data(BloodBrain)
model <- train(
  bbbDescr, 
  logBBB, 
  method = "glm",
  trControl = trainControl(
    method = "cv", number = 10, verbose = TRUE
  ),
  preProcess = c("zv", "center", "scale", "pca")
)
min(model$results$RMSE)
0.9796199
R의 caret로 배우는 Machine Learning

Laten we oefenen!

R의 caret로 배우는 Machine Learning

Preparing Video For Download...