新出现的类别水平
当某个分类变量的某个水平很少见时,它有可能没有出现在训练数据中。如果这个稀有水平后来出现在未来数据里,下游模型可能不知道如何处理。出现这种「新出现的类别水平」(novel levels)时,使用 model.matrix 或 caret::dummyVars 进行独热编码将无法正确工作。
vtreat 是用于独热编码时比 model.matrix 更「安全」的替代方案,因为它可以安全地处理新出现的类别水平。vtreat 还会处理数据中的缺失值(包括分类和连续变量)。
在本练习中,您将看到 vtreat 如何处理训练集里未出现过的分类取值。
上一练习得到的处理方案 treatplan 和变量集合 newvars 仍然可用。
dframe 以及新的数据框 testframe 已经预先加载。
本练习是课程的一部分
R 中的监督学习:回归
练习说明
- 打印
dframe和testframe。testframe中是否存在dframe里没有出现过的颜色?
- 调用
prepare()创建去掉结果变量后的testframe的独热编码版本。命名为testframe.treat并打印。- 使用参数
varRestriction将变量限制为只包含newvars中的变量。 - 黄色行是如何被编码的?
- 使用参数
交互式实操练习
通过完成这段示例代码来试试这个练习。
# treatplan is available
summary(treatplan)
# newvars is available
newvars
# Print dframe and testframe
___
___
# Use prepare() to one-hot-encode testframe
(testframe.treat <- ___(___, ___, varRestriction = ___))