繁体   English   中英

如何将 numpy 阵列转换为一种热编码?

[英]How to convert a numpy array to one hot encoding?

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

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
}

我将接受输入并需要将其转换为单热编码以将其提供给我的 model。 我的计划是将输入数组(例如:male,follow_up,trunk,即 [0, 1, 2])转换为一个热编码:

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

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

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

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 替换不同的列表。 pd.Categorical调用中的sex_list -> sex_dict等等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM