这取决于您要使用的模型(甚至可能是软件)。使用线性回归或通过最大似然(或最小二乘)估计的广义线性模型(在 R 中这意味着使用函数lm
或glm
),您需要省略一列。否则,您将收到有关“由于奇点而遗漏”的某些列的消息†.
但是,如果您使用正则化估计此类模型,例如 ridge、lasso er the elastic net,那么您不应遗漏任何列。正则化处理奇点,更重要的是,获得的预测可能取决于您遗漏了哪些列。当您不使用正则化时,不会发生这种情况‡. 请参阅如何解释 支持此观点的多项弹性网络 (glmnet) 回归的系数(直接引用 的作者之一glmnet
)的答案。
对于其他模型,使用相同的原则。如果获得的预测取决于您遗漏了哪些列,则不要这样做。否则没关系。
到目前为止,这个答案只提到了线性(和一些轻微的非线性)模型。但是非常非线性的模型,比如树和随机森林呢?关于分类编码的想法,如 one-hot,主要源于线性模型和扩展。几乎没有理由认为源自该背景的想法应该不加修改地应用于树木和森林!对于一些想法,请参阅Python 中稀疏数据的随机森林回归。
†但是,使用因子变量,R 会为您解决这个问题。
‡试图在评论中回答额外的问题:当使用正则化时,大多数情况下使用不需要矩阵求逆的迭代方法(如套索或弹性网络),因此设计矩阵没有满秩不是问题。使用岭正则化,可以使用矩阵求逆,但在这种情况下,在求逆之前添加到矩阵的正则化项使其可逆。那是技术原因,更深刻的原因是去掉一列会改变优化问题,改变参数的含义,实际上会导致不同的最优解。作为一个具体的例子,假设你有一个具有三个级别的分类变量,1,2 和 3。对应的参数是β,β2,β3. 省略第 1 列会导致β1=0,而其他两个参数的含义更改为β2−β1,β3−β1. 所以这两个差异会缩小。如果省略另一列,则原始参数中的其他对比将缩小。所以这改变了被优化的标准函数,没有理由期待等效的解决方案!如果这还不够清楚,我可以添加一个模拟示例(但不是今天)。