【问题标题】:Python sklearn's labelencoder with categorical binsPython sklearn 的带有分类箱的标签编码器
【发布时间】:2018-07-17 13:57:27
【问题描述】:

我一直在手动进行转换,但有没有办法通过 sklearn 的 labelencoder 使用 bin 或范围:

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】:

    据我所知,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]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-11
      • 2017-03-27
      • 2020-11-23
      • 2016-07-29
      • 1970-01-01
      • 2018-09-11
      • 2021-07-19
      相关资源
      最近更新 更多