[read]特征工程入门与实践


=Start=

缘由:

在讨论的时候听到同事提到「特征工程」这个词,比较感兴趣,所以借了一本书学习一下什么是特征工程,以及它能起到什么作用、达到什么效果。

正文:

参考解答:

Understand → Enforce → Build → Choose → Transform → Self-Learning

  1. 特征理解拿到的是结构化or非结构化数据?是定量数据or定性数据?每列数据处于什么等级?可以用什么图表进行可视化描述以增进对该数据的理解?
  2. 特征增强如何识别和处理数据中的缺失值?如何处理数据和特征?特征增强的意义在于——识别有问题的数据区域,并确定哪种修复方法最有效。学会用数据科学家的眼光来看数据。
  3. 特征构建主要目的在于——使用现有特征构建全新特征,让模型从中学习
  4. 特征选择:特征选择是从原始数据中选择对于预测流水线而言最好的特征的过程。即,特征选择尝试剔除数据中的噪声。
  5. 特征转换:使用一套改变数据内部结构的算法(比如:PCA/LDA等),以产生数学上更优的超级列(super-column)。它想用更少的列来解释数据,并且效果不变,甚至更好。
  6. 特征学习以全新的视角看待数据(不对输入数据的特性有所假设),从而揭示新的问题,并予以解决

特征工程是什么?

特征工程是数据科学和机器学习流水线上的重要一环,包括识别、清洗、构建和发掘数据的特征,为进一步解释数据并进行预测性分析做准备。

特征工程(feature engineering)是这样一个过程:将数据转换为能更好地表示潜在问题的特征,从而提高机器学习性能。即,将「数据」→「有效特征」。

特征工程具体包含什么?
  • 转换数据的过程:注意这里并不特指原始数据或未过滤的数据,等等。特征工程适用于任何阶段的数据。通常,我们要将特征工程技术应用于在数据分发者眼中已经处理过的数据。还有很重要的一点是,我们要处理的数据经常是表格形式的。数据会被组织成行(观察值-observation)和列(属性)。有时我们从最原始的数据形式开始入手,例如之前服务器日志的例子,但是大部分时间,要处理的数据都已经在一定程度上被清洗和组织过了。
  • 特征:显而易见,这个词在本书中会很常用。从最基本的层面来说,特征是对机器学习过程有意义的数据属性。我们经常需要查看表格,确定哪些列是特征,哪些只是普通的属性。
  • 更好地表示潜在问题:我们要使用的数据一定代表了某个领域的某个问题。我们要保证,在处理数据时,不能一叶障目不见泰山。转换数据的目的是要更好地表达更大的问题。
  • 提高机器学习性能:特征工程是数据科学流程的一部分。如我们所见,这个步骤很重要,而且经常被低估。特征工程的最终目的是让我们获取更好的数据,以便学习算法从中挖掘模式,取得更好的效果。本书稍后将详细讨论机器学习的指标和效果,但是现在我们要知道的是,执行特征工程不仅是要获得更干净的数据,而且最终要在机器学习流水线中使用这些数据。(有几个重要的指标:拟合/训练时间、预测时间、准确率)
机器学习的简单分类

大体上,我们把机器学习分为两类:监督学习和无监督学习。两种算法都可以从特征工程中获益,所以了解每种类型非常重要。

  1. 监督学习(也叫预测分析)在监督学习中,我们一般将数据集中希望预测的属性(一般只有一个,但也不尽然)叫作响应(response),其余属性叫作特征(feature)。一般而言,可以将监督学习分为两种更具体的类型:分类(预测定性响应)和回归(预测定量响应)。
  2. 无监督学习监督学习的目的是预测。我们利用数据的特征对响应进行预测,提供有用的信息。如果不是要通过探索结构进行预测,那就是想从数据中提取结构。要做到后者,一般对数据的数值矩阵或迭代过程应用数学变换,提取新的特征。聚类——将数据按特征行为进行分类,属于无监督学习的一个特殊类别。
特征工程的评估步骤

以下是评估特征工程的步骤:

(1) 在应用任何特征工程之前,先得到机器学习模型的基准性能

(2) 应用一种或多种特征工程;

