特征工程

  • 一、 概述
  • 二、 特征工程构建原则
  • 三、 常用的特征有哪些
  • 四、 常用的特征的处理方法
  • 五、 特征选择
  • 六、 总结

推荐系统学习笔记系列链接:

推荐系统学习笔记——特征工程
推荐系统学习笔记召回策略之基于内容召回
推荐系统学习笔记召回策略之基于协同过滤召回
推荐系统召回策略之多路召回与Embedding召回


一、 概述

在机器学习界流传这样一句话:“数据和特征决定了机器学习算法的上界,而算法和模型只是不断逼近这个上限而已”。在机器学习应用中,特征工程介于“数据”和“模型”之间,特征工程是使用数据的专业领域知识创建能够使机器学习算法工作的特征过程。因此,特征工程的前提是收集足够多的数据,其次则是从大量数据中提取关键信息并表示为模型所需要的形式。合适的特征可以让模型预测更加容易,机器学习应用更加可能成功。

从数学角度来说,特征工程就是将原始数据空间变换到新的特征空间,或者说是换一种数据的表达方式,在新的特征空间中,模型能够更好地学习数据中的规律。事实上,如果特征工程足够复杂,即使是最简单的模型,也能表现出非常好的效果。然而,复杂的模型一定程度上减少了特征工程需要做的工作。故,可以说特征工程与模型二者此消彼长

二、 特征工程构建原则

特征工程的本质是对某个行为过程相关信息的抽象表达,所以我们需要将原始数据转化为实向量。再将原始数据转化为实向量后,对应的特征空间很可能不是最佳的特征空间。为了让模型更好的学习到数据中隐藏的规律,我们还需要对特征做进一步的变换。将原始数据空间变换为模型输入向量空间的过程便是特征工程所要做的事情。

上述两条原则说起来很简单,但是在真正的实施时候却有很多注意的地方。特征的挖掘一般跟专业领域知识强相关,特征工程可以说是业务逻辑的一种数据层面的表示。所以特征工程的首先是理解业务数据和业务逻辑,特征提取的目标是对业务进行精确、全面的描述,其次是需要理解模型和算法,因为只有清楚了模型需要什么样的输入才能有较精确的预测结果。最后,我们还需要对特征进行特殊的数学变换

说了这么多,其实用两句话就可以概括其最基本原则(两个“尽可能”):

  1. 尽可能的保留原有信息中的所有有用信息
  2. 尽可能的摒弃冗余信息

三、 常用的特征有哪些

说了这么多,那么我们常见的特征有哪些呢?

1. 数值特征

数值类型的数据具有实际测量意义,例如,人的身高、体重、血压等或者是计数,例如,一个网站被浏览多少次,一种产品被购买多少次等。数值特征可以分为离散型跟连续型。

对于数值特征,我们主要考虑的因素是它的大小和分布。对于那些目标变量为输入特征的光滑函数的模型,如线性回归,逻辑回归等,其对输入特征大小很敏感。因此,当使用光滑函数建模时,有必要对输入进行归一化。而对于那些基于树的模型,例如随机森林、梯度提升树等,其对输入特征的大小不敏感,输入不需要归一化。

归一化的主要目的是统一各特征的量纲,将连续特征归一到 [0,1] 区间。也可以做0均值归一化,即将原始数据集归一化为均值为0、方差为1的数据集。

2. 类别特征

类别特征典型的例子是人的性别、婚姻状况、他们喜欢的电影等。类别数据的取值可以使数值型的(例如“1”代表男性,“0”代表女性),但是数值没有任何数学意义,它们不能进行数学运算。类别特征不仅可以由原始数据中直接提取,也可以通过将数值特征离散化得到。例如最经典的就是one-hot编码和multi-hot编码。

注明:对类别特征进行one-hot编码和multi-hot编码常见的问题就是特征向量的维度过大,特征过于稀疏,容易造成模型欠拟合,模型的权重参数过多,导致模型收敛过慢。所以通常会与Embedding技术一起使用,生成稠密Embedding向量,再与其它特征组合,形成最终的输入特征向量。

