KNN 估算

在 R 中使用 caret 的机器学习

Zach Mayer

Data Scientist at DataRobot and co-author of caret

处理缺失值

  • 中位数填补很快,但…
  • 若缺失并非随机,可能产生错误结果
  • k 近邻(KNN)填补
  • 基于"相似"的非缺失行进行填补
在 R 中使用 caret 的机器学习

示例:非随机缺失

  • 设想小型车未报告马力
  • 此时用中位数填补不当:等同假设小车有中等或偏大马力
# 生成含缺失的数据
mtcars[mtcars$disp < 140, "hp"] <- NA
Y <- mtcars$mpg
X <- mtcars[, 2:4]

# 使用中位数填补
model <- train(X, Y, method = "glm", preProcess = "medianImpute")
print(min(model$results$RMSE))
3.612713
在 R 中使用 caret 的机器学习

示例:非随机缺失

  • KNN 填补更佳
  • 用 disp / cyl 相近的车辆来填补
  • 得到更准确(但更慢)的模型
# 使用 KNN 填补
set.seed(42)
model <- train(
  X, Y, method = "glm", preProcess = "knnImpute"
)
print(min(model$results$RMSE))
3.558881

与中位数填补的 3.61 对比

在 R 中使用 caret 的机器学习

让我们来练习!

在 R 中使用 caret 的机器学习

Preparing Video For Download...