首页 > 其他 > 详细

特征工程-数据分箱

时间:2019-12-06 15:45:18      阅读:124      评论:0      收藏:0      [点我收藏+]

建模数据的预处理的过程中,变量分箱(即变量离散化)往往是较为核心一环。变量分箱的优劣往往会影响模型评分效果.

一,数据分箱的重要性

 1.对异常数据有比较好的鲁棒性.

 2.在逻辑回归模型中,单个变量分箱之后每个箱有自己独立的权重,相当于给模型加入了非线性的能力,能够提升模型的表达能力,极大拟合.

 3.缺失值也可以作为一类特殊的变量进行模型.

 4.分箱之后相对于简单的one_hot编码而言能够降低模型的复杂度,提升模型运算速度,对后期生产上线较为友好.

二、三类变量分箱方法的及注意要点

  2.1 无序变量的分箱问题

  举个例子,在实际模型建立当中,有个 job 职业的特征,取值为(“国家机关人员”,“专业技术人员”,“商业服务人员”),对于这一类变量,如果我们将其依次赋值为(国家机关人员=1;专业技术人员=2;商业服务人员=3),就很容易产生一个问题,不同种类的职业在数据层面上就有了大小顺序之分,国家机关人员和商业服务人员的差距是2,专业技术人员和商业服务人员的之间的差距是1,而我们原来的中文分类中是不存在这种先后顺序关系的。所以这么简单的赋值是会使变量失去原来的衡量效果。

  怎么处理这个问题呢,“一位有效编码” (one-hot Encoding)可以解决这个问题,通常叫做虚变量或者哑变量(dummpy variable):比如职业特征有3个不同变量,那么将其生成个2哑变量,分别是“是否国家党政职业人员”,“是否专业技术人员” ,每个虚变量取值(1,0)。  

  2.2 有序变量的分箱问题

  有序多分类变量是很常见的变量形式,通常在变量中有多个可能会出现的取值,各取值之间还存在等级关系。比如高血压分级(0=正常,1=正常高值,2=1级高血压,3=2级高血压,4=3级高血压)这类变量处理起来简直不要太省心,使用 pandas 中的 map()替换相应变量就行。

  

import pandas as pd
df= pd.DataFrame([正常,3级高血压,正常,2级高血压,正常,正常高值,1级高血压],columns=[blood_pressure])
dic_blood = {正常:0,正常高值:1,1级高血压:2,2级高血压:3,3级高血压:4}
df[blood_pressure_enc] = df[blood_pressure].map(dic_blood)
print(df)

  3.3连续变量的分箱方式  

  连续变量的分箱可以划分2种:无监督分组,有监督分组

  3.3.1无监督分组

  等宽划分:按照相同宽度将数据分成几等份。缺点是受到异常值的影响比较大。 pandas.cut方法可以进行等宽划分。

  等频划分:将数据分成几等份,每等份数据里面的个数是一样的。pandas.qcut方法可以进行等频划分。

import pandas as pd

df = pd.DataFrame([[22,1],[13,1],[33,1],[52,0],[16,0],[42,1],[53,1],[39,1],[26,0],[66,0]],columns=[age,Y])
#print(df)
df[age_bin_1] = pd.qcut(df[age],3) #新增一列存储等频划分的分箱特征
df[age_bin_2] = pd.cut(df[age],3)  #新增一列存储等距划分的分箱特征
print(df)

技术分享图片

 

 

  3.3.2有监督学习方法:

  卡方分箱(em...这个我看是风空模型里面的,具体的可能后续要补一补)

特征工程-数据分箱

原文:https://www.cnblogs.com/z1141000271/p/11995616.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!