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

标签 python pandas scikit-learn

我手头的基本任务是

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/

相关文章:

python - 如何将曲线拟合到骨架图像?

scikit-learn - 在 Julia 中定义冲突模块

python-3.x - 如何在 TfidfVectorizer 中计算词频?

python - 将私有(private) pypi 存储库从 GItlab 添加到 Pycharm

python - 检查 pandas 列中的字符串并修改另一个

python - IronPython 中的 OpenFileDialog

Python:Pandas - 根据列值分隔数据框

python - 如何将 pandas dataframe 导出为 json 并保留原始日期时间格式?

python - seaborn 热图 pandas 在 isnull 上的计算

python - 如何解析 sklearns 线性回归的日期值?