3. 时间特征

在实际应用中,时间往往是个非常重要的因素,例如用户在购物网站上购买、浏览、收藏的时间等。时间变量通常以日期(如2020/06/20 21:59:10)、时间戳(如1494391009)等形式表示。时间变量可以直接作为类别变量处理,类别特征的处理方式对于时间特征同样适用。除了对单个时间变量的预处理外,根据具体业务对两个时间变量之间进行组合也能提取重要的特征。例如,顾客上次借款距离现在的时间间隔。

除了上面提到的基于时间本身的特征外,时间变量更重要的是时间序列的相关的特征。时间序列不仅包含一维时间变量,还有一维其他变量,如股票价格、天气温度、降雨量等等。时间序列分析主要的目的是基于历史数据来预测未来信息。对于时间序列,我们关心的是长期的变动趋势、周期性的变动(如季节性变动)以及不规则的变动。对于时间序列信息,当前的时间点之前的信息通常很重要,例如滞后特征(也称为lag特征)使用非常广泛。

4. 空间特征

基于空间位置变量也是一类非常重要的信息,例如经纬度。对于经纬度,除了将其作为数值变量使用之外,还有其他更有效的使用方式。例如可以对经纬度做散列,从而对空间区域进行分块,得到一个类别特征。

5. 文本特征

自然语言要处理的对象是文本信息。对于文本特征,类别特征的处理方法同样适用,基于深度学习的自动特征工程效果变得越来越好。需要注意的是,文本特征往往会产生特别稀疏的特征矩阵。常用的文本特征处理方法有:Word2Vec、TF-IDF、文本相似性等等。

四、 常用的特征的处理方法

对于推荐系统来说,模型的输入往往是由数字组成的特征向量。这里将从连续型特征和类别型特征两个角度来介绍常用特征处理方法。

1. 连续型特征

对于连续型特征的处理,最常用的处理手段包括归一化、离散化、加非线性函数等方法。

归一化的主要目的是统一各特征的量纲,将连续特征归一到 [0,1] 区间。也可以做0均值归一化,即将原始数据集归一化为均值为0、方差为1的数据集。

离散化是通过确定分位数的形式将原来的连续值进行分桶,最终形成离散值的过程。离散化的主要目的是防止连续值带来的过拟合现象及特征值分布不均匀的情况

加非线性函数的处理方法,是直接把原来的特征通过非线性函数做变换,然后把原来的特征及变换后的特征一起加入模型进行训练的过程。加入非线性函数的目的是更好的捕获特征与优化目标之间的非线性关系,增强这个模型的非线性表达能力。

2. 类别型特征

类别型特征的原始表现形式往往是一个类别或者一个 id。这类特征最常用的处理方法是使用one-hot编码将其转换成一个数值向量。在one-hot编码的基础上,面对同一个特征域非唯一的类别选择,还可以采用multi-hot编码。

对特征进行one-hot或者multi-hot编码的缺点在于特征向量维度过大、特征过于稀疏,容易造成模型欠拟合,模型的权重参数过多,导致模型的收敛过慢。因此,在Embedding技术成熟之后,被广泛应用在类别特征的处理上,先将类别型特征编码成稠密Embedding向量,再与其它特征组合,形成最终的输入特征向量。

五、 特征选择

特征选择是指为了构建模型而选择相关特征子集的过程。特征选择的目的有三个:

  • 简化模型,使模型更易于研究人员和用户的理解。 可解释性不仅让我们对模型效果的稳定性有更多的把握,而且也能为业务运营等工作提供指引和决策支持。
  • 改善性能。 特征选择的另一个作用就是节省存储和计算开销。
  • 改善通用性,降低过拟合风险。 特征的增多会大大地增加模型的搜索空间,大多数模型所需要的训练样本数目随着特征数量的增加而显著增加,特征的增加虽然会更好的拟合训练数据,但也可能增加方差。

