如何解决在熊猫中对包含“相同”高基数信息的多列进行哈希编码
我有一个包含数值特征和25个非常高的基数分类特征的数据集,我需要以一种有意义的方式对其进行编码,以便将其用于训练预测算法。我的问题是所有25列都对应于同一概念,因此理想情况下,它们应该全部编码为一个组。让我解释。熊猫数据框如下所示:
memberid code1 code2 code3 ... code25 cost
memberA c1 c2 c4 c3 100.0
memberB c2 c3 c1 NaN 120.0
memberC c1 c2 c5 c3 200.0
这是由以下代码生成的(此处仅4个“代码”列):
data = {'memberid': ['memberA','memberB','memberC'],'code1': ['c1','c2','c1'],'code2': ['c2','c3','c2'],'code3': ['c4','c1','c5'],'code25': ['c3',np.nan,'c3'],'cost': [100.0,120.0,200.0]}
df = pd.DataFrame(data,columns = ['memberid','code1','code2','code3','code25','cost'])
我找到了一种方法来对“代码”列进行一次热编码,即创建一个如下所示的数据框:
has_c1 has_c2 has_c3 has_c4 has_c5
1 1 1 1 0
1 1 1 0 0
1 1 1 0 1
我的问题是所有“代码”列的值都具有非常高基数,因此像我刚才描述的那样,一种热编码会增加另外的〜15,000(稀疏),从而破坏了数据量)列到数据集。不幸的是,从内存的角度来看,这对于拟合ML算法是禁止的,因此我考虑针对此问题研究哈希编码。
不幸的是,尽管我能够使用numpy和一/零手动对“代码”列进行手动热编码,但我不知道如何将所有“代码”列的信息“分组”为,例如50列,其中包括哈希编码的组成部分。这可行吗?还是应该采用一种完全不同的方法来将这些高基数的“一组”特征一起编码?
解决方法
先尝试get_dummies
,然后尝试sum
output = pd.get_dummies(df.filter(like='code'),prefix='Has').sum(level=0,axis=1)
Out[549]:
Has_c1 Has_c2 Has_c3 Has_c4 Has_c5
0 1 1 1 1 0
1 1 1 1 0 0
2 1 1 1 0 1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。