主成分分析(PCA)

在 R 中使用 caret 的机器学习

Zach Mayer

Data Scientist at DataRobot and co-author of caret

主成分分析

  • 合并低方差且相关的变量
  • 生成一组高方差、相互正交的自变量
  • 防止多重共线性(即自变量间相关)
在 R 中使用 caret 的机器学习

PCA:可视化示意

  • 第一主成分方差最大
  • 第二主成分方差次之
  • 依此类推…

pasted-image-919.png

在 R 中使用 caret 的机器学习

示例:血脑数据

  • 自变量很多
  • 其中不少为低方差
# 加载血脑数据集
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 的机器学习

示例:血脑数据

# 基础模型
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 的机器学习

示例:血脑数据

# 移除低方差自变量
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 的机器学习

示例:血脑数据

# 加入 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 的机器学习

Vamos praticar!

在 R 中使用 caret 的机器学习

Preparing Video For Download...