【问题标题】:Input data creation for Multilabel classification多标签分类的输入数据创建
【发布时间】:2019-11-17 15:01:55
【问题描述】:

我正在研究一个多标签分类问题。 X 中的每个值都是一个分类值。原始数据如下

ID  X1  X2  X3  Y
111 AA  LL  KK  MMM
111 AA  LL  KK  MMM
111 BB  LL  jj  NNN
121 HH  DD  uu  III
121 HH  DD  yy  OOO
121 HH  LL  aa  PPP

我正在尝试将其转换为数据框,其中列(X1、X2、X3、Y)中存在的每个唯一值都将成为一个新列,并且每个 ID 都将有一条记录。我想要得到的预期输出是

ID  X1_AA   X1_BB   X1_HH   X2_LL   X2_DD   X3_KK   X3_jj   X3_uu   X3_yy   x3_aa   Y_MMM   Y_NNN   Y_III   Y_OOO   Y_PPP
111 1   1   0   1   0   1   1   0   0   0   1   1   0   0   0
121 0   0   1   1   1   0   0   1   1   1   0   0   1   1   1

我尝试使用 pandas get_dummies,它正在创建虚拟列,但 id 是重复的。这里 Y 是我的目标列。一个ID的多个Y值表示ID访问了多个频道。

另外请建议我是否可以通过在分类中为 X 和 Y 创建虚拟列来直接使用原始数据

【问题讨论】:

  • 以文本格式添加输入,而不是在图像中。
  • Also please suggest if I can directly use original data by creating dummy columns for X and Y in classification - 你能解释更多吗?
  • @jezrael Point 我试图通过使用来自 pandas 的 get_dummies,而不为每个 ID 创建单个记录,然后将其用作算法的输入来预测标签。在这种情况下,我的新数据的形状将与原始输入数据相同。我不确定这是否是正确的方法
  • @Lucy - 我认为这应该是新问题,https://stats.stackexchange.com/中最好的问题@
  • @jezrael 我会将此作为一个新问题发布。谢谢

标签: python-3.x pandas multilabel-classification


【解决方案1】:
new_df = pd.get_dummies(df).groupby('ID').sum()
new_df[new_df > 1] = 1

ID  X1_AA   X1_BB   X1_HH   X2_DD   X2_LL   X3_KK   X3_aa   X3_jj   X3_uu   X3_yy   Y_III   Y_MMM   Y_NNN   Y_OOO   Y_PPP
111 1   1   0   0   1   1   0   1   0   0   0   1   1   0   0
121 0   0   1   1   1   0   1   0   1   1   1   0   0   1   1

编辑:我不知道 groupby 中的 .max() 方法。 @jezrael 的答案绝对是一个更好的答案。

【讨论】:

    【解决方案2】:

    对于输出中的假人是必要的聚合max

    df1 = pd.get_dummies(df).groupby('ID', as_index=False).max()
    print (df1)
        ID  X1_AA  X1_BB  X1_HH  X2_DD  X2_LL  X3_KK  X3_aa  X3_jj  X3_uu  X3_yy  \
    0  111      1      1      0      0      1      1      0      1      0      0   
    1  121      0      0      1      1      1      0      1      0      1      1   
    
       Y_III  Y_MMM  Y_NNN  Y_OOO  Y_PPP  
    0      0      1      1      0      0  
    1      1      0      0      1      1  
    

    【讨论】:

      猜你喜欢
      • 2017-11-08
      • 2020-07-22
      • 2017-03-07
      • 2017-11-08
      • 2017-12-28
      • 2018-03-07
      • 1970-01-01
      • 2020-02-18
      • 2023-01-20
      相关资源
      最近更新 更多