数值分箱与one-hot


本部分仅介绍数值类特征的one-hot,关于文本的one-hot请参考上一部分。

数值one-hot可以使用pandas.cut()和get_dummies()或者sklearn.OnehotEncoder。
此外,skearn的preprocessing.KBinsDiscretizer类和Binarizer类也可以用于数值分箱。

pandas方式

基本思路是先使用cut()对数值进行分箱,分箱后使用get_dummies()得到onehot值。API:

https://pandas.pydata.org/docs/reference/api/pandas.cut.html?highlight=cut#pandas.cut

https://pandas.pydata.org/docs/reference/api/pandas.get_dummies.html

我们先对数据进行分箱:

我们这里使用的是指定分隔值的方式,还可以简单的指定平均分成N个等分等,详见cut()的API。

lst = np.arange(0,100, 3)
print(lst)
[ 0  3  6  9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69
 72 75 78 81 84 87 90 93 96 99]
lst_bins = pd.cut(lst, [-1,10,50,100])
print(lst_bins)
[(-1, 10], (-1, 10], (-1, 10], (-1, 10], (10, 50], ..., (50, 100], (50, 100], (50, 100], (50, 100], (50, 100]]
Length: 34
Categories (3, interval[int64]): [(-1, 10] < (10, 50] < (50, 100]]

我们看一下每个区间的数量:

print(pd.value_counts(lst_bins))
(50, 100]    17
(10, 50]     13
(-1, 10]      4
dtype: int64

但这样分箱后不是很适合阅读,所以我们可以加上标签:

lst_bins = pd.cut(lst, [-1,10,50,100], labels=['1','2','3'])
print(lst_bins)
['1', '1', '1', '1', '2', ..., '3', '3', '3', '3', '3']
Length: 34
Categories (3, object): ['1' < '2' < '3']

我们还可以简单的将数据分箱成N份:

lst_bins2 = pd.cut(lst, 5, labels=['1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值