所以我的代码是:
{{1}}
但是如果在我的测试数据集中,我有类似“北京”的东西,但是“北京”在训练集中不存在?编码器有没有办法处理这个问题,而不是在全球所有可能的首都都加入?
答案 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)