- 下列情况下常用到分箱
a、某些数值自变量在测量时存在随机误差,需要对数值进行平滑以消除噪音
b、有些数值自变量有大量不重复的取值,对于使用 <、>、=等基本操作符的算法(如决策树)而言,如果能减少这些不重复取值的个数,就能提高算法的速度
c、有些算法只能使用分类自变量,需要把数值变量离散化
数据内被归纳入几个分箱后,可以用每个分箱内数值的均值、中位数或边界值替代分箱内各观测的数值,也可以把每个分箱作为离散化后的一个类别。
例如,
某个自变量的观测值为1,2.1,2.5,3.4,4,5.6,7,7.4,8.2.
假设将它们分为三个分箱,(1,2.1,2.5),(3.4,4,5.6),(7,7.4,8.2),
那么使用分箱均值替代后所得值为(1.87,1.87,1.87),(4.33,4.33,4.33),(7.53,7.53,7.53),
使用分箱中位数替代后所得值为(2.1,2.1,2.1),(4,4,4),(7.4,7.4,7.4),
使用边界值替代后所得值为(1,2.5,2.5),(3.4,3.4,5.6),(7,7,8.2)(每个观测值由其所属分箱的两个边界值中较近的值替代)
分箱法分为等深分箱(样本量一致,比等宽好)、等宽分箱(cut函数直接可以获取)
- cut函数
可以很方便的将一个连续型变量切割成很小的片段。下面是cut函数的默认形式,用于处理数值向量。该方式实现等宽分箱
#数值形式
cut(x,breaks,labels= NULL,
include.lowers = F, right = TURE,dig.lab = 3,
ordered_result = F,...)
x:数值向量(用于转换成一个因子)
breaks:指定分割点数量的整数,或者指定分割点位置的向量
labels:输出因子的水平的标签,默认问:null
include.lowest:逻辑值、当right = T时,表明区间左边的临界点是否应该被包含在区间内;当 right=F时,区间右边的临界点是否应该被包含在区间内,默认为F
rigth:逻辑值,表明区间是否应该是左开右闭的(当right=F,区间左闭右开),默认是T
dig.lab:当产生一个标签时,标签的有效位数(当标签未被显式指定时),默认是3
ordered_results:一个逻辑值,表明返回值是否应该被转换成有序因子,默认是FINS
cut函数还可以用来操纵R中的Date对象:
#日期形式
cut(x,breaks,labels=NULL,start.on.monday=T,right=F,...)
cut函数的输入是一个数值向量, 输出是一个因子。因子的每个水平对应输入向量的每个区间范围