【问题标题】:One Hot Encoding (mapping values issue)一种热编码(映射值问题)
【发布时间】:2021-03-21 13:10:40
【问题描述】:

我正在研究多标签文本分类。 我正在为我的训练和测试标签进行一次热编码,首先我创建了一个包含所有标签的列表,即 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'] 值时出错。

【问题讨论】:

    标签: python tensorflow keras encoding multilabel-classification


    【解决方案1】:

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

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

    【讨论】:

    • 你是对的。至于数据类型,我将更改并保持 b 和 df['LABELS'] 相同。但是如何更改我的代码,以便 np.where 可以单独迭代我的列表元素?
    • 尝试使用in 运算符来测试成员资格。
    • 您能否按照您的建议与 in 运算符分享我上面的更新代码。对我来说很容易理解
    猜你喜欢
    • 2021-12-17
    • 1970-01-01
    • 2020-07-02
    • 2016-03-19
    • 2019-02-18
    • 2018-10-25
    • 2019-02-06
    • 1970-01-01
    • 2015-12-31
    相关资源
    最近更新 更多