如何使用scikit LabelEncoder用于新标签?

时间:2017-08-03 22:08:01

标签: pandas machine-learning scikit-learn sklearn-pandas scikits

所以我的代码是:

{{1}}

但是如果在我的测试数据集中,我有类似“北京”的东西,但是“北京”在训练集中不存在?编码器有没有办法处理这个问题,而不是在全球所有可能的首都都加入?

3 个答案:

答案 0 :(得分:0)

在将数据帧df拆分为train并进行测试之前,您可以将df['capital city']的总列表传递给LabelEncoder.fit()

例如,如果df是这样的:

df['capital city'] = ['amsterdam', 'paris', 'tokyo', 'beijing', 'tokyo', 'newyork', 'paris']

然后,您可以使用:

le = preprocessing.LabelEncoder();
le.fit(df['capital city'])

le.classes_
Output: ['amsterdam', 'beijing', 'newyork', 'paris', 'tokyo']

然后在火车上使用transform()并测试数据以正确地将它们转换为整数。

train["capital city integers"] = le.transform(train["capital city"])
test["capital city integers"] = le.transform(test["capital city"])

希望这有帮助。

注意: 虽然上面给出的siggestion对你有用,并且在学习时是完全可以接受的,但是当你将它用于实际任务时,你应该考虑现实场景。因为在现实世界中,所有可用数据都将是训练数据(因此您使用和编码首都城市),然后可能会出现包含前所未有的首都城市价值的新数据。那个案子你想做什么?

答案 1 :(得分:0)

您可以尝试使用“sklearn.LabelEncoder以前从未见过的值”的解决方案 https://stackoverflow.com/a/48169252/9043549

答案 2 :(得分:0)

对于现实情况,您所拥有的只是训练数据,以后可以上新课,您可以尝试我的解决方案:

le.classes_ = np.append(le.classes_, "new_class_name")
le.transform(new_y)