LabelEncoder与Pandas是分类还是枚举?

时间:2018-12-12 21:45:00

标签: python pandas scikit-learn

我正在构建推荐系统,因此,我具有用户,项目和评分的列表。因此,我需要为每个用户和项目分配一个类别ID。大约有100,000个用户和10,000个项目,评分大约为100万。我的问题是哪种方法最具扩展性?

我认为我有3种选择:

  1. 使用sklearn的preprocessing.LabelEncoder()
  2. 使用熊猫df['items'].astype('category').cat.codes.values
  3. 使用像字典这样的东西,我可以写回数据框

例如

items = item_reviews.items.unique()
items_map = {i:val for i,val in enumerate(items)}
inverse_items_map = {val:i for i,val in enumerate(items)}

所有选项都应产生相同的答案,因为每个选项都将为用户标记从0到n个项目的项目和项目向量(请注意,实际上还有更多类别,例如制造商,原产国,颜色等在模型中使用)。

我目前正在构建的产品只是一个概念证明,但是将被扩展到拥有1.5MM用户,200k项和6MM额定值的数据库,因此,我需要确保我不会浪费内存或在做不需要的计算。

1 个答案:

答案 0 :(得分:0)

我认为pandas类别是您最好的选择,因为它使用哈希表,请检查https://stackoverflow.com/a/39503973/4633341进行一些时间测试。