标签编码器将同一类编码为两个整数

数据挖掘 Python scikit-学习 标签
2022-03-01 04:07:47

首先,我用字典的键定义了标签编码器的类。然后我使用该标签编码器对一些字符串进行编码。但是对于同一个字符串,它给出不同的整数。为什么会这样?

grid_dict = {'8861892541fffff': 588,'886189254dfffff': 65, '8861892543fffff': 103, '8861892547fffff': 83, '8861892545fffff': 401,
 '8861892569fffff': 131, '8861892727fffff': 39, '886189255dfffff': 13, '8861893597fffff': 2, '8861892555fffff': 4, '886189209bfffff': 13, '8861892549fffff': 3}

le = LabelEncoder()
le.classes_ = list(grid_dict.keys())

现在

le.transform(['8861892547fffff']) #4th class

给了我array([1]) ,但le.transform(['8861892545fffff']) #5th class 也给了我array([1])不应该发生的事情。同样,当我做le.inverse_transform(0)它的给予时'8861892541fffff',这是第二类。还有当我做le.transform(['8861892549fffff']) #last class它的给予array([5])和为le.transform(['8861892569fffff']) #class6它的给予array([5])

我没有在任何地方安装标签编码器。我将一些键存储在字典中,并使用 dict 键声明标签编码器类。为什么会这样?

2个回答

使用sklearn的LabelEncoder的正确方法如下:

from sklearn.preprocessing import LabelEncoder
import random

keys = [
    '8861892541fffff', '886189254dfffff', '8861892543fffff', '8861892547fffff', 
    '8861892545fffff', '8861892569fffff', '8861892727fffff', '886189255dfffff', 
    '8861893597fffff', '8861892555fffff', '886189209bfffff', '8861892549fffff'
]

data = [random.choice(keys) for _ in range(100)]

le = LabelEncoder().fit(data)

print(le.classes_)
# ['886189209bfffff' '8861892541fffff' '8861892543fffff' '8861892545fffff'
#  '8861892547fffff' '8861892549fffff' '886189254dfffff' '8861892555fffff'
#  '886189255dfffff' '8861892569fffff' '8861892727fffff' '8861893597fffff']

print(le.transform(['8861892727fffff']))
# [10]

print(le.inverse_transform([10]))
# ['8861892727fffff']

我发现了为什么会发生这种情况(仅从堆栈交换中的问题/评论中获得,但无法再次获得该链接,因此再次在此处发布)。

在定义标签编码器的 classes_ 时,我们必须按排序顺序给出它们。否则它的行为类似于上述情况。