3 特征工程

前言:

目前,学习了基础的机器学习用法,处于会调用、初级调参阶段。

最近在天池上打比赛,发现想要提升成绩很困难,不知从何下手。

因此,打算从两方面出发:①做好特征(学习数据挖掘的知识)。②继续学习模型内部的原理。

特征工程

1.特征工程简介

Feature engineering is the process of using domain knowledge of the data to create features that make machine learning algorithms work. Feature engineering is fundamental to the application of machine learning, and is both difficult and expensive. The need for manual feature engineering can be obviated by automated feature learning. —From Wikipedia

个人理解:特征工程是一个从数据向信息转化的过程。现在大数据的概念很火,但是大数据是带有大量冗余、残缺的数据,如果想从大量数据中获得有用的信息,便于后续分析处理,这就需要特征工程来处理(数据挖掘主要做的也是这种事情)。

2.特征工程的过程

2.1 数据预处理

2.1.1 缺失值的处理

缺失值从取舍方向讲分为保留和丢弃两种。对于某些特征,缺失较多(是按比例,还是按数量需要按实际例子来划分),可以选择直接丢弃。如果选择保留特征,则可以从以下几点来考虑:

①针对 numerical 的缺失值的处理方式:

  • 用 0 或者其他某个固定值进行填充。
  • 用 mean, median 进行填充。
  • 根据邻近的值进行填充。
  • 或者构造其他的函数来进行填充。

②针对 categorical 的缺失值的处理方式:

  • 用众数进行填充。
  • 改成”others”之类的值。
  • 用one-hat进行编码
2.1.2 信息冗余

对于一些冗余的信息,应该选择丢弃。例如,两个样本中,所有特征值都一样,但是结果却不同,对于这样的样本,应该观察数据,合理丢弃其中一个。

2.1.3 异常值的处理

①如何发现异常值:

  • 单变量:可以通过图表进行观察。
  • 多变量:这个比较麻烦,是一个特征一个特征的观察,还是在多维中观察(多维中如何观察?)?

②如何处理异常值:

  • 删除异常值
  • Transforming and binning values:Transforming variables 可以通过取对数等来消除异常值,binning variables 例如决策树算法来解决(不太理解)。
  • 像对待缺失值一样来处理异常值
  • 分别处理:如果样本包含有大量的异常值,可以将样本分为两个不同的组,并为两个组分别构建单独的模型,再将输出组合在一起。
2.1.4 特征缩放
  • 标准化: 需要计算均值和标准差,标准化的前提是特征值服从正态分布,标准化后,其转换成标准正态分布。
  • 区间缩放法:将特征的取值区间缩放到某个特定的范围。

两者之间的区别,参考:归一化与标准化

  • 在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候,第二种方法(Z-score standardization)表现更好。
  • 在不涉及距离度量、协方差计算、数据不符合正太分布的时候,可以使用第一种方法或其他归一化方法。比如图像处理中,将RGB图像转换为灰度图像后将其值限定在[0 255]的范围。
2.1.5 在sklearn中常用的函数

类 |功能 |说明
StandardScaler |无量纲化 |标准化,基于特征矩阵的列,将特征值转换至服从标准正态分布
MinMaxScaler |无量纲化 |区间缩放,基于最大最小值,将特征值转换到[0, 1]区间上
Normalizer |归一化 |基于特征矩阵的行,将样本向量转换为“单位向量”
Binarizer |二值化 |基于给定阈值,将定量特征按阈值划分
OneHotEncoder |哑编码 |将定性数据编码为定量数据
Imputer |缺失值计算 |计算缺失值,缺失值可填充为均值等
PolynomialFeatures |多项式数据转换 |多项式数据转换
FunctionTransformer |自定义单元数据转换 |使用单变元的函数来转换数据

2.2 特征构建

特征通常来源两部分:

第一部分,从原始的数据中进行选择,可以参看下文的特征选取部分。

第二部分,从原始数据中,通过特征之间的组合,来构建新的特征,通常可以使用:

  • 常规的方法:通过数学函数(平方、对数等)进行转换。
  • 两个变量之间的组合:加减乘除等方式。

具体的方法,参见:特征工程(Feature Engineering)

2.3 特征选择

从两个方面来选择特征:

  • 特征是否发散:如果特征的方差接近0,则此特征对样本的区分作用较小。
  • 特征与目标的相关性:如Pearson相关系数,Gini-index(基尼指数),IG(信息增益)等。

常用的方法分为3类:

  • Filter:过滤法,按照发散性或者相关性对各个特征进行评分,设定阈值或者待选择阈值的个数,选择特征。
  • Wrapper:包装法,根据目标函数(通常是预测效果评分),每次选择若干特征,或者排除若干特征。
  • Embedded:嵌入法,先使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,根据系数从大到小选择特征。类似于Filter方法,但是是通过训练来确定特征的优劣。

使用sklearn做单机特征工程总结的比较好,这里不再重复。

2.4 特征提取

特征提取,通常指的就是降维处理。常用的降维方式有:

  • Principal Component Analysis (PCA)
  • Latent Dirichlet Allocation (LDA)
  • Latent Semantic Analysis (LSA)

2.5 总结

特征工程的整个过程应该是迭代进行的,“数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已”。特征工程是一个超集,它包括特征提取、特征构建和特征选择这三个子模块。在实践当中,每一个子模块都非常重要,忽略不得。根据答主的经验,他将这三个子模块的重要性进行了一个排名,即:特征构建>特征提取>特征选择。–来自下文的引用。

同时,觉得下面的Kaggle 经验小结比较不错。

参考:

[1]使用sklearn做单机特征工程

[2]机器学习之特征工程

[3]使用sklearn优雅地进行数据挖掘

[4]Feature Engineering 特徵工程中常見的方法

[5]The Comprehensive Guide for Feature Engineering

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值