零基础入门数据挖掘-二手车交易价格预测之特征工程

目录

  • 0 前言
  • 1 数据预处理
    • 1.1 处理缺失值
    • 1.2 异常值处理
  • 2 特征选择
  • 3 特征提取
  • 4 特征构建

0 前言

  何为特征工程呢?顾名思义,就是**对原始数据进行一系列工程处理,将其提炼为特征,作为输入供算法和模型使用。**本质上讲,特征工程是一个表示和展现数据的过程;实际工作中,特征工程的目的是去除原始数据中的杂质和冗余,设计更高效的特征以刻画求解的问题与预测模型之间的关系。
特征工程的重要性有以下几点:

  1. **特征越好,灵活性越强。**好的特征的灵活性在于它允许你选择不复杂的模型,同时运行速度也更快,也更容易维护。
  2. **特征越好,构建的模型越简单。**号的特征可以在参数不是最优的情况下,依然得到很好的性能,减少调参的工作量和时间,也就可以大大降低模型复杂度。
  3. **特征越好,模型的性能越出色。**特征工程的目的本来就是为了提升模型的性能。

通常特征工程认为被分为三个工作:

  • 特征提取
  • 特征选择
  • 特征构建

  本文会把数据和特征的预处理也算在特征工程内。
  实际上特征工程是非常需要时间才能更好掌握这个技能的,单纯看理论,理解不够深入,实际应用到项目或者比赛中的时候才会有更深入的理解。

1 数据预处理

首先需要对数据进行预处理,一般常用的两种数据类型:

  1. 结构化数据。结构化数据可以看作是关系型数据库的一张表,每列都有清晰的定义,包含了数值型和类别型两种基本类型;每一行数据表示一个样本的信息。

  2. 非结构化数据。主要是文本、图像、音频和视频数据,其包含的信息无法用一个简单的数值表示,也没有清晰的类别定义,并且每个数据的大小互不相同。

1.1 处理缺失值

数据的缺失主要包括记录的缺失和记录中某个字段信息的缺失,两者都会造成分析结果的不准确。

缺失值产生的原因:

  • 信息暂时无法获取,或者获取信息的代价太大。
  • 信息被遗漏,人为的输入遗漏或者数据采集设备的遗漏。
  • 属性不存在,在某些情况下,缺失值并不意味着数据有错误,对一些对象来说某些属性值是不存在的,如未婚者的配偶姓名、儿童的固定收入等。

缺失值的影响:

  • 数据挖掘建模将丢失大量的有用信息。
  • 数据挖掘模型所表现出的不确定性更加显著,模型中蕴含的规律更难把握。
  • 包含空值的数据会使建模过程陷入混乱,导致不可靠的输出。

缺失值的处理方法:

  • 直接使用含有缺失值的特征:当仅有少量样本缺失该特征的时候可以尝试使用;
  • 删除含有缺失值的特征:这个方法一般适用于大多数样本都缺少该特征,且仅包含少量有效值是有效的;
  • 插值补全缺失值
    最常使用的还是第三种插值补全缺失值的做法,这种做法又可以有多种补全方法。
    • 均值/中位数/众数补全
      如果样本属性的距离是可度量的,则使用该属性有效值的平均值来补全;如果样本属性的距离不可度量,则可以采用众数或者中位数来补全。

    • 同类均值/中位数/众数补全
      对样本进行分类后,根据同类其他样本该属性的均值补全缺失值,当然同第一种方法类似,如果均值不可行,可以尝试众数或者中位数等统计数据来补全。

    • 固定值补全
      利用固定的数值补全缺失的属性值。

    • 建模预测
      利用机器学习方法,将缺失属性作为预测目标进行预测,具体为将样本根据是否缺少该属性分为训练集和测试集,然后采用如回归、决策树等机器学习算法训练模型,再利用训练得到的模型预测测试集中样本的该属性的数值。
      这个方法根本的缺陷是如果其他属性和缺失属性无关,则预测的结果毫无意义;但是若预测结果相当准确,则说明这个缺失属性是没必要纳入数据集中的;一般的情况是介于两者之间。

    • 高维映射
      将属性映射到高维空间,采用独热码编码(one-hot)技术。将包含 K 个离散取值范围的属性值扩展为 K+1 个属性值,若该属性值缺失,则扩展后的第 K+1 个属性值置为 1。
      这种做法是最精确的做法,保留了所有的信息,也未添加任何额外信息,若预处理时把所有的变量都这样处理,会大大增加数据的维度。这样做的好处是完整保留了原始数据的全部信息、不用考虑缺失值;缺点是计算量大大提升,且只有在样本量非常大的时候效果才好。

    • 多重插补
      多重插补认为待插补的值是随机的,实践上通常是估计出待插补的值,再加上不同的噪声,形成多组可选插补值,根据某种选择依据,选取最合适的插补值。

    • 压缩感知和矩阵补全
      压缩感知通过利用信号本身所具有的稀疏性,从部分观测样本中回复原信号。压缩感知分为感知测量和重构恢复两个阶段。

      • 感知测量:此阶段对原始信号进行处理以获得稀疏样本表示。常用的手段是傅里叶变换、小波变换、字典学习、稀疏编码等。
      • 重构恢复:此阶段基于稀疏性从少量观测中恢复原信号。这是压缩感知的核心
        矩阵补全可以查看知乎上的问题:https://www.zhihu.com/question/47716840
    • 手动补全
      除了手动补全方法,其他插值补全方法只是将未知值补以我们的主观估计值,不一定完全符合客观事实。在许多情况下,根据对所在领域的理解,手动对缺失值进行插补的效果会更好。但这种方法需要对问题领域有很高的认识和理解,要求比较高,如果缺失数据较多,会比较费时费力。

    • 最近邻补全
      寻找与该样本最接近的样本,使用其该属性数值来补全。

