首页 > 解决方案 > 一种热编码(映射值问题)

问题描述

我正在研究多标签文本分类。我正在为我的训练和测试标签进行一次热编码,因此首先我创建了一个包含所有标签的列表,即 8921 个唯一标签,然后我在列表的帮助下进行一次热编码,如下所示: 注意:以下代码:b 是我的 8921 标签列表,df['LABELS'] 如下所示:

b=['865.09','482.1','860.4','31.29', ......, '76.74', '76.92', '79.32']

LABELS
[532.40,493.20,V45.81,412,401.9,44.43]
[211.3,427.31,578.9,560.1,496,584.9,428.0,276.5]
[440.22, 492.8, 401.9, 714.0, 39.29, 88.48] 

我的代码:

for label in b:
   df[label]=np.where((df['LABELS'])==label,1,0)
df[['LABELS']+b].head()

我得到的输出:

   LABELS    038.9   785.59  584.9   427.5   410.71   .....     428.0    682.6   425.4  
0  [038.9,     0       0      0       0        0                   0       0       0       
   493.20,    
   V45.81,   
   682.6, 
   401.9, 
   44.43]

1  [472.5,      0       0       0      0        0      .....        0        0       0        
   428.0,  
   578.9, 
   560.1, 
   496, 
   584.9]

期望的输出

   LABELS    038.9   785.59  584.9   427.5   410.71   .....     428.0    682.6   425.4  
0  [038.9,     1       0      0       0        0                   0       1       0       
   493.20,    
   V45.81,   
   682.6, 
   401.9, 
   44.43]

1  [472.5,      0       0       1      1        0      .....        1        0       0        
   428.0,  
   578.9, 
   560.1, 
   496, 
   584.9]

请帮助我在迭代我的 df['LABEL'] 值时出错。

标签: pythontensorflowkerasencodingmultilabel-classification

解决方案


它似乎df['LABELS']是一个系列,每行都包含一个列表。所以np.where可能会用一个标签检查这个列表。例如,它检查是否[532.40,493.20,V45.81,412,401.9,44.43] == '865.09'明显返回False.

除此之外,其中的标签b是字符串,而其中的标签df['LABELS'] 似乎不是。这也会导致Falseas'865.09' == 865.09不一样。


推荐阅读