二进制编码及其在 Python 中的解释

数据挖掘 机器学习 Python 数据框 卡格尔 二进制
2022-03-15 10:18:18

我有一个名为的列Street,它有 2 个值:Paved 和 Gravel。这是print(train[binary_columns[0]].unique().tolist())给我的:

['Pave', 'Grvl']

我想像这样用二进制编码这些值:

df['Street'] = df['Street'].replace(['Pave', 'Grvl'], [1, 0])

但我想知道这是否是个好主意。计算机不会将其解释为Pave > Grvl吗?计算机如何区分二进制和整数编码?

2个回答

您的分类变量有两个级别,因此虚拟编码与简单地将变量输入分析之间没有实际区别。也就是说,对于虚拟代码,您将创建一个具有两个值的新变量,但您的原始变量已经是一个具有两个值的变量。虚拟编码对于具有两个以上可能值的变量很重要。所以,在这种情况下,计算机不会考虑Pave > Grvl.

但是如果你有两个以上的变量,那么你应该使用虚拟变量。

对于您的数据,您可以使用pandas.get_dummies()sklearn's一个热编码器来实现您的结果。

  1. 如何编码?

sklearn.preprocessing 为此提供了各种类,LabelBinarizer 就是其中之一。

  1. 计算机不会将其解释为 Pave > Grvl 吗?

考虑一个例子,与 Graveled 相比,人们更喜欢 Paved 的房子。然后它们是值之间的关系,因此它应该被视为您提到的东西,否则它应该是独立的值(请参阅下一个答案)。

  1. 计算机如何区分二进制和整数编码?

正如我上面提到的,如果分类值有某种关系(如上所述),那么在这种情况下它应该是整数值(0,1,2 等等),否则它应该是二进制的。二进制表示将帮助我们将独立值呈现给 ML 模型(但是在这种情况下它没有多大意义,因为您只有 2 个值)但是考虑一个特征具有超过 2 个分类值的示例。如果它们都是独立的,那么它应该表示为二进制值,即以OneHotEncoding 的形式(请参阅 sklearn.preprocessing 类)