【问题标题】:How to convert a numpy array to one hot encoding?如何将 numpy 数组转换为一种热编码?
【发布时间】:2021-06-28 07:36:26
【问题描述】:

这是我的字典,我已将输入映射到数字。

sex_dict = {
     "male" : 0,
     "female" : 1
}
type_dict = {
    "histo" : 0,
    "follow_up" : 1,
    "consensus" : 2,
    "confocal" : 3
}
localization_dict = {
    "back" : 0,
    "lower extremity" : 1,
    "trunk" : 2,
    "upper extremity" : 3,
    "abdomen" : 4
}

我将接受输入并需要将其转换为 one-hot 编码以将其提供给我的模型。我的计划是将输入数组(例如:male,follow_up,trunk,即 [0, 1, 2])转换为 one hot encoding:

[0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0]

数组中应该有 11 个元素,但是在转换时我只能得到 9 个元素,因为 2 是数组中的最高数字。如何让 one-hot 编码包含字典中的所有元素并最终得到 (1,11) 形状?

【问题讨论】:

    标签: python arrays numpy numpy-ndarray one-hot-encoding


    【解决方案1】:

    如果您不介意使用 pandas 进行数据处理,您可以使用 pd.Categorical 和 pd.get_dummies 来实现结果。这是一个适合您的代码 sn-p:

    import numpy as np
    import pandas as pd
    
    sex_list = [
      "male",
      "female"
    ]
    type_list = [
      "histo",
      "follow_up",
      "consensus",
      "confocal"
    ]
    localization_list = [
      "back",
      "lower extremity",
      "trunk",
      "upper extremity",
      "abdomen"
    ]
    
    values = np.array([
      ["male", "follow_up", "trunk"]
    ])
    values = pd.DataFrame(values, columns=["sex", "type", "localization"]).assign(
      sex=lambda row: pd.Categorical(row.sex, sex_list),
      type=lambda row: pd.Categorical(row.type, type_list),
      localization=lambda row: pd.Categorical(row.localization, localization_list)
    )
    encoded_array = pd.get_dummies(values).values
    

    如果您想特别注意用于表示不同值的数字,您可以简单地将不同的列表替换为 dicts。 sex_list -> sex_dict 等在 pd.Categorical 调用中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-21
      • 2021-04-15
      • 1970-01-01
      • 2020-08-31
      • 2021-07-18
      • 2021-12-18
      相关资源
      最近更新 更多