【发布时间】:2019-03-25 03:08:50
【问题描述】:
我有多个由分类变量组成的列,这些变量的形式为 0-4 之间的整数值。但是,所有列都属于同一类别。我尝试使用 scikit learn 中的 OneHotEncoder,但它不会处理列中缺失的类别,当我在我的神经网络模型上测试看不见的数据时,这会导致问题。下面的代码显示了我需要编码的数据类型
>>> df = pd.DataFrame(np.random.randint(low=0, high=4, size=(5, 5)),
columns=['color1', 'color2', 'color3', 'color4', 'color5'])
>>> df
color1 color2 color3 color4 color5
0 0 1 2 3 1
1 3 1 0 1 1
2 0 1 0 3 0
3 0 2 0 1 2
4 0 2 0 3 2
>>> df_onehotencoder = OneHotEncoder(sparse=False)
>>> df2 = df_onehotencoder.fit_transform(df)
>>> df2
array([[1., 0., 1., 0., 0., 1., 0., 1., 0., 1., 0.],
[0., 1., 1., 0., 1., 0., 1., 0., 0., 1., 0.],
[1., 0., 1., 0., 1., 0., 0., 1., 1., 0., 0.],
[1., 0., 0., 1., 1., 0., 1., 0., 0., 0., 1.],
[1., 0., 0., 1., 1., 0., 0., 1., 0., 0., 1.]])
这仅针对该列中存在的类别而不是缺少的类别为每列生成和数组。我需要为每列具有相同数量的编码列,即缺失的类别将全为零。此外,解码此 OneHotEncoded 数组的最佳选择是什么,以便我可以轻松地将预测输出解码为实际整数值。
【问题讨论】:
-
所以
color1为 0 与color3为 0 的颜色相同吗?或者实际上有 20 种颜色? -
yes 0 表示 color1 和 color3 相同。例如,如果 0 = 红色,则 color1 为 0 为红色,color3 也为红色。
标签: python scikit-learn categorical-data one-hot-encoding categorization