【问题标题】:why and how to solve the data lost when multi encode in python pandas为什么以及如何解决在 python pandas 中进行多重编码时丢失的数据
【发布时间】:2021-06-11 06:35:05
【问题描述】:

Download the Data Here

您好,我有一个类似下面的数据,并且想对数据进行多重标记。

喜欢这样的东西:target

但这里的问题是多标签时数据丢失,如下所示:

issue

使用以下编码:

from sklearn.preprocessing import MultiLabelBinarizer

mlb = MultiLabelBinarizer(sparse_output=True)

df_enc = df.drop('movieId', 1).join(df.movieId.str.join('|').str.get_dummies())

有人可以帮助我,请随时下载数据集,谢谢。

【问题讨论】:

    标签: python list encode one-hot-encoding


    【解决方案1】:

    因此,当使用 pandas 读入时,该列将存储为字符串。因此,首先我们需要将其转换为实际列表。

    从那里使用.explode() 将该列表展开为一个系列(其中索引将匹配它来自的索引,列值将是该列表中的值)。

    然后将一个系列中的交叉表转换为作为值的每一行和每一列。

    然后将其与索引值上的数据框连接起来。

    请记住,当您使用高基数进行 one-hot-encoding 时,您的表会炸成一个 巨大 宽的表。我只是在前 20 行上执行此操作,最终得到 233 列。对于 225,000 + 行,处理需要一段时间(可能需要一分钟左右),最终您会得到接近 1300 列。这对于机器学习来说可能太复杂了,无法用它做任何有用的事情(尽管可能适用于深度学习)。不过,您仍然可以尝试一下,看看会得到什么。我建议测试的是找到一种方法来简化它以使其不那么复杂。也许找到一种方法将电影 ID 组合成一定数量的流派或类似的东西?但随后进行测试,看看简化它是否会改善您的模型/性能。

    import pandas as pd
    from ast import literal_eval
    
    df = pd.read_csv('ratings_action.csv')
    
    df.movieId = df.movieId.apply(literal_eval)
    s = df['movieId'].explode()
    df = df[['userId']].join(pd.crosstab(s.index, s))
    

    【讨论】:

      猜你喜欢
      • 2015-06-15
      • 2019-04-28
      • 1970-01-01
      • 2022-11-12
      • 1970-01-01
      • 2020-01-02
      • 1970-01-01
      • 2021-10-24
      相关资源
      最近更新 更多