1. 特征工程之特征预处理

1. 前言

“数据决定了机器学习的上限,而算法只是尽可能逼近这个上限”,这里的数据指的就是经过特征工程得到的数据。特征工程指的是把原始数据转变为模型的训练数据的过程,它的目的就是获取更好的训练数据特征,使得机器学习模型逼近这个上限。特征工程能使得模型的性能得到提升,有时甚至在简单的模型上也能取得不错的效果。特征工程在机器学习中占有非常重要的作用,主要包括数据与特征预处理、特征选择和数据的降维三部分。接下去会通过3篇文章对这三方面进行介绍。今天首先讲讲数据与特征的预处理。

2. 数据与特征预处理

数据与特征预处理也成为特征提取,主要是从会结构化的数据中金链的提取出有用的特征,数据与特征的预处理包括:

  1. 数据选择、清洗、采样

    1. 特征预选择,去掉类似ID的相关度为0的特征。
    2. 数据清洗,填充缺失值、去掉异常值(离群点、脏数据),缺省值极多的字段考虑不用。
    3. 采样:针对正负样本不平衡的情况,可以通过上下采样,和改变权重来处理。
    4. 数据格式化,比如文本处理的时候,去掉文本不相关的,符号和标点,处理大小写,字体编码问题。
    5. 特征的扩充,例如,可以加入天气温度等特征,有时序性的问题,可以shift联系前后几天,增加时序特征,还有特征重新组合,特征的拆分,one-hot编码。
  2. 不同类型数据的特征处理
    1. 数值型:幅度调整/归一化、log等变化、统计值(例如max、min、mean、std)、离散化、分桶等
    2. 类别型:one-hot编码,复杂的多字段合并成精简的少字段等
    3. 时间型:提取出连续值的持续时间和间隔时间;提取出离散值的“年”、“月”、“日”、“一年中哪个星期/季度”、“一周中的星期几”、“工作日/周末”等信息
    4. 文本型:使用TF-IDF特征
    5. 统计型:加减平均、分位线、次序、比例
  • 对数据进行预处理,可提高数据质量,提高挖掘质量。对数据进行清洗可填充缺失值、光滑噪声数据,识别和删除离群点数据,保证数据的一致性;
  • 使用正确的采样方法可解决因数据不平衡带来的预测偏差;
  • 对不同的数据类型进行不同的特征处理有助于提高特征的可用性,例如对数值型数据进行归一化可将数据转化到统一量纲下;对类别型数据,可用one-hot编码方法将类别数据数字化,数字化特征之后可更用来计算距离、相似性等;可从时间型数据当中提取中更多的时间特征,例如年、月和日等,这些特征对于业务场景以及模型的预测往往有很大的帮助。统计型特征处理有助于从业务场景中挖掘更丰富的信息。

3. 处理不平衡数据

之前的处理不平衡数据已经进行了详细的介绍,本文在简单的描述下。

处理不平衡数据一般是两种方法:权重法或者采样法

权重法:是比较简单的方法,我们可以对训练集里的每个类别加一个权重class weight。如果该类别的样本数多,那么它的权重就低,反之则权重就高。如果更细致点,我们还可以对每个样本加权重sample weight,思路和类别权重也是一样,即样本数多的类别样本权重低,反之样本权重高。sklearn中,绝大多数分类算法都有class weight和 sample weight可以使用。

采样法常用的也有两种思路,

  • 第一种是对类别样本数多的样本做子采样, 比如训练集里A类别样本占90%,B类别样本占10%。那么我们可以对A类的样本子采样,直到子采样得到的A类样本数和B类别现有样本一致为止,这样我们就只用子采样得到的A类样本数和B类现有样本一起做训练集拟合模型。
  • 第二种思路是对类别样本数少的样本做过采样, 还是上面的例子,我们对B类别的样本做过采样,直到过采样得到的B类别样本数加上B类别原来样本一起和A类样本数一致,最后再去拟合模型。

