数据挖掘之特征工程(笔记)
2018-02-28 11:02
176 查看
特征工程
在介绍特征工程之前,我们先看两张图。图一是基本的数据挖掘场景
图二是特征工程的常见方法和步骤
特征工程(Feature Engineering)是数据挖掘模型开发中最耗时、最重要的一步。这里简单介绍笔者在模型开发中所总结的一些方法。
特征也就是我们常常说的变量/自变量,一般分为三类:
连续型
无序类别(离散)型
有序类别(离散)型
特征工程(Feature Engineering)包括:特征处理(Feature Processing)、特征选择(Feature Selection)。
特征处理(Feature Processing)
连续型特征
不处理
除了归一化(去中心,方差归一),不用做太多特殊处理,可以直接把连续特征扔到模型里使用。根据模型类型而定。离散化
对于一些特殊的模型(信用评分卡)开发,有时候我们需要对连续型的特征(年龄、收入)进行离散化。离散化方法的关键是怎么确定分段中的离散点,下面介绍几种常用的离散化方法:
等距离离散(等距分组)
顾名思义,就是离散点选取等距点。
等样本点离散(等深分组)
选取的离散点保证落在每段里的样本点数量大致相同
决策树离散化(最优分组)
决策树离散化方法通常也是每次离散化一个连续特征,原理如下:
单独用此特征和目标值y训练一个决策树模型,然后把训练获得的模型内的特征分割点作为离散化的离散点。
其他离散化方法
其中,最优分组除决策树方法以外,还可以使用卡方分箱的方法,这种方法在评分卡开发中比较常见。
函数转换
有时我们的模型的假设条件是要求自变量或因变量服从某特殊分布(如正太分布),或者说自变量或因变量服从该分布时,模型的表现较好。这个时候我们就需要对特征或因变量进行非线性函数转换。这个方法操作起来很简单,但记得对新加入的特征做归一化。对于特征的转换,需要将转换之后的特征和原特征一起加入训练模型进行训练。无序类别(离散)型
数值化
one-hot编码 一个变量k个值就转换成k个虚拟变量,优点:简单,且保证无共线性,缺点:太稀(稀疏矩阵)。避免产生稀疏矩阵的常见方法是降维,将变量值较多的分类维度,尽可能降到最少,能降则降,不能降的,别勉强。
也不是所有的无序变量都需要做数值化处理,决策树、随机森林等树模型可能不需要处理,视情况而定。
有序类别(离散)型
数值化
label encoder 一个变量的k个值,按序转换成k个数字(1,2,3…k)。例如一个人的状态status有三种取值:
bad,
normal,
good,显然
bad<
normal<
good。这个时候
bad,
normal,
good就可以分别转换成
1、
2、
3。
该方法局限性较大:
不适用于建立预测具体数值的模型,比如线性回归,只能用于分类,
即使用于分类,也有一些模型不适合,
可能结果的精度不如one-hot编码。
生成哑变量
与one-hot编码一样,都是将一个变量的k个值生成k个哑变量,但注意不能丢了变量值之间的顺序关系。一般的表达方式如下:
status取值 | 向量表示 |
---|---|
bad | (1, 0, 0) |
normal | (1, 1, 0) |
good | (1, 1, 1) |
特征选择(Feature Selection)
特征选择的目的
特征选择一般有两个目的:剔除对因变量影响较小或无任何相关性的自变量,使得模型预测或分类效果达到理想值。
提高模型的可解释性
按特征类型分
这里只介绍Filter方法连续型: pearson相关系数
有序型: 转换成数值后使用spearman相关系数,或使用无序型的方法。
无序型: 单因素方差分析(回归),卡方检验、IV值(二分类)
上述方法为经验所得,并不全面,之后若遇到其他方法,会将其补充。也欢迎读者留言补充。
模型评估(Model Evaluation)
模型评估一般有两个目的:1. 检验特征工程的工作,查看所选择的特征是否有利于提升模型的性能。
2. 检查参数调整的工作,通过调整模型参数,找到最佳参数使得模型的分类、预测性能最佳。
回归预测问题
对于连续型目标变量的回归预测问题,评估模型的方法一般有:R^2值 R^2越大,模型的预测效果越好。
(后续补充)
分类预测问题
对于离散型目标变量的分类预测问题,评估模型的方法一般有:交叉检验 观察模型的预测准确率,越大越好。但注意使用决策树或随机森林时的过拟合问题。
AUC、ROC 观察模型的ROC曲线及AUC值,越大越好
(后续补充)
结束语
特征工程是一件极其繁琐同时也极其重要的一件事情。特征工程做的好,不仅后期的模型调参容易得多甚至不需要调参,而且模型的稳定性,可解释性也要更好。还记得文章开始的第一张图吗?如果特征工程做得不好,模型评估怎么调参都调不到理想的效果,那么你可能需要在虚线框内做循环的动作,知道你的模型达到理想的效果为止。可见特征工程非常的耗时、耗力,网上说特征工程所花的时间是模型开发所用时间的80%。在我看来,至少是占了95%。所以,特征工程需要以提升模型的性能和可解释性为目标,有耐心地、逻辑清晰地去做。
相关文章推荐
- 数据挖掘实践与我的想法之特征工程
- 数据挖掘笔记-特征选择-期望交叉熵
- 数据挖掘笔记-特征选择-算法实现-1
- 数据挖掘笔记-特征选择-互信息
- [数据挖掘]利用Titanic学习特征工程
- [置顶] 数据挖掘实战之天池精准医疗大赛(6)——特征工程2
- 数据挖掘里面的特征工程
- 数据挖掘笔记-特征选择-整体汇总
- 数据挖掘笔记-特征选择-开方检验
- [置顶] 数据挖掘实战之天池精准医疗大赛(5)——特征工程1
- 【数据挖掘】【笔记】数据预处理之类别特征编码
- 数据挖掘笔记-特征选择-算法实现-1
- kaggle数据挖掘竞赛初步--Titanic<数据变换> 完整代码: https://github.com/cindycindyhi/kaggle-Titanic 特征工程系列: Titanic
- 数据挖掘笔记-特征选择-信息增益
- 数据挖掘-特征工程(特征挖掘)
- Python数据挖掘与机器学习_通信信用风险评估实战(3)——特征工程
- 数据挖掘sklearn中的的特征工程处理
- 数据挖掘笔记-特征选择-遗传算法
- 【学堂在线数据挖掘:理论方法笔记】第五天(3.29)
- SAP BW R3应用_特征数据的加载——视频学习笔记07