对特征进行稀疏编码

这篇博客探讨了如何利用sklearn中的DictVectorizer和multilabelBinarizer对特征进行稀疏编码。作者遇到的问题是在处理包含重复userID的app列表时,尝试使用pandas的OneHotencoding和groupby操作,但遇到了内存问题。解决方案是直接构建稀疏矩阵sparse.csr_matrix,并通过调整参数indices和indptr简化处理。此外,文章还提到了在保存稀疏矩阵时,选择scipy.sparse.save_npz而非scipy.io.mmwrite可以显著减小文件大小。
摘要由CSDN通过智能技术生成

(然后sklearn早已有现成的包,DictVectorizer,multilabelBinarizer都可以做类似的事。)
需要处理的特征存在两个表中,第一个表为用户的个人信息表,如下:

  • userID gender
  • 11,male
  • 22,female
  • 33,male
    第二个表为用户的app列表:
  • userID appID
  • 11,234
  • 11,345
  • 11,456
  • 22,345
  • 22,456
    可以看到,第二个列表中userID是重复的,怎么把一系列app对应到一个userID上想了我好久。
    开始的时候,尝试用pandas的Dataframe读取,对appID列进行OneHotencoding,然后将编码完的的结果(csr_matrix)转换成Dataframe,再根据userID进行goupby合并。结果是当把稀疏矩阵转换成array的时候直接爆炸。。因为dataframe的参数不能是稀疏矩阵。
    然后再想办法,发现不一定要把结果转换成dataframe的格式,可以根据app列表直接构建稀疏矩阵sparse.csr_matrix。
    而且用下面的构建方法会简单很多,而且多个app特征直接按行合并了,不用再用dataframe groupby。
    csr_matrix((data, indices, indptr), [shape=(M, N)])
    参数indices按顺序存储所有元素的列值,indptr保存每一行的元素个数。
    ind
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值