Skip to main content
 首页 » 编程设计

python之在 sklearn LabelEncoder 中返回标签及其编码值

2025年05月04日15落叶无声

我正在使用来自 sklearn 的 LabelEncoder 和 OneHotEncoder 在机器学习项目中对数据集中的标签(国家名称)进行编码。一切正常,我的模型运行完美。该项目是根据包括客户所在国家/地区在内的许多特征(数据)对银行客户是继续还是离开银行进行分类。

当我想预测(分类)一个新客户(只有一个)时,我的问题就出现了。新客户的数据仍未进行预处理(即未对国家/地区名称进行编码)。类似于以下内容:

new_customer = np.array([['France', 600, 'Male', 40, 3, 60000, 2, 1,1, 50000]]) 

在我学习机器学习的在线类(class)中,讲师打开了包含编码数据的预处理数据集,手动检查法国的代码并更新它在 new_customer 中,如下所示:

new_customer = np.array([[0, 0, 600, 'Male', 40, 3, 60000, 2, 1,1, 50000]]) 

我认为这不切实际,必须有一种方法可以自动将法国编码为原始数据集中使用的相同代码,或者至少有一种方法可以返回国家列表及其编码值。手动编码标签似乎很乏味且容易出错。那么我怎样才能使这个过程自动化,或者为标签生成代码呢?提前致谢。

请您参考如下方法:

看起来您可能正在寻找估算器的 .transform() 方法。

>>> from sklearn.preprocessing import LabelEncoder 
 
>>> c = ['France', 'UK', 'US', 'US', 'UK', 'China', 'France'] 
>>> enc = LabelEncoder().fit(c) 
>>> encoded = enc.transform(c) 
>>> encoded 
array([1, 2, 3, 3, 2, 0, 1]) 
 
>>> encoded.transform(['France']) 
array([1]) 

这采用在您调用 fit(c) 时学到的“映射”并将其应用于新数据(在本例中为新标签)。您可以反向查看此映射:

>>> enc.inverse_transform(encoded) 
array(['France', 'UK', 'US', 'US', 'UK', 'China', 'France'], dtype='<U6') 

如此处的答案所述,如果您想在 Python session 之间执行此操作,您可以像这样将估算器序列化到磁盘:

import pickle 
 
with open('enc.pickle', 'wb') as file: 
    pickle.dump(enc, file, pickle.HIGHEST_PROTOCOL) 

然后将其加载到新 session 中并使用它转换传入数据。