1.2 异常值处理

  异常值分析是检验数据是否有录入错误以及含有不合常理的数据。忽视异常值的存在是十分危险的,不加剔除地把异常值包括进数据的计算分析过程中,对结果会产生不良影响。异常值是指样本中的个别值,其数值明显偏离其余的观测值。异常值也称为离群点,异常值分析也称为离群点分析。

  • 通过箱线图(或 3 σ 3\sigma 3σ)分析删除异常值
    这个原则有个条件:数据需要服从正态分布。在 3 σ 3\sigma 3σ 原则下,异常值如超过 3 倍标准差,那么可以将其视为异常值。正负 3 σ 3\sigma 3σ 的概率是 99.7%,那么距离平均值 3 σ 3\sigma 3σ之外的值出现的概率为P(|x-u| > 3 σ 3\sigma 3σ) <= 0.003,属于极个别的小概率事件。如果数据不服从正态分布,也可以用远离平均值的多少倍标准差来描述。
  • BOX-COX转换(处理有偏分布)
  • 长尾截断
    具体可以参考,特征工程之数据处理

2 特征选择

定义:从给定的特征集合中选出相关特征子集的过程称为特征选择(feature selection)。

  • 对于一个学习任务,给定了属性集,其中某些属性可能对于学习来说很关键,但有些属性意义就不大。
    • 对当前学习任务有用的属性或者特征,称为相关特征(relevant feature);
    • 对当前学习任务没用的属性或者特征,称为无关特征(irrelevant feature)。
  • 特征选择可能会降低模型的预测能力,因为被剔除的特征中可能包含了有效的信息,抛弃这部分信息一定程度上会降低模型的性能。但这也是计算复杂度和模型性能之间的取舍:
    • 如果保留尽可能多的特征,模型的性能会提升,但同时模型就变复杂,计算复杂度也同样提升;
    • 如果剔除尽可能多的特征,模型的性能会有所下降,但模型就变简单,也就降低计算复杂度。
  • 常见的特征选择分为三类方法:
    • 过滤式(filter):先对数据进行特征选择,然后在训练学习器,常见的方法有 Relief/方差选择发/相关系数法/卡方检验法/互信息法;
    • 包裹式(wrapper):直接把最终将要使用的学习器的性能作为特征子集的评价准则,常见方法有 LVM(Las Vegas Wrapper) ;
    • 嵌入式(embedding):结合过滤式和包裹式,学习器训练过程中自动进行了特征选择,常见的有 lasso 回归;

3 特征提取

特征提取一般是在特征选择之前,它提取的对象是原始数据,目的就是自动地构建新的特征,将原始数据转换为一组具有明显物理意义(比如 Gabor、几何特征、纹理特征)或者统计意义的特征。
一般常用的方法包括降维(PCA、ICA、LDA等)、图像方面的SIFT、Gabor、HOG等、文本方面的词袋模型、词嵌入模型等。

4 特征构建

特征构建是指从原始数据中人工的构建新的特征。需要花时间去观察原始数据,思考问题的潜在形式和数据结构,对数据敏感性和机器学习实战经验能帮助特征构建。

特征构建需要很强的洞察力和分析能力,要求我们能够从原始数据中找出一些具有物理意义的特征。假设原始数据是表格数据,一般你可以使用混合属性或者组合属性来创建新的特征,或是分解或切分原有的特征来创建新的特征。

特征构建非常需要相关的领域知识或者丰富的实践经验才能很好构建出更好的有用的新特征,相比于特征提取,特征提取是通过一些现成的特征提取方法来将原始数据进行特征转换,而特征构建就需要我们自己人为的手工构建特征,比如组合两个特征,或者分解一个特征为多个新的特征。

  • 构造统计量特征,报告计数、求和、比例、标准差等;
  • 时间特征,包括相对时间和绝对时间,节假日,双休日等;
  • 地理信息,包括分箱,分布编码等方法;
  • 非线性变换,包括 log/ 平方/ 根号等;
  • 特征组合,特征交叉;
  • 仁者见仁,智者见智。

代码参考我的github
参考:

  • 特征工程
  • 数据预处理

你可能感兴趣的:(天池)