gpt4 book ai didi

python - 在多个程序中正确使用 Scikit 的 LabelEncoder

转载 作者:IT老高 更新时间:2023-10-28 20:39:37 28 4
gpt4 key购买 nike

我手头的基本任务是

a) 读取一些制表符分隔的数据。

b) 做一些基本的预处理

c) 对于每个分类列,使用 LabelEncoder 创建一个映射。这有点像这样

mapper={}
#Converting Categorical Data
for x in categorical_list:
mapper[x]=preprocessing.LabelEncoder()

for x in categorical_list:
df[x]=mapper[x].fit_transform(df.__getattr__(x))

其中 df 是 pandas 数据框,categorical_list 是需要转换的列标题列表。

d) 训练分类器并使用 pickle

将其保存到磁盘

e) 现在在另一个程序中,保存的模型被加载。

f) 加载测试数据并执行相同的预处理。

g) LabelEncoder's 用于转换分类数据。

h) 模型用于预测。

现在我的问题是,步骤 g) 会正常工作吗?

正如 LabelEncoder 的文档所说

It can also be used to transform non-numerical labels (as long as 
they are hashable and comparable) to numerical labels.

那么每个条目每次都会散列到完全相同的值吗?

如果否,有什么好的方法可以解决这个问题。有什么方法可以检索编码器的映射?还是与 LabelEncoder 完全不同的方式?

最佳答案

根据LabelEncoder实现,当且仅当您在测试时 fit LabelEncoders 使用具有完全相同的唯一值集的数据时,您描述的管道才能正常工作。

有一种方法可以重用您在训练期间获得的 LabelEncoders。 LabelEncoder只有一个属性,即classes_。可以腌制一下,然后恢复就好了

火车:

encoder = LabelEncoder()
encoder.fit(X)
numpy.save('classes.npy', encoder.classes_)

测试

encoder = LabelEncoder()
encoder.classes_ = numpy.load('classes.npy')
# Now you should be able to use encoder
# as you would do after `fit`

这似乎比使用相同的数据重新拟合更有效。

关于python - 在多个程序中正确使用 Scikit 的 LabelEncoder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28656736/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com