如何在深度学习中使用分类列?

时间:2020-12-21 07:51:03

标签: python-3.x tensorflow machine-learning keras neural-network

我正在使用这个作物农业数据集。为了使用它来创建神经网络,我使用 MinMaxScalar 对数据进行了预处理,这将在 0 和 1 之间缩放数据。但我的数据集也包含分类列,因此在预处理过程中出现错误。所以我尝试使用 OneHotEncoder 和 LabelEncoder 对分类列进行编码,但当时我不明白该怎么做。

我的目标是预测“Crop_Damage”。

我该如何进行?

链接到数据集 - https://www.kaggle.com/aniketng21600/crop-damage-information-in-india

2 个答案:

答案 0 :(得分:1)

您有多种选择。

您可以使用一种热编码并将您的分类变量作为一种热网络传递给网络。

您可能会从 NLP 及其处理中获得灵感。一个热向量是稀疏的并且可能非常大(取决于您的分类变量的唯一值)。请查看 Word2vec(cat2vec) 或 GloVe 技术。他们都旨在从分类元素创建非稀疏数字向量(有意义)。

除了这两个 keras 之外,还提供了另一种获取此数值向量的方法。它称为嵌入层。例如,让我们假设您有这些值的可变作物损坏:

  1. 巨大

首先,您为分类变量的每个唯一值分配唯一整数。

  1. 巨大 = 0
  2. 中 = 1
  3. 小= 2

比您将转换后的分类值(唯一整数)传递给嵌入层。嵌入层采用唯一整数的输入序列并产生密集向量序列。这些向量的值首先是随机的,但在训练期间像神经网络的常规权重一样进行优化。所以我们可以说在训练过程中神经网络根据损失函数构建类别的向量表示。

对我来说,嵌入层是获得足够好的分类变量向量表示的最简单方法。但如果准确度让你满意,你可以先用一个热试。

答案 1 :(得分:0)

这是一个单热编码器。 df 是您正在使用的数据框, column 是名称 要编码的列。 prefix 是一个字符串,附加到由 Pandas 傻瓜创建的列名。会发生什么是新的虚拟列被创建和 作为新列附加到数据框中。然后删除原始列。 Youtube 上有一系列关于编码数据帧和其他主题的精彩视频here.

def onehot_encode(df, column, prefix):
    df = df.copy()
    dummies = pd.get_dummies(df[column], prefix=prefix)
    df = pd.concat([df, dummies], axis=1)
    df = df.drop(column, axis=1)
    return df
相关问题