好的特征选择不仅能提升模型的性能,更能帮助我们理解数据的特点和底层的结果,这对进一步改善模型和算法都有着重要的作用。使用特征选择的前提是:训练数据中包含许多冗余或者无关的特征,移除这些特征并不会导致丢失信息。

特征选择一般包括生产过程评价函数停止准则验证过程。为了进行特征选择,我们首先需要产生特征或特征子集候选集合,其次需要衡量特征或特征子集的重要性或者好坏程度,因此需要量化特征变量和目标变量之间的联系以及特征之间的相互联系。为了避免过拟合,我们一般采用交叉验证的方式来评估特征的好坏;为了减少计算复杂度,我们还需要设定一个阈值,当评价函数到达阈值后搜索停止;最后,我们需要在验证数据集上验证选出来的特征子集的有效性。

以下是常用特征选择方法比较:

特征选择方法 优点 缺点 举例
过滤方法 单变量 速度快;可扩展;跟机器学习模型独立 忽略特征之间的的关系;忽略特征与模型之间的关系 卡方检验;信息增益;相关系数
多变量 考虑了特征之间的相关性;跟机器学习模型独立;计算复杂度优于封装方法 计算速度和可扩展性低于单变量方法;忽略了特征和模型之间的关系 基于相关性的特征选择(CFS);MBS;FCBF
封装方法 确定性算法 简单;跟机器学习模型相关;考虑特征之间的相互作用;计算密集程度低于随机算法 容易过拟合;相比随机算法容易卡在局部最优子集(贪心搜索);依赖机器学习模型 序列向前特征选择(SFS);序列向后特征删减(SBE);增q删r
随机算法 不容易达到局部极小点;跟机器学习模型相关;考虑特征之间的相互作用 计算密集型;依赖机器学习模型;相比确定系算法过拟合的风险较高 模拟退火;随机爬山;基因算法
嵌入方法 与模型相关;计算复杂度优于封装方法;考虑特征之间的相互作用 依赖机器学习模型 决策树、随机森林、梯度提升树;SVM;LASSO

特征选择是剔除不相关或者冗余的特征,减少有效特征的个数,减少模型训练的时间,提高模型的精确度。特征提取通过特征转换实现降维,特征选择则是依靠统计学方法或者于机器学习模型本身的特征选择(排序)功能实现降维。特征选择是个重复迭代的过程,有时可能自己认为特征选择做的很好,但实际中模型训练并不太好,所以每次特征选择都要使用模型去验证,最终目的是为了获得能训练出好的模型的数据,提升模型的性能。

六、 总结

从某个意义来说,传统的人工特征组合、过滤的工作已经不存在了,取而代之的是将特征工程与模型结构统一思考、整体建模的深度学习模式。不变的是,只有深入了解业务的运行模式,了解用户在业务场景下的思考方式和行为动机,才能精确地抽取出最优价值的特征,构建成功的深度学习模型。

