主成分分析(PCA)

使用 R 的 caret 進行 Machine Learning

Zach Mayer

Data Scientist at DataRobot and co-author of caret

主成分分析

  • 合併低變異且彼此相關的變數
  • 產生一組高變異、互相垂直的預測變數
  • 避免共線性(也就是預測變數彼此相關)
使用 R 的 caret 進行 Machine Learning

PCA:視覺化示意

  • 第 1 個成分有最高變異
  • 第 2 個成分有次高變異
  • 以此類推…

貼上的影像-919.png

使用 R 的 caret 進行 Machine Learning

範例:血腦資料

  • 許多預測變數
  • 其中多數變異很低
# Load the blood brain dataset
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

範例:血腦資料

# Basic model
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

範例:血腦資料

# Remove low-variance predictors
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

範例:血腦資料

# Add 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

一起來練習吧!

使用 R 的 caret 進行 Machine Learning

Preparing Video For Download...