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

标签 python machine-learning scikit-learn one-hot-encoding

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

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

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 中并使用它转换传入数据。

关于python - 在 sklearn LabelEncoder 中返回标签及其编码值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48938905/

相关文章:

python - 根目录下静态站点的 Nginx 配置,子目录下的 Flask 应用

python - 在ubuntu中使用livestreamer录制

python - 加载未腌制的文件时数据量较大

python - 交叉验证时关键错误不在索引中

python - 没有运行时错误,但虹膜 PCA 绘图错误

python - 是否有适用于 Python 3.x 的 Google Data API (gdata)?

machine-learning - Keras TypeError : Cannot convert Type TensorType(float32, 3D)(变量子张量{:int64:}. 0)

python - 如何使用 fillna() 函数在 python 中填充 NA/Null 的分类变量

r - 因子 MSZoning 具有新级别 NA(数据中有新因子,但线性回归模型中没有)

python - 如何将从缩放数据中学到的决策边界转移到原始数据(缩放数据)?