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

我想在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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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