Nik*_*hra 4 numpy machine-learning pandas one-hot-encoding
例如,如果我的训练数据在col中具有分类值(1,2,3,4,5),那么一种热编码将给我5 col。但是在测试数据中,我说的只有5个值中的4个,即(1,3,4,5)。因此,一次热编码只会给我4个cols。因此,如果我将训练有素的权重应用于测试数据,我会得到一个错误,因为在训练和测试数据中cols的尺寸不匹配dim(4)!= dim(5)。关于如何处理丢失的col值的任何建议?下面提供了我的代码的图像:
伙计们请不要犯这个错误!
是的,您可以通过训练和测试的组合来进行这种破解,然后使自己愚弄,但真正的问题出在生产中。有一天,您的模型将面临未知类别的分类变量,然后中断。
实际上,一些更可行的选择可能是:
您可以首先合并两个数据帧,然后将get_dummies拆分,以便它们可以具有确切的列数,即
#Example Dataframes
Xtrain = pd.DataFrame({'x':np.array([4,2,3,5,3,1])})
Xtest = pd.DataFrame({'x':np.array([4,5,1,3])})
# Concat with keys then get dummies
temp = pd.get_dummies(pd.concat([Xtrain,Xtest],keys=[0,1]), columns=['x'])
# Selecting data from multi index and assigning them i.e
Xtrain,Xtest = temp.xs(0),temp.xs(1)
# Xtrain.as_matrix()
# array([[0, 0, 0, 1, 0],
# [0, 1, 0, 0, 0],
# [0, 0, 1, 0, 0],
# [0, 0, 0, 0, 1],
# [0, 0, 1, 0, 0],
# [1, 0, 0, 0, 0]], dtype=uint8)
# Xtest.as_matrix()
# array([[0, 0, 0, 1, 0],
# [0, 0, 0, 0, 1],
# [1, 0, 0, 0, 0],
# [0, 0, 1, 0, 0]], dtype=uint8)
Run Code Online (Sandbox Code Playgroud)