use*_*212 3 python machine-learning python-3.x scikit-learn
我使用以下代码将字符串标签列表映射到单热编码值列表:
from sklearn.preprocessing import LabelEncoder
from sklearn.preprocessing import OneHotEncoder
labelEncoder = LabelEncoder()
targets = ["blue","green","blue","blue","green"]
integerEncoded = labelEncoder.fit_transform(targets)
Run Code Online (Sandbox Code Playgroud)
在稍后的阶段,我需要确切地知道哪些字符串标签映射到哪些整数值。
即我需要这样的东西:
integerMapping = GetIntegerMapping(labelEncoder)
Run Code Online (Sandbox Code Playgroud)
在哪里
integerMapping["blue"]
Run Code Online (Sandbox Code Playgroud)
应该返回所有“蓝色”标签映射到的 int 值
和
integerMapping["green"]
Run Code Online (Sandbox Code Playgroud)
应该返回所有“绿色”标签映射到的 int 值。
我怎样才能得到那个integerMapping字典?
您可以使用LabelEncoder.classes_和LabelEncoder.transform()来获得您所要求的关系。下面的函数应该给你你所需要的。
def get_integer_mapping(le):
'''
Return a dict mapping labels to their integer values
from an SKlearn LabelEncoder
le = a fitted SKlearn LabelEncoder
'''
res = {}
for cl in le.classes_:
res.update({cl:le.transform([cl])[0]})
return res
Run Code Online (Sandbox Code Playgroud)
classes = ['blue', 'green']
le = LabelEncoder()
le.fit(classes)
integerMapping = get_integer_mapping(le)
integerMapping['blue'] # Returns 0
integerMapping['green'] # Returns 1
Run Code Online (Sandbox Code Playgroud)
如果您有大量的类,由于for循环,这可能不会非常快,但它应该适用于少数类。
刚刚在适合 10,000 个类的 LabelEncoder 上对其进行计时。结果如下:
%timeit get_integer_mapping(le)
1 loop, best of 3: 17.1 s per loop
Run Code Online (Sandbox Code Playgroud)
它的性能实际上比我预期的要好。
| 归档时间: |
|
| 查看次数: |
5788 次 |
| 最近记录: |