如何使用分类列的二进制编码来预测 Python 中的标签?

How to use Binary Encoding of Categorical Columns to predict labels in Python?

我有 2 个文件 test.csvtrain.csv。属性值是分类的,我正在尝试将它们转换为数值。

我正在做以下事情:

import category_encoders as ce
encoder = ce.BinaryEncoder(cols = 'column_name' , return_df = True)
x_train_data = encoder.fit_transform(x_train_data)

这导致新的 table 共有 13 列。 之后,我正在 x_train_datay_train_data

上训练我的 DecisionTreeClassifier

最后,我想预测test.csv中的Labels。 如果我在 test.csv 上再次重复 BinaryEncoding 过程,这次会导致 < 13 features,我认为这是由于行数较少所致。 由于总列的差异,决策树分类器将不起作用。

那么,有没有办法预测呢?如果不是,那么二进制编码器的意义何在?因为我假设我们训练了一个模型,以便我们可以预测一个未知的数据集。

您只需对测试数据进行 transform() 操作即可(不再适合编码器)。 “训练”数据集中未出现的值在所有类别中都将编码为 0(只要您不更改 handle_unknown 参数)。例如:

import category_encoders as ce

train = pd.DataFrame({"var1": ["A", "B", "A", "B", "C"], "var2":["A", "A", "A", "A", "B"]})

encoder = ce.BinaryEncoder(cols = ['var1', 'var2'] , return_df = True)
x_train_data = encoder.fit_transform(train)

#   var1_0  var1_1  var2_0  var2_1
#0  0       1       0       1
#1  1       0       0       1
#2  0       1       0       1
#3  1       0       0       1
#4  1       1       1       0

test = pd.DataFrame({"var1": ["C", "D", "B"], "var2":["A", "C", "F"]})
x_test_data = encoder.transform(test)

#   var1_0  var1_1  var2_0  var2_1
#0  1       1       0       1
#1  0       0       0       0
#2  1       0       0       0

'D'在训练数据的var1中没有出现,所以编码为0 0'C''F' 没有出现在训练数据的 var2 中,所以它们都被编码为 0 0.