多重热编码

时间:2018-08-06 14:05:28

标签: encoding neural-network multilabel-classification

我是Python的新手。我正在研究多标签分类,需要准备目标数据以进行多热编码。它花费的时间比我最初想象的要多。这不是真实数据(我无法发布)。数据具有ID,类别使行唯一。因此,实际上10个类别的每个ID都有多个行,但我在嘲笑4。还有其他许多列(预测变量)。在尝试了许多方法之后,以下是我在几个小时内的最佳表现:

test_data = pd.DataFrame()
test_data["Category"] = ['A','B','C','D','A','C']
test_data["ID"] = [1,1,3,4,5,6]
test_data =test_data.pivot(index='ID', columns="Category", 
values='Category').reset_index()
test_data =test_data.fillna('0')
test_data = test_data.reset_index(drop=True).rename_axis(None, axis=1)
data = test_data.drop(['ID'], axis=1)
print(data)

忽略下面的'=',我不知道如何缩进空格。

= A B C D

0 A B 0 0

1 0 0 C 0

2 0 0 0 D

3 A 0 0 0

4 0 0 C 0

如您所见,我正在用虚拟字符'0'填充不存在的类别。

data = data.astype(str).values 
data

array(

[[''A','B','0','0'],

['0','0','C','0'],

['0','0','0','D'],

['A','0','0','0'],

['0','0','C','0']],dtype = object)

from sklearn.preprocessing import MultiLabelBinarizer
cat =['A','B','C','D','0']
mlb = MultiLabelBinarizer(cat)
mlb.fit_transform(data)

array(

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

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

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

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

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

我正在寻找两件事:

  1. 如何摆脱虚拟类别编码('0')

  2. 看来我正在破解它。有更好的方法吗?

出于好奇的想法,我正在使用完全连接的神经网络进行这种分类。

感谢您的帮助。

0 个答案:

没有答案