推荐系统学习笔记——特征工程相关推荐

  1. 推荐系统学习笔记召回策略之基于协同过滤召回

    基于协同过滤的召回 1. 概述 2. 基于近邻的协同过滤算法 3. 相似度计算方法 4. 协同过滤算法的进化-矩阵分解 图1. 推荐系统整体架构 推荐系统学习笔记系列链接: 推荐系统学习笔记--特征工 ...

  2. 浅谈微视推荐系统中的特征工程

    本文作者:hannahguo,腾讯 PCG 推荐算法工程师 在推荐系统中,特征工程扮演着重要的角色.俗话说数据和特征决定了机器学习算法的上限,而模型.算法的选择和优化只是在不断逼近这个上限.特征工程的 ...

  3. 特征工程——推荐系统里的特征工程

    原文:推荐系统里的特征工程 个性化推荐系统 Personalized recommender system 比其他的机器学习方法更依赖特征工程,所以我拿它来当作问题的背景,结合我之前做过的一个推荐系统 ...

  4. 推荐系统中的特征工程

    关于推荐系统中的特征工程 在多数数据和机器学习的blog里,特征工程 Feature Engineering 都很少被提到.做模型的或者搞Kaggle比赛的人认为这些搞feature工作繁琐又不重要不 ...

  5. 12月19日 OpenCV 实战基础学习笔记——特征匹配

    文章目录 前言 一.特征匹配 1.Brute-force 蛮力匹配 2.1 对 1 匹配 3.k 对最佳匹配 二.答题卡识别 前言 本文为12月19日 OpenCV 实战基础学习笔记--特征匹配,分为 ...

  6. Python推荐系统学习笔记(3)基于协同过滤的个性化推荐算法实战---ItemCF算法(下)

    本文在 Python推荐系统学习笔记(2)基于协同过滤的个性化推荐算法实战---ItemCF算法 一文的基础上,对其基本的ItemCF算法做出改进. 一.相关概念 1.ItemCF中,基于行为(喜好) ...

  7. Python推荐系统学习笔记(5)基于协同过滤的个性化推荐算法实战---UserCF算法(下)

    本文在 Python推荐系统学习笔记(4)基于协同过滤的个性化推荐算法实战---UserCF算法(上) 一文的基础上,对其基本的UserCF算法做出改进. 一.相关概念 1.UserCF中,基于行为( ...

  8. 深度学习推荐系统之“输入”特征工程

    1. 前言 从计算机视觉转换赛道到推荐系统,最令我迷惑的不是具体的网络模型,而是大多数论文中往往一笔带过的"输入层".就像一个厨师,知道菜谱,但是不会处理食材.最近一段时间通过查阅 ...

  9. 关于推荐系统中的特征工程

    转载自:http://blog.jobbole.com/74951/ 在多数数据和机器学习的blog里,特征工程 Feature Engineering 都很少被提到.做模型的或者搞Kaggle比赛的 ...

最新文章

  1. linux环境变量 LD_LIBRARY_PATH 使用
  2. Java中“==”的使用,以及“==”和equal的比较
  3. jquery和bottstrap
  4. php 文件上传系统,php需登录文件上传管理系统
  5. 关于exchange 2013输入账号密码后owa空白页解决方法
  6. 【收藏】Sentinel 高可用流量管理框架、服务熔断降级等
  7. CSS3制作一个简单的进度条
  8. Dotnet core使用JWT认证授权最佳实践(一)
  9. Unity与Android交互
  10. redis-数据操作-键命令
  11. 深入聊一聊 Spring AOP 实现机制!
  12. python基础入门笔记_Python基础入门笔记:函数
  13. ubuntu16.04 创建配置并使用虚拟环境
  14. 时频分析matlab实例,Matlab时频分析工具箱及仿真案例
  15. 按键精灵手机助手之入门篇
  16. 从零开始学Java【基本输入输出、排序(sort)、高精度大数运算(BigInteger)】
  17. python-科研绘图系列(7)-箱型图(盒型图)
  18. Flutter Dio 报错is not a subtype of type ‘DioError‘
  19. 基于mysql+php的英语四六级过级成绩管理
  20. 【Java】SpringBoot后端格式转换:把PPT转成PDF

热门文章

  1. java getenv_Java利用System.getenv()和System.getProperty()来读取配置信息
  2. 粗糙集的上、下近似与定积分之间的关系
  3. Wwise EBP管线
  4. SAECCE 2021展位预定已过半,观众预登记系统上线啦!
  5. 计蒜客A1676 Rock Paper Scissors Lizard Spock
  6. 铸铁的弹性模量和泊松比_[转载]常用材料弹性模量及泊松比
  7. 欧盟和美国在数据安全方面的现状
  8. java图片文字识别tesseract-ocr
  9. Springboot+Redis+阿里云服务器 Redis是什么?如何配置Redis?怎样配置Redis?如何按装Redis?
  10. Android开发-使用高德地图SDK实现仿钉钉打卡的功能