如何将 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
}
我将接受输入并需要将其转换为单热编码以将其提供给我的模型。我的计划是将输入数组(例如:男性,follow_up,躯干是 [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
如果你想特别注意用来表示不同值的数字,你可以简单地用字典替换不同的列表。 sex_list -> sex_dict
等在 pd.Categorical
调用中。
这是我的字典,我已经将输入映射到数字。
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
}
我将接受输入并需要将其转换为单热编码以将其提供给我的模型。我的计划是将输入数组(例如:男性,follow_up,躯干是 [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
如果你想特别注意用来表示不同值的数字,你可以简单地用字典替换不同的列表。 sex_list -> sex_dict
等在 pd.Categorical
调用中。