我正在使用OrdinalEncoder,但找不到如何指定编码顺序。我的意思是,我有“坏”,“平均”,“好”等类别,这些类别自然有序。但我想指定该顺序,因为编码器无法了解类别的含义。确实,使用category ='auto',某些类别相对于其他类别以错误的方向编码,我不希望这样做,因为至少对于某些类别,我知道相关性是正还是负。
但是指定类别会在拟合期间导致错误:
“ OrdinalEncoder”对象没有属性“ handle_unknown”。
如果我未指定类别,则拟合过程会顺利进行,而且我也不明白为什么(拟合后的属性“ categories_”向我显示了我尝试指定它们时手动输入的相同类别)。
我将类别指定为列表列表。这里没有指定类别会发生什么情况。
import pandas as pd
from sklearn.preprocessing import OrdinalEncoder
df = pd.DataFrame(np.array([['a','a','a'], ['b','c','c']]).transpose())
oE = OrdinalEncoder(categories='auto')
oE.fit(df)
print(oE.categories_)
结果:[array(['a'], dtype=object), array(['b', 'c'], dtype=object)]
明确指定类别:
df = pd.DataFrame(np.array([['a','a','a'], ['b','c','c']]).transpose())
oE = OrdinalEncoder(categories=[['a'], ['b', 'c']])
oE.fit(df)
结果是此错误:
回溯(最近通话最近一次):
文件“”的第3行,在 oE.fit(df)
文件 “ /home/alessio/anaconda3/lib/python3.6/site-packages/sklearn/preprocessing/_encoders.py”, 适合的774号线 self._fit(X)
文件 “ /home/alessio/anaconda3/lib/python3.6/site-packages/sklearn/preprocessing/_encoders.py”, 第85行,_fit 如果self.handle_unknown =='错误':
AttributeError:“ OrdinalEncoder”对象没有属性 'handle_unknown'
答案 0 :(得分:0)
我有同样的问题。这是scikit-learn中的错误,已经修复,并已添加到0.20.1版本中,该版本仍未发布。 https://github.com/scikit-learn/scikit-learn/issues/12365
我通过将固定的_encoders.py
复制到我的项目并使用临时解决了该问题。
from _encoders import OrdinalEncoder