4. 异常值清洗

  1. 是基于统计学的方法来处理异常数据,这种方法一般会构建一个概率分布模型,并计算对象符合该模型的概率,把具有低概率的对象视为异常点。Q1=25%,Q3=75%,IQ=Q3-Q
    1,Q1-1.5IQ,Q1-3IQ,Q3+1.5IQ,Q3+3IQ算成离群点
  2. 是基于聚类的方法来做异常点检测。这个很好理解,由于大部分聚类算法是基于数据特征的分布来做的,通常如果我们聚类后发现某些聚类簇的数据样本量比其他簇少很多,而且这个簇里数据的特征均值分布之类的值和其他簇也差异很大,这些簇里的样本点大部分时候都是异常点。比如我之前讲到的BIRCH聚类算法原理和DBSCAN密度聚类算法都可以在聚类的同时做异常点的检测
  3. 是基于专门的异常点检测算法来做。这类算法的代表是One Class SVM和Isolation Forest.

5. 数据预处理

5.1 无量纲化

5.1.1 标准化

标准化需要计算特征的均值标准差

5.1.2 区间缩放法

区间缩放法的思路有多种,常见的一种为利用两个最值进行缩放

5.1.3 标准化与归一化的区别

标准化:是依照特征矩阵的列处理数据,其通过求z-score的方法,将样本的特征值转换到同一量纲下。
归一化:是依照特征矩阵的行处理数据,其目的在于样本向量在点乘运算或其他核函数计算相似性时,拥有统一的标准,也就是说都转化为“单位向量”。

5.2 对定量特征二值化

定量特征二值化的核心在于设定一个阈值,大于阈值的赋值为1,小于等于阈值的赋值为0

5.3 对定性特征哑编码

OneHotEncoder,假设有N种定性值,则将这一个特征扩展为N种特征,当原始特征值为第i种定性值时,第i个扩展特征赋值为1,其他扩展特征赋值为0。哑编码的方式相比直接指定的方式,不用增加调参的工作,对于线性模型来说,使用哑编码后的特征可达到非线性的效果。

5.4 缺失值计算

使用preproccessing库的Imputer类对数据进行缺失值计算

  1. 缺失值比例超过50%直接丢弃
  2. 如果是连续值,那么一般有两种选择,一是选择所有有该特征值的样本,然后取平均值,来填充缺失值,另一种是取中位数来填充缺失值
  3. 如果是离散值,则一般会选择所有有该特征值的样本中最频繁出现的类别值,来填充缺失值。

5.5 数据变换

常见的数据变换有基于多项式的、基于指数函数的、基于对数函数的

6. 特征工程的Roadmap

7. 总结

简单的说,特征工程是能够将数据像艺术一样展现的技术。因为好的特征工程很好的混合了专业领域知识、直觉和基本的数学能力。但是最有效的数据呈现其实并不涉及任何的数据运算。

本质上来说,呈现给算法的数据应该能拥有基本数据的相关结构或属性。当你做特征工程时,其实是将数据属性转换为数据特征的过程,属性代表了数据的所有维度,在数据建模时,如果对原始数据的所有属性进行学习,并不能很好的找到数据的潜在趋势,而通过特征工程对你的数据进行预处理的话,你的算法模型能够减少受到噪声的干扰,这样能够更好的找出趋势。事实上,好的特征甚至能够帮你实现使用简单的模型达到很好的效果。

(欢迎转载,转载请注明出处。欢迎沟通交流: [email protected])

原文地址:https://www.cnblogs.com/huangyc/p/9961058.html

时间: 2024-11-08 03:22:15

1. 特征工程之特征预处理的相关文章

【特征工程】特征工程技术与方法

引言 在之前学习机器学习技术中,很少关注特征工程(Feature Engineering),然而,单纯学习机器学习的算法流程,可能仍然不会使用这些算法,尤其是应用到实际问题的时候,常常不知道怎么提取特征来建模. 特征是机器学习系统的原材料,对最终模型的影响是毋庸置疑的. 特征工程的重要意义 数据特征会直接影响你使用的预测模型和实现的预测结果.准备和选择的特征越好,则实现的结果越好. 影响预测结果好坏的因素:模型的选择.可用的数据.特征的提取. 优质的特征往往描述了数据的固有结构. 大多数模型都可

特征工程之特征预处理

