在sklearn一个热门编码中,删除列以避免dumy变量陷阱的必要性



对于线性回归问题,我测试了sklearn One Hot Encoding,先丢弃后不丢弃。结果表明,当没有删除列时,r_2得分更好。

from sklearn.preprocessing import OneHotEncoder
ohe = OneHotEncoder(drop= 'first') # r_2 score 0.67

首先下降r2_score=0.67

ohe = OneHotEncoder() # r_2 score = 0.78

不首先丢弃(i,e保持默认值(r2_score=.78

那么,在Sklearn OneHotEncoding中不使用drop=first可以吗?

OneHotEncoder中的参数drop并不是用来指定是否应该删除列。相反,正如官方文件所述:

指定一种方法,用于为每个功能删除一个类别

特别是,选项drop='first'将:

删除每个功能中的第一个类别。如果只存在一个类别,则该功能将被完全删除。

因此,可能会删除整列,但前提是它只有一个类别(在这种情况下,它无论如何都没有用处(。

关于r2分数的变化,文档也解决了这个问题:

然而,删除一个类别会破坏原始表示的对称性,因此可能会在下游模型中引发偏差,例如惩罚线性分类或回归模型。

当您使用drop='first'时,这似乎影响了您的模型,最好不要删除任何类别(是的,您确实可以这样做(。

我想你可能想读一下这篇博客文章:https://inmachineswetrust.com/posts/drop-first-columns/

它包含了一个合理的解释,解释了为什么你的R2发生了变化,而且它主张根本不删除任何OHE列。

最新更新