在机器学习中,连续变量的离散化过程,一般用pandas的 qcut或者cut函数来进行分箱。
qcut和cut的区别
关于这两个函数的联系和区别,网上有各种说法,典型的有以下几种:
- qcut用于指定箱子个数,cut用于指定分箱边界。
- qcut用于等频分箱,cut用于等距分箱。
- qcut用于值比较多的情况,cut用于值比较少。
这些说法都是不准确或者不对的,归根结底来说,qcut和cut的区别,是分箱思路的不同。也就是分箱时,你关注的是箱子的容量(即箱子中样本的多少),还是关注箱子的尺寸(即边界值,以及边界值之间的距离)。
如果关注的是箱子的容量,比如希望等频分箱,或者第一个箱子装50%,剩下的平分,那么就用qcut。
如果关注的是箱子的尺寸,比如0-100的装在一个箱子里面,100-200的装另外一个,或者说等距分箱,那么就用cut。
具体解释下qcut和cut的各个参数以及返回值的含义。
qcut 基于分位数的离散化方法
不仅可以等频分箱,而且可以指定每个箱子的分位数。
out, bins = pandas.qcut(x, q, labels=None, retbins=False, precision=3, duplicates=‘raise’)
| 参数名 | 取值 | 说明 |
|---|---|---|
| x | 1d ndarray or Series | 分箱对象数组 |
| q | int or list-like of float | int:分位数,比如10代表按照10分位分箱,4代表按照4分位分箱。 list-like of float:分位数数组,比如[0, .25, .5, .75, 1.] 必须在0,1之间取值 |
| labels | array or False, default None | 分箱的标签数组,False的时候返回代表分箱的整数 |
| retbins | bool, optional | 是否把分箱结果作为返回值。 |
| precision | int, optional | 精度 |
| duplicates | {default ‘raise’, ‘drop’}, optional | 如果分箱边界不是唯一的,指定raise ValueError ,或者是drop 非唯一值 |
| 返回值 | 取值 | 说明 |
|---|---|---|
| out | Categorical or Series or array of integers if labels is False | 如果x是series则out是category series,否则out是Categorical |
| bins | ndarray of floats | 分位数数组,只有retbins 为True才返回 |
cut 基于箱子长度的离散化方法
不仅可以等距分箱,还可以指定每个箱子的边界,甚至可以留白
out, bins = pandas.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False, duplicates=‘raise’, ordered=True)
| 参数名 | 取值 | 说明 |
|---|---|---|
| x | 1d ndarray or Series | 分箱对象数组 |
| bins | int, sequence of scalars, or IntervalIndex | int:指定等距分箱的箱子数量,同时最左或者最右边界再扩展0.1%(取决于right参数) sequence of scalars: IntervalIndex:指定分箱间隔值,不在间隔的样本数据都设为NaN |
| right | bool, default True | 分箱是否包括最右侧的值 |
| labels | array or False, default None | 分箱的标签数组,False的时候返回代表分箱的整数 |
| retbins | bool, optional | 是否把分箱结果作为返回值。 |
| precision | int, optional | 精度 |
| include_lowest | bool, default False | 第一个分箱是否应该包括最小值 |
| duplicates | {default ‘raise’, ‘drop’}, optional | 如果分箱边界不是唯一的,指定raise ValueError ,或者是drop 非唯一值 |
| ordered | bool, default True | 返回值out是否被排序 New in version 1.1.0. |
| 返回值 | 取值 | 说明 |
|---|---|---|
| out | Categorical or Series or array of integers if labels is False | 如果x是series则out是category series,否则out是Categorical |
| bins | ndarray of floats | 分位数数组,只有retbins 为True才返回 |
在机器学习中,pandas的qcut和cut常用于连续变量的离散化。二者区别在于分箱思路:qcut关注箱子容量,如等频分箱;cut关注箱子尺寸,如等距分箱。qcut支持指定分位数,cut可自定义边界。两者参数及返回值各有特点,如qcut的分位数参数q,cut的等距分箱设定。

787

被折叠的 条评论
为什么被折叠?