在前面我们分别讨论了特征工程中的特征选择与特征表达,本文我们来讨论特征预处理的相关问题.主要包括特征的归一化和标准化,异常特征样本清洗与样本数据不平衡问题的处理. 1. 特征的标准化和归一化  由于标准化和归一化这两个词经常混用,所以本文不再区别标准化和归一化,而通过具体的标准化和归一化方法来区别具体的预处理操作. z-score标准化:这是最常见的特征预处理方式,基本所有的线性模型在拟合的时候都会做 z-score标准化.具体的方法是求出样本特征x的均值mean和标准差std,然后用(x-me

特征工程之特征表达

? ? ? ? ? 在特征工程之特征选择中,我们讲到了特征选择的一些要点.本篇我们继续讨论特征工程,不过会重点关注于特征表达部分,即如果对某一个特征的具体表现形式做处理.主要包括缺失值处理,特殊的特征处理比如时间和地理位置处理,离散特征的连续化和离散化处理,连续特征的离散化处理几个方面. 一.缺失值处理 ? ? ? ? ? 特征有缺失值是非常常见的,大部分机器学习模型在拟合前需要所有的特征都有值,不能是空或者NULL.那么如果有缺失值我们需要怎么处理呢? ? ?首先我们会看是该特征是连续值还是离

机器学习之(四)特征工程以及特征选择的工程方法

关于特征工程(Feature Engineering),已经是很古老很常见的话题了,坊间常说:"数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已".由此可见,特征工程在机器学习中占有相当重要的地位.在实际应用当中,可以说特征工程是机器学习成功的关键.纵观Kaggle.KDD等国内外大大小小的比赛,每个竞赛的冠军其实并没有用到很高深的算法,大多数都是在特征工程这个环节做出了出色的工作,然后使用一些常见的算法,比如LR,就能得到出色的性能.遗憾的是,在很多的书籍中并没有直接

快速入门特征工程

有一句话在业界广为流传:特征工程决定了模型的上界,调参决定模型能够有多逼近这个上界. 这里以sklearn为例讲讲特征工程. 一图概览特征工程 虽然说分了这么多部分,但特征工程最重要的部分还是特征处理,特征处理主要包含三个方面,特征预处理,特征选择和降维度. 数据预处理 数据预处理一方面把特征转为合适的编码喂给我们学习算法,另一方面就是把数据都转化到一个同一个规格.我们平时会用公制单位,那么对于特征也要转化到这样的公制单位.都是身高体重的数据,转化到公制下比较方便. 无量纲化 即把特征转化到"公

特征工程之降维

真理之言 特征工程决定了机器学习的上限,而算法和模型只是逼近这个上限. 特征工程是什么 模型设计.算法训练之前的所有针对数据的准备工作,都称之为特征工程. 特征工程包含哪些工作 分析任务.获取数据.特征数据处理-异常值.空值.重复值.标准化等.特征处理-衍化.二值化.哑编码.降维等.这个过程中很多环节都要依赖高度的业务理解程度. 降维前面的都不再细说了,该如何已了然于心.至于降维,工作过程中用的最多的还是根据经验人工识别后手动删除或者赋不同权重.其实这是非常有效的方法:二八法则保留黄金特征,往往

特征工程——特征预处理

特征的标准化和归一化 异常特征样本清洗 处理不平衡数据 特征的标准化和归一化   由于标准化和归一化这两个词经常混用,所以本文不再区别标准化和归一化,而通过具体的标准化和归一化方法来区别具体的预处理操作. z-score标准化:这是最常见的特征预处理方式,基本所有的线性模型在拟合的时候都会做 z-score标准化.具体的方法是求出样本特征x的均值mean和标准差std,然后用(x-mean)/std来代替原特征.这样特征就变成了均值为0,方差为1了.在sklearn中,我们可以用Standard

特征工程(Feature Enginnering)学习记要

最近学习特征工程(Feature Enginnering)的相关技术,主要包含两块:特征选取(Feature Selection)和特征抓取(Feature Extraction).这里记录一些要点,作为备忘. 特征选取 R中的FSelector包实现了一些特征选取的算法,主要分两大类: Algorithms for filtering attributes: cfs, chi.squared, information.gain, gain.ratio, symmetrical.uncertai

机器学习:特征工程

特征选择直接影响模型灵活性.性能及是否简洁. 好特征的灵活性在于它允许你选择不复杂的模型,同时运行速度也更快,也更容易理解和维护. 特征选择 四个过程:产生过程,评价函数,停止准则,验证过程. 目的:过滤特征集合中不重要特征,挑选一组最具统计意义的特征子集,从而达到降维的效果. 选择标准:特征项和类别项之间的相关性(特征重要性). - - -搜索特征子空间的产生过程- - - 搜索的算法分为完全搜索(Complete),启发式搜索(Heuristic), 随机搜索(Random) 3大类. 完全