Pandas 有一个名为 get_dummies() 的方法,可以创建分类变量的虚拟编码。Scikit-learn 还有一个 OneHotEncoder,需要与 LabelEncoder 一起使用。使用它们各自的优点/缺点是什么?同样,两者都产生虚拟编码(分类变量的 k 个级别的 k 个虚拟变量)而不是 one-hot 编码(k-1 个虚拟变量),如何摆脱额外的类别?这种虚拟编码在回归模型中产生了多少问题(共线性问题 - 又称虚拟变量陷阱)?
用于回归的 Pandas 分类变量编码(单热编码与虚拟编码)
数据挖掘
回归
scikit-学习
熊猫
分类数据
编码
2021-10-15 00:22:28
1个回答
的一个优点get_dummies是它可以对整数以外的值进行操作(因此您不需要LabelEncoder)并返回一个 DataFrame ,其中类别作为列名。此外,您可以使用 . 方便地删除一个冗余类别drop_first=True。
scikit-learn 的优势之一OneHoteEncoder在于 scikit-learn API。OHE 为您提供了一个转换器,如果您指定类别总数,您可以将其分别应用于您的训练和测试集。这不适get_dummies用于,例如,如果训练集错过了测试集中存在的类别。
您仍然可以通过简单地从生成的 numpy 数组中删除列来删除类别(例如,使用n_values_或feature_indices_查看哪些列对应于相同的特征)。一些模型无论如何都可以工作,例如基于树的模型。此外,L1 正则化通常可以将冗余特征设置为零(参见Lasso 回归)。
其它你可能感兴趣的问题