多取值离散型特征工程_从数据到特征: 特征工程(一)

特征工程是提升模型性能的关键,涉及特征抽象、缩放、衍生和选择等步骤。多取值离散型特征处理包括有序特征的数值映射和无序特征的独热编码。特征衍生则通过业务和技术创新产生新特征,如业务衍生的逻辑关联和技术衍生的数学运算、二值化等。特征离散化方法包括有监督、无监督和聚类分箱,离散化后的特征可进行woe编码和IV值计算。特征交叉组合和多项式融合用于捕获非线性关系,而算法衍生如GBDT可生成新的非线性特征。
摘要由CSDN通过智能技术生成

e7902c7d680f7db778b23fb23d2cfe00.png

数据科学领域从业者普遍认为:数据和特征决定了机器学习效果的上限,而模型和算法只是逼近这个上限。而特征工程就是逼近这个上限的极速器。特征工程处理后的特征越好,模型的可选择性和灵活性越强,同时也降低了模型的复杂度,提升模型的效果,执行的效率及模型的可解释性。特征工程的最终目的就是提升模型的性能。

特征工程


特征工程是将原始数据进行转换、加工成模型算法所能直接使用的特征数据,更好提取数据所蕴含的规律信息,还可以对特征进行降维和非线性化,使模型泛化能力增强,减少过拟合问题。

与其说它是一个工程,不如说是一门艺术。特征工程一般开始于数据清洗后,结束于模型训练前,这阶段是对原始数据的"精雕细琢"达到算法模型所要求的样子,让数据可以更好地与算法结合,生成较好的结果。特征工程是能够将数据像艺术一样展现的技术。因为好的特征工程混合了专业领域知识、直觉和基本的数学能力。其实是将数据属性转换为数据特征的过程,对数据特征进行学习,减少模型所受噪声的影响,较准确地找到数据的潜在趋势,能够实现使用简单的模型也能达到很好效果的目标。

该部分是建模前的关键步骤,也是耗时最长的部分,模型的效果好坏绝对大部分取决于数据加工(特征工程)的情况。尤其是回归式分类模型,比如逻辑回归。特征工程的工作有特征抽象、特征缩放、特征衍生、特征选择等。特征抽象(把数据转成算法可以理解的数据(数值),比如有序特征的数值映射和无序特征的独热编码)、特征缩放(把数据限制到一定的取值范围,消除不同数据量级的干扰,比如归一化和标准化)、特征衍生(数据组合构造)、特征选择其核心特征衍生,它是将处理后的格式化数据,从业务构造和技术加工的角度构造新的对目标特征更有影响的数据特征,主要方法有:业务衍生、特征交叉组合、多项式化、树模型构造等等。特征选择主要是通过统计学的方法,筛选出对预测变量影响最显著的指标。主要有单变量特征选择方法和基于机器学习模型的方法。

cc52c138cec987224e9f243943df4f91.png

特征抽象


这一步是针对有序和无序的文本分类型特征,采用不同的方法进行处理,将其类别属性数值化。

多值有序特征的属性数值映射,这步也包含了降维处理(对于高维类别变量),把类别抽象成模型可以识别的特征值。有序特征的映射,使用的方法是先构建一个映射字典mapping,再用pandas的map()或者replace()函数进行映射转换。

#构建学历字典mapping_dict={'博士':4,'硕士':3,'大学':2,'大专及以下':1}
#调用map方法进行转换data['edu_level_map']=data['edu_level'].map(mapping_dict)

多值无序特征的属性独热编码,使用pandas的get_dummies()方法创建虚拟特征,虚拟特征的每一列各代表变量属性的一个分类。比如,婚姻状态。

#调用get_dummies方法进行转换dummies=pandas.get_dummies(data,columns=['婚姻状态'],prefix=['婚姻状态'],prefix_sep='_',dummy_na=False,drop_first=False)

特征衍生


特征衍生是指利用现有的特征进行某种组合生成新的特征,主要是从业务数据和纯技术生产特征方面着手。

