特征工程
Time: 2017-3-6
REF
主要参考:
特征工程定义
“数据和特征决定了机器学习的上限,而模型而算法只是逼近这个上限”。所以特征工程的目的是从原始数据中提取特征的过程。
特征工程归纳为以下几个方面:- 特征使用方案
- 特征获取方案
- 特征处理
- 特征监控
下面我们主要从这四个方面来学习特征处理。
特征使用方案
- 要实现我们的目标,需要哪些数据?
要尽可能的找出对目标(因变量)有影响的特征列(自变量)
- 可用性评估
获取难度
覆盖率 准确率
有一些特征虽然很好,但是有时候我们获取得到的难度非常大(尤其是用户信息等),同时也需要考虑特征是不是所有记录都有或者是大部分都有。
特征获取方案
- 如何获取这些特征?
- 如何存储?
当我们确定了特征之后,那么我们如何去获取这些特征,通过这样处理,才能获取这些特征?获取特征后,我们又需要如何存储特征。
特征处理
好吧,这个是重头戏。特征处理可以分两步特征清洗以及预处理。
- 特征清洗 有些我们需要考察的是样本中的异常数据,得到符合要求的正常数据,然后实现对数据分布的调整,有些数据分布不均衡,需要处理成比较均衡的数据分布。
- 预处理 预处理,就是当数据确定后,我们就要一些不符合格式的以及字符化的特征转为数值类型。所以预处理也有多种情况,主要归纳为以下三点:
a. 单个特征的处理
(1)归一化
当数据分布相差太大,这样的数据就会存在问题,例如:这样子特征1就只能起到很小的作用。这个使用就需要将特征归一化到一个数量级上。(2)离散化
尤其在logistic regression上,需要把一些连续特征进行离散化处理。离散化除了一些计算方面等等好处,还可以引入非线性特性,也可以很方便的做cross-feature. 连续性变量转化成离散型变量大致有两类方法:卡方检验方法:
分裂方法,就是找到一个分裂点看,左右2个区间,在目标值上分布是否有显著差异,有显著差异就分裂,否则就忽略。这个点可以每次找差异最大的点。合并类似,先划分如果很小单元区间,按顺序合并在目标值上分布不显著的相邻区间,直到收敛。 信息增益方法: 这个和决策树的学习很类似。分裂方法,就是找到一个分裂点看,左右2个区间,看分裂前后信息增益变化阈值,如果差值超过阈值(正值,分列前-分裂后信息熵),则分裂。每次找差值最大的点做分裂点,直到收敛。合并 类似,先划分如果很小单元区间,按顺序合并信息增益小于阈值的相邻区间,直到收敛。
(3)dummy coding(虚拟编码):
虚拟编码为不同的估计模型提供了一种使用分类变量的方法,比如线性回归模型。当自变量中存在无序多分类的变量,比如血型,分为A、B、O、AB,因为它们之间不存在等级关系,所以在引入回归时,不能直接用1、2、3、4来表示,需要将血型转化为哑变量,并且要设置一个参照。虚拟编码使用0或1来表达所有类别的必要信息,这些取值并不代表数量的大小,仅仅表示不同的类别。(4) 缺失值处理
有些样本的属性的值可能存在空缺,所以我们需要对存在空缺值的列进行处理,当空缺值比较多的时候,我们可以考虑丢弃这一属性值,我们可以考虑使用一个新的值来替代空缺,或者是使用均值来代替。当然,如果特征比较重要,同时缺失值比较少,我们可以使用随机森林来预测缺失的特征,从而补上。(5) 数据变换
常用的数据变换方式:log exp box-coxb. 多个特征的处理
特征太多,有时候也不一定是好事。很多时候我们考虑的是提取主要特征,这种方式就涉及到降维的方式或者是得到主题词方式。例如使用PCA降维或者是LDA得到主题。当然,还有其他的方式,那就是特征选择,大概有三种方式:
Filter: 过滤的方式,主要是通过查看自变量和目标变量之间的关联,然后计算相关系数、卡方检验或者是信息增益、互信息等来过滤掉不重要的特征或者是相关性不显著的特征列。
Wrapper 具体的思路是通过目标函数(AUC|MSE)来决定是否加入一个特征量。然后可以通过迭代的方式,产生特征子集,评价。(可以使用完全搜索、启发式搜索、随机搜索等方式)
==Embedded(嵌入)==方式,让学习器自动选择特征方式,可以通过正则化(L1、L2等方式),或者是通过类似决策树的方式计算信息熵、信息增益。以及很火的**深度学习**的方式来实现。
c. 衍生变量
对原始数据惊醒加工,生成具有商业意义的变量。原始变量--就是初始变量。
衍生变量--就是因原始变量的变化而变化的变量。特征监控
主要有两部分,一部分是特征的有效性分析——可以通过权重来判断特征的重要性。
另外一部分是监控重要的特征,防止特征质量下降,影响模型效果。主要是参考这个图片来叙说。