【问题标题】:How do I use categorical columns in Deep Learning?如何在深度学习中使用分类列?
【发布时间】:2021-03-31 00:06:00
【问题描述】:

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

我的目标是预测“Crop_Damage”。

我该如何进行?

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

【问题讨论】:

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


    【解决方案1】:

    您有多种选择。

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

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

    除了这两个之外,keras 还提供了另一种方法来获取这个数字向量。它称为嵌入层。例如,假设您有以下值的可变作物伤害:

    1. 巨大
    2. 中等
    3. 很少

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

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

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

    对我来说,嵌入层是获得足够好的分类变量向量表示的最简单方法。但是,如果准确度满足您的要求,您可以先尝试一下。

    【讨论】:

    • 我找到了很多编码分类列的方法,categorical-embedder 似乎是最佳的,但我仍然无法看到它如何适合神经网络
    【解决方案2】:

    这是一个单热编码器。 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
    

    【讨论】:

      猜你喜欢
      • 2017-05-20
      • 2020-07-02
      • 2013-11-07
      • 2017-06-11
      • 2019-09-13
      • 2014-12-11
      • 2018-10-19
      • 2021-06-17
      • 2020-04-01
      相关资源
      最近更新 更多