1、业务衍生:从特征的业务意义出发,生成具有不同层面业务含义的新特征。方法:逻辑关联、增量、频率分析、相对强度水平等。

这一衍生手段,主要是原始数据方面利用业务思维和统计方法进行衍生,提取一些次级特征。比如逻辑关联主要是从业务逻辑思路里提取新的可用特征;从变化幅度大的特征提取出其增量特征;从覆盖面较大且类别较多的分类特征取出其频率特征;从特征值分布有差异的数值型特征中提取其相对整体平均值的强度水平或相对某一群体平均值的强度水平等等。

2、技术衍生:在特征计算层次上对特征进行大范围加工衍生,比如相关特征的加减乘除方、二值化、离散化、交叉组合、多项式融合、算法衍生等。

技术衍生手段,主要是从特征之间关系和特点出发,选择相应衍生方法生产具有高预测性区分性的特征,这一过程也会产生大量无效或者低效的特征,这些特征在衍生阶段不做处理,会在后续的特征选择中被自动筛选。当然,不同类型和分布特点的特征技术衍生方向也不一样,根据其特点选择合适的方法进行衍生,才会更大概率得到有效特征。

(1)数学运算(加减乘除方)衍生新特征,前提是这些数值特征具有一定的运算意义;数值特征还可以根据分布特点进行二值化和离散化处理。

(2)二值化将细粒度的特征度量转化成粗粒度的度量,使得特征的差异化更大,是与某个阈值比较,把特征的取值转化为0或1,核心在于设定一个阈值。类似分类特征的独热编码处理。二值化的手段更适用于在某些值或某取值段分布差异大的(偏正态分布)或者缺失严重的情况,这一通过二值化,可以把数值特征的类别属性提取出来,也增强了特征的稳定性。比如取值为有理数的连续值特征(距离特征),有固定几个取值的枚举值特征(时间特征)。

枚举特征处理为二值特征技巧:

将枚举特征映射为多个特征,每个特征对应一个特定枚举值,例如今天周几,可以把它转换成7个二元特征:今天是否是周一,今天是否是周二,...,今天是否是周日。

连续特征处理为二值特征方法:

先将连续值离散化(或选取几个阈值节点),再将离散化后的特征切分为多个二元特征,每个特征代表是否在这个区间内。

(3)特征离散化,是对连续取值的特征进行转换衍生的方法,比如年龄等这样特征的取值相加相减是没有实际意义的的数值特征,连续特征离散化的基本假设是连续特征不同区间的取值对结果的贡献是不一样的。特征离散化就可以提取这些特征的非线性影响并减弱个别数值(或异常值)的作用强度。

离散化手段(特征分箱)主要有:

有监督分箱:

卡方分箱法(ChiMerge),自底向上的(即基于合并的)数据离散化方法。它依赖于卡方检验:具有最小卡方值的相邻区间合并在一起,直到满足确定的停止准则。

最小熵法分箱,是类ID3决策树的方法。首先对某个特征所有值进行排序,通过遍历该特征所有的值(离散值,连续值需要处理成离散值)。计算信息增益,选择信息增益大的值作为一个分断点,然后这个断点将数据分成两部分,然后分别对分割的两部分依次进行上面的操作,直到达到停止条件。停止准则是当得到的每个区间中的类标签都是一样。

无监督分箱:

等距分箱,每个区间的特征取值长度相同。

等频分箱,每个区间包含大致相等的实例数量。

聚类分箱,基于k均值聚类的分箱,在聚类过程中需要保证分箱的有序性:第一个分箱中所有观测值都要小于第二个分箱中的观测值,第二个分箱中所有观测值都要小于第三个分箱中的观测值等等。

特征离散化后处理:

特征离散化后,连续型变区间型特征可与分类型等特征进行交叉组合,再衍生新特征。特征进行分箱后,根据需要对分箱后的每组(箱)进行woe编码和IV值的计算,把每个特征组转换成woe分数。也可以利用IV值对特征离散化进行调整和特征选择等。

