我手头的基本任务是
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))
where df
是一个 pandas 数据框并且categorical_list
是需要转换的列标题的列表。
d) 训练分类器并将其保存到磁盘pickle
e) 现在在另一个程序中,加载保存的模型。
f) 加载测试数据并进行相同的预处理。
g) The LabelEncoder's
用于转换分类数据。
h) 使用模型进行预测。
现在我的问题是,步骤g)
工作正常吗?
作为文档LabelEncoder
says
It can also be used to transform non-numerical labels (as long as
they are hashable and comparable) to numerical labels.
那么每个条目每次都会散列到完全相同的值吗?
如果否,有什么好的方法可以解决这个问题。有什么方法可以检索编码器的映射吗?或者与 LabelEncoder 完全不同的方式?
根据LabelEncoder https://github.com/scikit-learn/scikit-learn/blob/main/sklearn/preprocessing/_label.py#L36实现,您所描述的管道才能正常工作当且仅当您fit
LabelEncoder 在测试时使用具有完全相同的一组唯一值的数据。
有一种有点古怪的方法可以重用你在火车期间获得的 LabelEncoder。LabelEncoder
只有一个属性,即classes_
。你可以腌制它,然后像这样恢复
Train:
encoder = LabelEncoder()
encoder.fit(X)
numpy.save('classes.npy', encoder.classes_)
Test
encoder = LabelEncoder()
encoder.classes_ = numpy.load('classes.npy')
# Now you should be able to use encoder
# as you would do after `fit`
这似乎比使用相同的数据重新调整它更有效。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)