详解pandas编码函数pd.factorize()

概述:本文以kaggle比赛Microsoft Malware Prediction数据为例,如需数据请自行前往:

https://www.kaggle.com/c/microsoft-malware-prediction

所谓编码,自然是将一种符号编成一种数字码-----即数字变量。例如熟知的pd.get_dummies()就是讲一种字符型或者其他类型编程成一串数字向量,也就是所谓的one-hot编码。

本文想讲的另一种编码方式。pd.factorize()。factorize英文意思:分解,分解为因数,因式分解的意思。有没有想到 factorization machine~~

在这里,pd.factorize()做的也是“因式分解”,把常见的字符型变量分解为数字。

1.为什么需要pd.factorize()?哑变量变换(get_dummies)不好吗?

个人理解:当一个feature有10几种甚至几百种取值可能的时候,使用get_summies是一件很恐怖的事情。因为:
例如feature1取值有[“a”,“b”,…“z”]26中可能的话,那么显然用哑变量就会把这一个feature变为26列。显然增加了数据的稀疏性,并且没有意义(视情况而定)。这时候或许就可以用pd.factorize()了。他会把他们分解为0-25种数字。同时1列字符串经过变换后仍是一列。就不会使得数据集看上去很臃肿了。
下面来看个实例吧。

2.kaggle数据实例展示

我们现在有一批微软公司一些设备的数据:
在这里插入图片描述
具体数据什么意思不用在意,我们只需要关注我画红框的两列数据,这是引擎与app的版本号。显然需要编码,不然哪个模型能看得懂这个?
拿EngineVersion为例:
怎么编码呢?来个onehot如何?
在这里插入图片描述
我擦,上面一看这一列有25种取值呢?这就遇到了上面说的情况,onehot编码会把这一列变成25列,实在不是一种好主意。试试pd.factorize?

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值