在使用 sklearns 的 LabelEncoder() 时,如何检查分配给哪个标签的值?

How can I check what value is assigned to what label while using sklearns' LabelEncoder()?

我正在将分类数据转换为数值以用于机器学习目的。

举个例子,一辆汽车的购买价格(="buying"变量)分类为:"vhigh, high, med, low"。 为了将其转换为数值,我使用了:

le = preprocessing.LabelEncoder()
buying = le.fit_transform(list(data["buying"]))

由于这是随机完成的(例如 vhigh = 0、high = 2),因此有没有一种方法可以检查 Python 如何将这些标签中的每一个准确地转换为数值?

您可以在数据框中创建一个额外的列来映射值:

mapping_df = data[['buying']].copy() #Create an extra dataframe which will be used to address only the encoded values
mapping_df['buying_encoded'] = le.fit_transform(data['buying'].values) #Using values is faster than using list

这是一个完整的工作示例:

import pandas as pd
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
data = pd.DataFrame({'index':[0,1,2,3,4,5,6],
        'buying':['Luffy','Nami','Luffy','Franky','Sanji','Zoro','Luffy']})
data['buying_encoded'] = le.fit_transform(data['buying'].values)
data = data.drop_duplicates('buying').set_index('index')
print(data)

输出:

       buying  buying_encoded
index                        
0       Luffy               1
1        Nami               2
3      Franky               0
4       Sanji               3
5        Zoro               4

您还可以获得映射到类别的字典,如下所示 从@celius-stingher 停止的地方开始,

d1 = data.drop_duplicates('buying').drop('index', axis=1).set_index('buying')
print(d1)

输出:

        buying_encoded
buying
Luffy                1
Nami                 2
Franky               0
Sanji                3
Zoro                 4

要将此输出转换为字典,

dict_map = d1.to_dict()
print(dict_map)

输出:

{'buying_encoded': {'Luffy': 1, 'Nami': 2, 'Franky': 0, 'Sanji': 3, 'Zoro': 4}}

所以我们可以通过从返回的 Dict

中获取 buying_encoded 属性来获取字典
print(dict_map['buying_encoded'])

输出:

{'Luffy': 1, 'Nami': 2, 'Franky': 0, 'Sanji': 3, 'Zoro': 4}