博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
特征工程
阅读量:4985 次
发布时间:2019-06-12

本文共 2012 字,大约阅读时间需要 6 分钟。

特征工程

Time: 2017-3-6


REF


主要参考:

特征工程定义


“数据和特征决定了机器学习的上限,而模型而算法只是逼近这个上限”。所以特征工程的目的是从原始数据中提取特征的过程。

特征工程归纳为以下几个方面:

  1. 特征使用方案
  2. 特征获取方案
  3. 特征处理
  4. 特征监控

下面我们主要从这四个方面来学习特征处理。

特征使用方案

  1. 要实现我们的目标,需要哪些数据?

要尽可能的找出对目标(因变量)有影响的特征列(自变量)

  1. 可用性评估

获取难度

覆盖率
准确率

有一些特征虽然很好,但是有时候我们获取得到的难度非常大(尤其是用户信息等),同时也需要考虑特征是不是所有记录都有或者是大部分都有。

特征获取方案

  1. 如何获取这些特征?
  2. 如何存储?

当我们确定了特征之后,那么我们如何去获取这些特征,通过这样处理,才能获取这些特征?获取特征后,我们又需要如何存储特征。

特征处理

好吧,这个是重头戏。特征处理可以分两步特征清洗以及预处理

  1. 特征清洗
    有些我们需要考察的是样本中的异常数据,得到符合要求的正常数据,然后实现对数据分布的调整,有些数据分布不均衡,需要处理成比较均衡的数据分布。
  2. 预处理
    预处理,就是当数据确定后,我们就要一些不符合格式的以及字符化的特征转为数值类型。所以预处理也有多种情况,主要归纳为以下三点:

a. 单个特征的处理

(1)归一化

当数据分布相差太大,这样的数据就会存在问题,例如:970371-20171019102256584-821606539.png这样子特征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-cox

b. 多个特征的处理

特征太多,有时候也不一定是好事。很多时候我们考虑的是提取主要特征,这种方式就涉及到降维的方式或者是得到主题词方式。例如使用PCA降维或者是LDA得到主题。

当然,还有其他的方式,那就是特征选择,大概有三种方式:

Filter: 过滤的方式,主要是通过查看自变量和目标变量之间的关联,然后计算相关系数、卡方检验或者是信息增益、互信息等来过滤掉不重要的特征或者是相关性不显著的特征列。

Wrapper 具体的思路是通过目标函数(AUC|MSE)来决定是否加入一个特征量。然后可以通过迭代的方式,产生特征子集,评价。(可以使用完全搜索、启发式搜索、随机搜索等方式)

==Embedded(嵌入)==方式,让学习器自动选择特征方式,可以通过正则化(L1、L2等方式),或者是通过类似决策树的方式计算信息熵、信息增益。以及很火的**深度学习**的方式来实现。

c. 衍生变量

对原始数据惊醒加工,生成具有商业意义的变量。

原始变量--就是初始变量。

衍生变量--就是因原始变量的变化而变化的变量。

特征监控

主要有两部分,一部分是特征的有效性分析——可以通过权重来判断特征的重要性。

另外一部分是监控重要的特征,防止特征质量下降,影响模型效果。

主要是参考这个图片来叙说。

思维导图
思维导图

转载于:https://www.cnblogs.com/flyu6/p/7691052.html

你可能感兴趣的文章
sqlserver常用语句集锦
查看>>
黑马程序员-------oc中的结构体
查看>>
servlet什么时候被实例化?
查看>>
工作中使用==埋下的坑
查看>>
ruby中require load include的区别
查看>>
字面量
查看>>
密码安全性检查
查看>>
Memcache与Redis的区别都有哪些?
查看>>
03008_ServletContext
查看>>
【转】黑盒设计测试用例方法
查看>>
33、計算
查看>>
How to deal with the Diehards ?
查看>>
Vue 路由知识二(工程模式下路由的配置)
查看>>
shell脚本交互:expect学习笔记及实例详解
查看>>
Android中的MVP架构
查看>>
《Pro SQL Server Internals》之Data Pages Data Rows
查看>>
NMON中的各项参数指标
查看>>
HDU - 1715 - 大菲波数 - JAVA
查看>>
脚本学习 1
查看>>
[ABP] ASP.NET Zero 5.6.0 之 破解日志
查看>>