(3) 然后对于每种特征工程,获取一个性能指标,并与基准性能进行对比

(4) 如果性能的增量(变化)大于某个阈值(一般由我们定义),则认为这种特征工程是有益的,并在机器学习流水线上应用;

(5) 性能的改变一般以百分比计算(如果基准性能从40%的准确率提升到76%的准确率,那么改变是90%)。

性能的定义随算法不同而改变。大部分优秀的主流机器学习算法会告诉你,在数据科学的实践中有数十种公认的指标。

大体上,我们会在3个领域内对特征工程的好处进行量化。

  • 监督学习:也叫预测分析
    • 回归——预测定量数据
      • 主要使用均方误差(MSE,mean squared error)作为测量指标
    • 分类——预测定性数据
      • 主要使用准确率作为测量指标
  • 无监督学习:聚类——将数据按特征行为进行分类
    • 主要用轮廓系数(silhouette coefficient,这是一个表示聚类分离性的变量,在-1和1之间)作为测量指标
  • 统计检验:用相关系数、检验、卡方检验,以及其他方法评估并量化原始数据和转换后数据的效果
特征工程的几个主要方面
  • 特征理解:学习如何识别定量数据和定性数据
  • 特征增强清洗和填充缺失值,最大化数据集的价值。
  • 特征选择:通过统计方法选择一部分特征,以减少数据噪声
  • 特征构建构建新的特征,探索特征间的联系。
  • 特征转换提取数据中的隐藏结构,用数学方法转换数据集、增强效果
  • 特征学习:利用深度学习的力量,以全新的视角看待数据,从而揭示新的问题,并予以解决

第1章 特征工程简介

1.1 激动人心的例子:AI驱动的聊天
1.2 特征工程的重要性
1.3 特征工程是什么
1.4 机器学习算法和特征工程的评估
1.4.1 特征工程的例子:真的有人能预测天气吗
1.4.2 特征工程的评估步骤
1.4.3 评估监督学习算法
1.4.4 评估无监督学习算法
1.5 特征理解:我的数据集里有什么
1.6 特征增强:清洗数据
1.7 特征选择:对坏属性说不
1.8 特征构建:能生成新特征吗
1.9 特征转换:数学显神通
1.10 特征学习:以AI促AI
1.11 小结

第2章 特征理解:我的数据集里有什么

2.1 数据结构的有无
2.2 定量数据和定性数据
2.3 数据的4个等级
2.3.1 定类等级
2.3.2 定序等级
2.3.3 定距等级
2.3.4 定比等级
2.4 数据等级总结
2.5 小结

第3章 特征增强:清洗数据

3.1 识别数据中的缺失值
3.1.1 皮马印第安人糖尿病预测数据集
3.1.2 探索性数据分析
3.2 处理数据集中的缺失值
3.2.1 删除有害的行
3.2.2 填充缺失值
3.2.3 在机器学习流水线中填充值
3.3 标准化和归一化
3.3.1 z分数标准化
3.3.2 min-max标准化
3.3.3 行归一化
3.3.4 整合起来
3.4 小结

第4章 特征构建:我能生成新特征吗

4.2 填充分类特征
4.2.1 自定义填充器
4.2.2 自定义分类填充器
4.2.3 自定义定量填充器
4.3 编码分类变量
4.3.1 定类等级的编码
4.3.2 定序等级的编码
4.3.3 将连续特征分箱
4.3.4 创建流水线
4.4 扩展数值特征
4.4.1 根据胸部加速度计识别动作的数据集
4.4.2 多项式特征
4.5 针对文本的特征构建
4.5.1 词袋法
4.5.2 CountVectorizer
4.5.3 TF-IDF向量化器
4.5.4 在机器学习流水线中使用文本
4.6 小结

第5章 特征选择:对坏属性说不

5.1 在特征工程中实现更好的性能
5.2 创建基准机器学习流水线
5.3 特征选择的类型
5.3.1 基于统计的特征选择
5.3.2 基于模型的特征选择
5.4 选用正确的特征选择方法
5.5 小结

第6章 特征转换:数学显神通

