我是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]])
我正在寻找两件事:
如何摆脱虚拟类别编码('0')
看来我正在破解它。有更好的方法吗?
出于好奇的想法,我正在使用完全连接的神经网络进行这种分类。
感谢您的帮助。