问题描述
我正在使用类别编码器库进行二进制编码,但在对城市进行编码时遇到了一些问题。
预期行为
我已经编码并期望在训练和生产数据上的编码是相同的,因为编码器对象对于训练过的类别是相同的,对于看不见的类别应该发生新的编码,但是例如德里在训练 df 上被编码为 0001当我在 prod df 上使用相同的编码器时,编码为 0011。
不知道为什么会这样
[在此处输入图片说明][1]
https://i.stack.imgur.com/EDuF5.png
实际行为
德里编码在火车和生产上应该是 0001,同样对于其他城市,对于看不见的类别也应该有新的编码应该在那里,请看看这个,让我知道如何处理看不见的类别以及为什么训练好的类别编码改变了使用相同的编码器对象训练和生产数据以及如何确保编码不会改变..
如果有人可以纠正代码并帮助我处理看不见的城市,那会很有帮助。
https://i.stack.imgur.com/IkPTo.png
生产数据中的实际数据
[在此处输入图片说明][2]
重现问题的步骤
import category_encoders as ce
import pandas as pd
data=pd.DataFrame({'City':['Delhi','Mumbai','Hyderabad','Chennai','Bangalore','Delhi','Agra']})
#Create object for binary encoding
encoder= ce.BinaryEncoder(cols=['City'],return_df=True)
#Original Data
data.head()
train data
train_data_encoded=encoder.fit_transform(data)
concat
final_train_data=pd.merge(data,data_encoded,left_index=True,right_index=True)
prod_data=pd.DataFrame({'City':['Bhopal','Bhopal','indore','Agra']})
prod_data_encoded=encoder.fit_transform(prod_data)
prod_data_encoded
final_prod_data=pd.merge(prod_data,prod_data_encoded,right_index=True)
#创建数据框 [1]:https://i.stack.imgur.com/EDuF5.png [2]:https://i.stack.imgur.com/IkPTo.png
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)