Python sklearn的带有分类箱的labelencoder

问题描述 投票:6回答:1

我一直在手动进行转换,但是有一种方法可以在sklearn的labelencoder中使用垃圾箱或范围:

le = LabelEncoder()
A = ["paris", "memphis"]
B = ["tokyo", "amsterdam"]
le.fit([A,B])
print(le.transform(["tokyo", "memphis", "paris","tokyo", "amsterdam"]))

期望的输出-> [2,1,1,2,2]

或者您可以想象使用年龄范围,距离等。有没有办法做到这一点?

python scikit-learn
1个回答
5
投票

据我所知,使用LabelEncoder无法做到这一点,但是制作自定义转换函数应该可以。

编辑:更新了代码,以处理两个垃圾箱中或两个垃圾箱中都不存在的项目。

from sklearn.base import TransformerMixin

class BinnedLabelEncoder(TransformerMixin):       

    def transform(self, X, *_, start_index=1):
        result = []
        for item in X:
            for group_id, group in enumerate(self.group_list):
                if item in group:
                    result.append(group_id + start_index)
                    break
            else:
                result.append(None)
        return result

    def fit(self, group_list, *_):
        self.group_list = group_list
        return self

您可以将其与问题代码一起使用:

le = BinnedLabelEncoder()
A = ["paris", "memphis"]
B = ["tokyo", "amsterdam"]
le.fit([A,B])
print(le.transform(["tokyo", "memphis", "paris","tokyo", "amsterdam"]))

输出

[2, 1, 1, 2, 2]
© www.soinside.com 2019 - 2024. All rights reserved.