pandas get_dummies 无法处理测试数据中看不见的标签
pandas get_dummies cannot handle unseen labels in test data
我有一个 Pandas DataFrame,train
,我是单热编码。它看起来像这样:
car
0 Mazda
1 BMW
2 Honda
如果我使用 pd.get_dummies
,我会得到这个:
car_BMW car_Honda car_Mazda
0 0 0 1
1 1 0 0
2 0 1 0
目前一切顺利。
但是,我无权访问我的测试集,因此我需要处理 car
的值出现在测试中但未在 train
中出现的可能性。
假设test
是这样的:
car
0 Mazda
1 Audi
然后如果我在 test
上使用 pd.get_dummies
,我得到:
car_Audi car_Mazda
0 0 1
1 1 0
这是错误的,因为我有一个新专栏 car_Audi
并且缺少 car_BMW
。
我希望单热编码 test
的输出为:
car_BMW car_Honda car_Mazda
0 0 0 1
1 0 0 0
所以它只是忽略了以前在测试中看不见的值。我绝对不想为以前在测试中看不到的值创建新列。
我查看了 sklearn.preprocessing.LabelBinarizer
,但它输出了一个 numpy 数组,并且列的顺序不明确:
lb = LabelBinarizer()
train_transformed = lb.fit_transform(train_df)
还给我:
array([[0, 0, 1],
[1, 0, 0],
[0, 1, 0]])
有什么想法吗?
谢谢!
这不是一个很难解决的问题。 LabelBinarizer
有个参数classes_
想知道原始标签的位置可以查询:
train_transformed = lb.fit_transform(df)
print(train_transformed)
array([[0, 0, 1],
[1, 0, 0],
[0, 1, 0]])
print(lb.classes_)
array(['BMW', 'Honda', 'Mazda'], dtype='<U5')
我有一个 Pandas DataFrame,train
,我是单热编码。它看起来像这样:
car
0 Mazda
1 BMW
2 Honda
如果我使用 pd.get_dummies
,我会得到这个:
car_BMW car_Honda car_Mazda
0 0 0 1
1 1 0 0
2 0 1 0
目前一切顺利。
但是,我无权访问我的测试集,因此我需要处理 car
的值出现在测试中但未在 train
中出现的可能性。
假设test
是这样的:
car
0 Mazda
1 Audi
然后如果我在 test
上使用 pd.get_dummies
,我得到:
car_Audi car_Mazda
0 0 1
1 1 0
这是错误的,因为我有一个新专栏 car_Audi
并且缺少 car_BMW
。
我希望单热编码 test
的输出为:
car_BMW car_Honda car_Mazda
0 0 0 1
1 0 0 0
所以它只是忽略了以前在测试中看不见的值。我绝对不想为以前在测试中看不到的值创建新列。
我查看了 sklearn.preprocessing.LabelBinarizer
,但它输出了一个 numpy 数组,并且列的顺序不明确:
lb = LabelBinarizer()
train_transformed = lb.fit_transform(train_df)
还给我:
array([[0, 0, 1],
[1, 0, 0],
[0, 1, 0]])
有什么想法吗?
谢谢!
这不是一个很难解决的问题。 LabelBinarizer
有个参数classes_
想知道原始标签的位置可以查询:
train_transformed = lb.fit_transform(df)
print(train_transformed)
array([[0, 0, 1],
[1, 0, 0],
[0, 1, 0]])
print(lb.classes_)
array(['BMW', 'Honda', 'Mazda'], dtype='<U5')