分类编码器缺少级别

时间:2018-07-03 10:28:59

标签: machine-learning encoding scikit-learn

import category_encoders as ce
ord_Ce = ce.ordinal.OrdinalEncoder()
ord_Ce.fit_transform(pd.DataFrame([2, np.nan, 3]).astype(object))

产生2->1, np.nan->0, 3->3编码。为什么在编码时缺少2。在我看来,3应该由编码器编码为2。为何会有这种行为?

1 个答案:

答案 0 :(得分:2)

通过source code进行跳过可以发现,在ordinal_encoding函数中,列举了类别数(总共3个类别,从1开始),并且这些数字也用于编码

categories_dict = {x: i + 1 for i, x in enumerate(categories)}
X[str(col) + '_tmp'] = X[col].map(lambda x: categories_dict.get(x))

随后将缺失值归为0。

概述:np.nan具有类别2,该类别在后期处理步骤中转换为0