作者:木色雪魂K | 来源:互联网 | 2022-12-10 13:41
我一直在手动进行转换,但有没有办法使用sklearn的bin或范围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]
或者你可以想象使用年龄范围,距离等.有没有办法做到这一点?
1> louic..:
据我所知,使用LabelEncoder无法做到这一点,但制作自定义转换函数应该可行.
编辑:更新代码以处理在两个或两个箱中都没有出现的项目.
from sklearn.base import TransformerMixin
class BinnedLabelEndcoder(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 = BinnedLabelEndcoder()
A = ["paris", "memphis"]
B = ["tokyo", "amsterdam"]
le.fit([A,B])
print(le.transform(["tokyo", "memphis", "paris","tokyo", "amsterdam"]))
产量
[2, 1, 1, 2, 2]