特征交叉组合,指通过将两个或多个输入特征相乘(或求笛卡尔积)来对特征空间中的非线性规律进行编码的合成特征。比如属性A有三个特征,属性B有两个特征,笛卡尔积后就有六个组合特征,然后用one hot或其他embedding方式给新的特征编码。

交叉组合主要用于离散化特征和分类型特征之间的衍生中,比如地区、年龄、性别这三个交叉组合后,可以得到不同地区的不同年龄(段)男女的交叉数据分布,更好地提升(细化)了年龄和性别的区分性(分布差异性)。在线性模型分类效果不好的情况下,可以通过特征组合的方式增加特征的维度,以求得更好的训练效果。特征交叉组合是一种让线性模型学习到非线性特征的方式,对大规模数据集使用特征组合是学习高度复杂模型的一种有效策略。但这种暴力做交叉很可能导致特征稀疏的问题,这里可以参考FM、FMM以及阿里妈妈发布的MLR做法。

(4)特征多项式融合,是可以获得特征的更高维度和互相间关系的项,多项式融合法不仅可以得到特征的交叉组合项还可以得到特征的高次项。在python中通过 PolynomialFeatures函数实现特征多项式生成和修整。比如X的特征经过多项式融合已经从11228b5bfa03b880d3f07838ea4d7100.png 转换为 aa0334e3abfe62afe1646357b2b436b2.png 。在一些情况下只需要特征间交互项,可以设置 interaction_only得到,

##生成阶数为3阶的交叉项
>>>poly = PolynomialFeatures(degree=3, interaction_only=True)
>>>poly.fit_transform(X)

(5)算法衍生新特征,是指利用深度学习方法生成的一些非线性新特征,常被用于模型融合场景中,比如使用GBDT来发掘有区分度的特征以及组合特征,然后直接用于逻辑回归模型中,常见的融合模型有"GBDT+LR"、"GBDT+FM"都是应用比较广泛。GBDT构建新特征的主要思想:GBDT每棵树的路径直接作为LR输入特征使用。

用已有特征训练GBDT模型,然后利用GBDT模型学习到的树来构造新特征,最后把这些新特征加入原有特征一起训练模型。构造的新特征向量是取值0/1的,向量的每个元素对应于GBDT模型中树的叶子结点。当一个样本点通过某棵树最终落在这棵树的一个叶子结点上,那么在新特征向量中这个叶子结点对应的元素值为1,而这棵树的其他叶子结点对应的元素值为0。新特征向量的长度等于GBDT模型里所有树包含的叶子结点数之和。

55de2798ac37724bf9e74f4b4ebf2b98.png

案例:基于现有特征,利用GBDT学习到两棵树,第一棵树有3个叶子结点,而第二棵树有2个叶子节点。对于一个输入样本x,如果它在第一棵树最后落在其中的第二个叶子结点,而在第二棵树里最后落在其中的第一个叶子结点。那么通过GBDT获得的新特征向量为[0,1,0,1,0],其中向量中的前三位对应第一棵树的3个叶子结点,后两位对应第二棵树的2个叶子结点。这类编码作为新特征输入到线性分类模型(LR/FM)中进行分类。

每棵树中的叶子节点代表了样本具有某种属性组合,这种属性组合由于很有意义所以才会存在决策树中(不然就会被剪支掉)。比如广告点击中广告属性(国家、节日)这种特征,(中国-春节)和(美国-感恩节)是有意义的特征组合。我们将所有有意义的特征组合提取出来作为一个新的特征,这就是GBDT构建新特征的目的。

未完待续。。。。。。

这是狗年最后一篇文章啦,感谢大家一直关注和支持,咱们猪年再续。

如果觉得好看,请点击右下角“好看”。

祝大家新的一年,事业进步,财源广进,诸事顺心。

2c2bd2ba379df165572619b5c20784a7.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值