如何使用OrdinalEncoder()设置自定义顺序?

4

我在二手车价格预测数据集中有一列名为“Owner_Type”。它有四个唯一值,分别是['First', 'Second', 'Third', 'Fourth']。现在最合理的排序是 First > Second > Third > Fourth,因为价格随着这种顺序而下降。我该如何使用OrdinalEncoder()将这个顺序赋予给这些值呢?请帮帮我,谢谢!


请提供足够的代码,以便他人更好地理解或重现问题。 - Community
1个回答

12

OrdinalEncoder有一个categories参数,它接受一个包含多个类别数组的列表。以下是一个代码示例:

from sklearn.preprocessing import OrdinalEncoder
enc = OrdinalEncoder(categories=[['first','second','third','forth']])
X = [['third'], ['second'], ['first']]
enc.fit(X)
print(enc.transform([['second'], ['first'], ['third'],['forth']]))

为什么如果您已经提供了类别,还需要将编码器适配到X上? - Maturin
如果你在不应用fit的情况下应用transform,会出现错误"AttributeError: 'OrdinalEncoder' object has no attribute 'categories_'",所以你必须先应用fit_transform或者fit模型,然后再应用transform。 - Ghassen Sultana
我明白了,你说得完全正确。不过,这有点傻,因为当已经提供了分类时,调用fit方法并不会产生其他效果,只会创建一个名为categories_的属性。如果提供了分类,似乎应该自动创建这个属性。 - Maturin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接