6.1 维度缩减:特征转换、特征选择与特征构建
6.2 主成分分析
6.2.1 PCA的工作原理
6.2.2 鸢尾花数据集的PCA——手动处理
6.2.3 scikit-learn的PCA
6.2.4 中心化和缩放对PCA的影响
6.3 线性判别分析
6.3.1 LDA的工作原理
6.3.2 在scikit-learn中使用LDA
6.4 LDA与PCA:使用鸢尾花数据集
6.5 小结

第7章 特征学习:以AI促AI

7.1 数据的参数假设
7.1.1 非参数谬误
7.1.2 本章的算法
7.2 受限玻尔兹曼机
7.2.1 不一定降维
7.2.2 受限玻尔兹曼机的图
7.2.3 玻尔兹曼机的限制
7.2.4 数据重建
7.2.5 MNIST数据集
7.3 伯努利受限玻尔兹曼机
7.3.1 从MNIST中提取PCA主成分
7.3.2 从MNIST中提取RBM特征
7.4.1 对原始像素值应用线性模型
7.4.3 对提取的RBM特征应用线性模型
7.5 学习文本特征:词向量
7.5.1 词嵌入
7.5.2 两种词嵌入方法:Word2vec和GloVe
7.5.3 Word2vec:另一个浅层神经网络
7.5.4 创建Word2vec词嵌入的gensim包
7.5.5 词嵌入的应用:信息检索
7.6 小结

第8章 案例分析

8.1 案例1:面部识别
8.1.1 面部识别的应用
8.1.2 数据
8.1.3 数据探索
8.1.4 应用面部识别
8.2 案例2:预测酒店评论数据的主题
8.2.1 文本聚类的应用
8.2.2 酒店评论数据
8.2.3 数据探索
8.2.4 聚类模型
8.2.5 SVD与PCA主成分
8.2.6 潜在语义分析
8.3 小结

参考链接:

=END=


