如果是“回归类模型”,就删掉一列;否则保留全部。

如果你用的是…要不要删一列?说明
lm()、glm()、nnet::multinom()✅ 要删这些是回归模型,必须删掉
randomForest、xgboost、rpart❌ 不删树模型、集成学习,不删
caret / tidymodels + 回归模型✅ 要删框架会自动删一列
keras / 神经网络❌ 不删网络结构能处理全编码

你可以写个小函数来处理 one-hot 编码:

encode_one_hot <- function(df, vars, drop_base = TRUE) {
  # drop_base = TRUE:默认删掉一个基准
  # drop_base = FALSE:保留全部
  design <- if (drop_base) "~ ." else "~ . -1"
  model.matrix(as.formula(design), data = df[, vars, drop = FALSE])
}
  • 回归模型(lm、glm、逻辑回归):删掉一列,防止共线性
  • 机器学习模型(树、XGBoost、RF、神经网络):不删也行