我手头的基本任务是
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)训练分类器并使用泡菜将其保存到磁盘
e)现在在另一个程序中,加载了保存的模型.
f)加载测试数据并执行相同的预处理.
g)LabelEncoder用于转换分类数据.
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
实现,当且仅当您在测试时使用具有完全相同的唯一值集的数据的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,pandas,scikit-learn 来源: https://codeday.me/bug/20190926/1817934.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。