《“[read]特征工程入门与实践”》 有 11 条评论

  1. `
    2.4 数据等级总结
    当你拿到一个新的数据集时,下面是基本的工作流程:
    1、数据有没有组织?数据是以表格形式存在、有不同的行列,还是以非结构化的文本形式存在?
    2、每列的数据是定量的还是定性的?单元格中的数代表的是数值还是字符串?
    3、每列处于哪个等级?是定类、定序、定距还是定比?
    4、我可以用什么图表?条形图、饼图、茎叶图、箱线图、直方图,还是其它?

    非结构化 → 结构化 → (分别针对每一列)定性or定量 → (定性)定类、定序;(定量)定距、定比 → 可视化/描述性统计 → 加深对数据的理解
    `

  2. PANDAS DATAFRAME: A QUICK INTRODUCTION
    https://www.sharpsightlabs.com/blog/pandas-dataframe/
    `
    1、Pandas是什么?(What Pandas is)
    2、Pandas中的DataFrames又是什么?(What Pandas DataFrames are)
    3、在Pandas中如何创建DataFrames?(How to create pandas DataFrames)
    4、Pandas的DataFrames的基本操作有哪些?(The basics of working with pandas DataFrames)

    在 Python 中,DataFrame 是一个2维的数据结构,它使得你可以对各种各样的数据进行存储和操作。你可以简单的认为就是一张由行列组成的二维表。
    `

    Pandas教程
    https://www.yiibai.com/pandas/
    https://www.tutorialspoint.com/python_pandas/python_pandas_dataframe.htm

    Pandas数据帧(DataFrame)
    https://www.yiibai.com/pandas/python_pandas_dataframe.html
    http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html
    `
    数据帧(DataFrame)是二维数据结构,即数据以行和列的表格方式排列。

    数据帧(DataFrame)的功能特点:
    潜在的列是不同的类型;
    大小可变;
    标记轴(行和列);
    可以对行和列执行算术运算;
    `

  3. 十分钟的 pandas 入门教程(中文翻译)
    https://ericfu.me/10-minutes-to-pandas/
    http://pandas.pydata.org/pandas-docs/stable/getting_started/10min.html
    `
    用 head 和 tail 查看顶端和底端的几列

    describe() 显示数据的概要

    对 axis 按照 index 排序(axis=1 是指第二个维度,即:列)
    按值排序

    dropna() 丢弃有 NaN 的行

    fillna() 填充缺失值
    isnull() 获取空值

    `
    Numpy & Pandas 教程系列
    https://morvanzhou.github.io/tutorials/data-manipulation/np-pd/

    Python之Pandas使用教程
    https://blog.csdn.net/XiaoYi_Eric/article/details/79506660

    学习python中的pandas有没有好的教程推荐?
    https://www.zhihu.com/question/56310477

  4. `
    5.4 选用正确的特征选择方法

    一个很自然的问题就是:应该如何选用特征选择方法?
    理论上说,最理想的状况是,多次尝试然后取最优解。但一般情况下这么做不太可行(因为太麻烦),下面是一些可供参考的经验:
    1、如果特征是分类的:那么从 SelectKBest 开始,用 卡方 或 基于树的选择器。
    2、如果特征基本是定量的:用 线性模型 和 基于相关性的选择器 一般效果更好。
    3、如果是二元分类问题:考虑使用 SelectFromModel 和 SVC,因为 SVC 会查找优化二元分类任务的系数。
    4、在手动选择前,探索性数据分析(EDA)会很有益处。不能低估领域知识的重要性。
    `

  5. 图表选择到代码编写,这个可视化网站安排的明明白白
    https://mp.weixin.qq.com/s/FvXHF6Vo9URDa7pMmnCGyQ
    https://www.data-to-viz.com
    `
    数据可视化是数据科学家、数据分析师必备的能力之一。如何将业务洞察、数据中的规律、趋势和问题用适当的图形、表格或注记表现出来,更便于理解和发现新的问题,降低理解数据的门槛,高效传递信息是一项具有挑战的工作。

    可视化中需要考虑很多因素,比如适合的图表类型、坐标轴、颜色使用,甚至是变量筛选等都可能对可视化结果造成影响。

    下面这张图大家应该已经在不同的地方看到过很多次了,这张图是Dr. Abela在2006年发表的,介绍了不同类型的数据应该选择何种类型的图表(selecting the appropriate chart for strategy presentations)。

    但我们今天要推荐的不是这张图,而是from Data to Viz,一个很棒的网站,主要由法国设计师Conor Healy和数据分析师Yan Holtz开发,目的是帮助大家为自己的数据选择合适的可视化图表,不敢说完全解决可视化的问题,但是对做各类数据的可视化展示还是非常有帮助的。
    `

  6. 特征工程(上)—特征选择
    https://mp.weixin.qq.com/s/RtozVlnNKycJoC_YtHGZNw
    `
    机器学习问题,始于构建特征。

    特征质量的好坏,直接影响到最终的模型结果。

    构建特征是一个很大的工程,总体来讲包括“特征选择”、“特征表达”和“特征评估”3个部分。我们也按这3个部分,并结合自己的具体实践,用3篇文章来和大家聊一下特征工程的相关问题。

    本篇文章,我们讨论一下特征选择。特征选择指的是,在全部的特征中,挑选出对最终的机器学习任务有用的特征。

    整体来讲,从特征选择的过程中有没有模型的参与,可以将特征选择的方法分为,基于统计量的选择和基于模型的选择。
    (在本文的讨论中,默认所有的特征取值已经去除量纲的影响,或者说已经做过归一化处理。)

    # 基于统计量的特征选择
    如果把每个特征看做一个随机变量,在不同的样本点处该随机变量可能会取到不同的值。可以用统计的方法,基于样本集的统计结果,对特征做出选择。

    选择的标准主要有两个,一是特征本身取值的分散程度;二是该特征与要预测的结果之间的相关程度。

    常用的几个统计量和方法包括,方差、相关系数、假设检验和互信息。

    # 基于模型的特征选择
    基于模型的特征选择,可以直接根据模型参数来选择,也可用子集选择的思路选出特征的最优组合。
    模型参数
    子集选择

    基于统计量的特征选择,因为没有模型的参与,计算起来相对简单,可以作为一个特征预处理的过程。

    基于模型的方法,要对模型参数进行学习,因此计算量相对较大;但也更接近于最终目标,即训练出一个泛化能力很好的模型。因此,这两种方法可以结合起来使用。
    `

  7. 5种数据科学家必须知道的特征选择方法
    https://mp.weixin.qq.com/s/tmXCKAB8hInenycQcO2IFA
    `
    数据决定了模型的上限,算法只能无线逼近这个上限。模型好坏很大程度上还是取决于数据的质量、特征的选择。

    面对海量数据我们无法手动挨个EDA挑选,那么如何科学地使用方法筛选特征显得尤为重要,今天个大家介绍数据科学家必须掌握的5种常用特征选择方法。

    1、特征选择的原因
    有这么简单的三个原因:
      1. 维度灾难 – 过度拟合
      2. 可解释性
      3. garbage in – garbage out

    2、如何进行特征选择?
    核心就是只选择有用的特征,可以通过很多方式来做,通常可以分为三种。
    基于过滤器:指定一些指标并基于此过滤特征,例如:相关性/卡方检验。
    基于包装器:包装器方法将选择一组特征视为搜索问题,例如:递归特征消除方法。
    嵌入式:嵌入式方法使用具有内置特征选择方法的算法,例如:Lasso和RF有自己的特征选择方法。

    3、五种特征选择方法
    1. 皮尔逊相关(pearson)——这是一种基于过滤器的方法。
    2. 卡方(chi-squared)——这是另一种基于过滤器的方法。
    3. 递归特征消除——这是一种基于包装器的方法。正如之前所说,包装器方法将特征选择视为搜索问题。
    4. Lasso:从模型中选择——这是一种嵌入式方法。
    5. 基于树:SelectFromModel

    将多种选择器组合使用
    也可以尝试组合多种选择方法进行特征筛选,计算各种特征出现的频次,并按照频次对特征排序。
    `
    https://towardsdatascience.com/the-5-feature-selection-algorithms-every-data-scientist-need-to-know-3a6b566efd2

  8. 特征工程系列:自动化特征构造
    https://mp.weixin.qq.com/s/1qtMcus0k5ttAZIvPBai-Q
    `
    数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。由此可见,特征工程在机器学习中占有相当重要的地位。在实际应用当中,可以说特征工程是机器学习成功的关键。

    那特征工程是什么?
    特征工程是利用数据领域的相关知识来创建能够使机器学习算法达到最佳性能的特征的过程。

    特征工程又包含了 Data PreProcessing(数据预处理)、Feature Extraction(特征提取)、Feature Selection(特征选择)和 Feature construction(特征构造)等子问题,本章内容主要讨论特征构造的方法。

    创造新的特征是一件十分困难的事情,需要丰富的专业知识和大量的时间。机器学习应用的本质基本上就是特征工程。
    ——Andrew Ng
    `
    [1] https://machinelearning-notes.readthedocs.io/zh_CN/latest/feature/%E7%89%B9%E5%BE%81%E5%B7%A5%E7%A8%8B%E2%80%94%E2%80%94%E6%97%B6%E9%97%B4.html
    [2] https://www.cnblogs.com/nxf-rabbit75/p/11141944.html#_nav_12
    [3] https://gplearn.readthedocs.io/en/stable/examples.html#symbolic-classifier
    [4] 利用 gplearn 进行特征工程. https://bigquant.com/community/t/topic/120709
    [5] Practical Lessons from Predicting Clicks on Ads at Facebook. https://pdfs.semanticscholar.org/daf9/ed5dc6c6bad5367d7fd8561527da30e9b8dd.pdf
    [6] Feature Tools:可自动构造机器学习特征的Python库. https://www.jiqizhixin.com/articles/2018-06-21-2
    [7] 各种聚类算法的系统介绍和比较. https://blog.csdn.net/abc200941410128/article/details/78541273

  9. 数据标准化的方法
    https://mp.weixin.qq.com/s/2BerkxkNYKtAXapqRWVj0Q
    `
    机器学习中,最重要的就是数据预处理了。
    而当不同特征之间的值差距较大,分布很离散,那么可能就需要统一这些数据的量纲,以便后期的处理。
    所以,今天带来的是一些数据标准化处理的方法。

    主要的标准化方法先列出如下:
    StandardScaler
    MinMaxScaler
    MaxAbsScaler
    RobustScaler
    Normalizer
    `

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注