关于独热编码中 drop
参数的探讨:
本段文字主要讲解了三种独热编码参数 drop
的用法及其优劣:
drop=None
: 这是独热编码的默认设置,它会为每个类别创建一个特征列,例如一个具有三个类别的特征将被编码为三个特征列。drop=first
: 该参数会将每个特征的第一个类别删除,例如一个具有三个类别的特征将被编码为两个特征列。 这种做法可以避免多重共线性,因为独热编码中始终存在一列冗余信息。 然而,作者不推荐使用此参数,因为:- 通常删除第一个类别并不会带来预测上的优势。
drop=first
与handle_unknown=ignore
不兼容,而handle_unknown=ignore
是一个很有用的选项。- 如果对所有特征进行标准化或使用正则化模型(两种常见的做法),
drop=first
可能会导致问题。 drop=if binary
: 这是 Scikit-learn 2.3 版本的新功能,它只在特征为二元特征(即只有两个类别)时才会删除第一个类别。 例如,一个具有三个类别的特征会被编码为三个特征列,而一个具有两个类别的特征会被编码为一个特征列。 作者认为该参数与drop=first
存在相同的问题,并倾向于继续使用drop=None
。
作者最后强调了理解 drop=if binary
用法的必要性,并鼓励读者分享他们对该参数的理解。
总结而言,作者建议在独热编码中使用 drop=None
,并提醒读者注意其他两种 drop
参数可能带来的问题。
0.23 版本新增功能:在 OneHotEncoder 中使用 drop='if_binary' 仅在特征为二元特征(意味着它只有两个类别)时才丢弃第一个类别。 注意:从 scikit-learn 1.0 开始,drop='first' 和 drop='if_binary' 都可以与 handle_unknown='ignore' 一起使用。 但是,被丢弃的类别和未知类别都将被编码为全零。