在哪些情况下我们不应该删除第一级分类变量?

数据挖掘 机器学习 算法 编码 虚拟变量
2021-09-19 20:26:30

机器学习的初学者,我正在研究 one-hot 编码概念。

与统计数据中你总是想放弃第一级以获得k-1假人(如在 SE 上讨论的那样)不同,似乎有些模型需要保留它并拥有k假人。

我知道有k级别可能会导致共线性问题,但我不知道有级别会导致任何问题k-1

但是由于默认情况下pandas.get_dummies()有它的drop_first参数false,这有时肯定是有用的。

在哪些情况下(算法、参数...)我想保持第一级并适合k每个分类变量的级别?

编辑: @EliasStrehle 对上述链接的评论指出,这仅在模型具有截距时才成立。这个规则可以推广吗?像 KNN 或树这样的算法在统计定义中不完全是模型呢?

2个回答

首先,如果您的数据有缺失值,get_dummies默认情况下会产生全零,因此完美的多重共线性实际上并不成立。此外,从数据操作的角度来看(不考虑建模),保持分类变量的每个值都有一个虚拟变量的对称性是有意义的。

在决策树(及其各种集成)中,保留所有虚拟对象是有益的:如果您删除第一个虚拟对象,则模型只能通过选择(通过树中的几个步骤,不太可能!)“不这另一个假人。”
再说一次,最好不要对决策树进行一次热编码,但现在有些包本身并不处理分类变量。

K-最近邻似乎也可以从保持所有级别中受益。出租车距离,仅限于一个特征的假人,具有不同值的两个点之间的距离为 1,如果它们的值之一是移除的假人,否则为 2。
但同样,如果没有 one-hot 编码,KNN 似乎会更好,但是,如果您能想出它们,则可以对类别值之间的距离进行更明智的测量。

另请参阅https://stats.stackexchange.com/questions/231285/dropping-one-of-the-columns-when-using-one-hot-encoding
(特别是在线性模型中使用正则化时,可能是值得保留所有假人。)

小补充,因为这个还没有提到,我也在寻找它。这里有一个解释
对于 drop 参数:

drop{'first', 'if_binary'} 或类似形状的数组 (n_features,), default=None

指定用于删除每个功能的一个类别的方法。这在完全共线特征导致问题的情况下很有用,例如将结果数据输入神经网络或非正则化回归时。

但是,删除一个类别会破坏原始表示的对称性,因此可能会导致下游模型出现偏差,例如惩罚线性分类或回归模型。