如何正确嵌入分类数据用于二元分类任务

我想在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个用于生成的独热向量,一个用于数值)?

如图所示:
enter image description here

看起来更简单的方法是将类别直接转换为数字,即:A=1, B=2, C=3,这样只需要2个特征。正确的做法是什么,为什么?


回答:

这是否意味着我的输入层应该有4个输入特征(3个用于生成的独热向量,一个用于数值)?

是的。这意味着输入层有4个特征

看起来更简单的方法是将类别直接转换为数字,即:A=1, B=2, C=3,这样只需要2个特征。正确的做法是什么,为什么?

A=1, B=2, C=3确实更简单。然而,这会让神经网络认为C在某种程度上大于B,而B大于A。为了理解这种做法的弊端,假设你的Category实际上是对象的颜色。将颜色视为数字会暗示红色大于蓝色或者蓝色大于红色,这显然不符合直觉。我们知道神经网络只是连接起来的数学函数,它们会将分配了较大数字的颜色视为更大的颜色,因此将数字分配给颜色是一种错误的方法。因此,将每种颜色表示为一个独立的特征是合理的。这样可以将这些01视为与每个特征值相关的概率。例如,红色的值为1表示该对象为红色的概率为1。值为0表示概率为0。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注