我想在Keras使用一个简单的前馈网络。我的一些数据值是在我将其提供给网络之前要嵌入的类别。
使用以下示例数据:
+-------------+---------+
|category_val | Numeric |
+-------------+---------+
|"A" | 0.5 |
+-------------+---------+
|"B" | 0.2 |
+-------------+---------+
|"C" | 0.1 |
+-------------+---------+
我在category_val列上使用了pandas.get_dummies并得到:
+---+-----------+-----------+-----------+
| id| category=A| category=B| category=C|
+---+-----------+-----------+-----------+
| 0| 1| 0| 0|
| 1| 0| 1| 0|
| 2| 0| 0| 1|
+---+-----------+-----------+-----------+
这是否意味着我的输入层应该有4个输入功能(3个用于生成的热矢量,1个用于数值)?
将类别更改为数字IE似乎更容易:A = 1,B = 2,C = 3然后只有2个功能,正确的方法是什么?为什么?
这是否意味着我的输入层应该有4个输入功能(3个用于生成的热矢量,1个用于数值)?
是。这意味着输入层有4个功能。
将类别更改为数字IE似乎更容易:A = 1,B = 2,C = 3然后只有2个功能,正确的方法是什么?为什么?
更改A=1, B=2, C=3
更容易。然而,它告诉神经网络C
某种程度上比B
更大,这在某种程度上大于A
。要理解这个问题,让我们假设你的Category
实际上是一个物体的颜色。将颜色作为数字处理意味着red
大于blue
或blue
大于red
,这是非常无意义的。我们知道神经网络只是连接数学函数,它们会将分配较大数字的颜色视为较大的颜色,因此将数字分配给颜色是错误的方法。因此,通过单独的特征来表示每种颜色是有意义的。有助于将这些0和1视为与每个特征值相关的概率。例如,red
的值为1表示该对象为red
的概率为1.值0表示0概率。