对于线性回归问题,我测试了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列。