Author Archive

分类特征

https://easy-ai.oss-accelerate.aliyuncs.com/2021-03-30-typefeature.png

分类特征是重要的一类特征。分类特征是离散的,非连续的。

本文将针对小型分类和大型分类介绍5种主流的编码方式。以及各自的优缺点。

 

什么是分类(类别)特征?

分类特征是用来表示分类的,他不像数值类特征是连续的,分类特征是离散的。

比如:

  • 性别
  • 城市
  • 颜色
  • IP地址
  • 用户的账号ID

https://easy-ai.oss-accelerate.aliyuncs.com/2021-03-30-lisan.png

有些分类特征也是数值,比如账号ID,IP地址。但是这些数值并不是连续的。

连续的数字是数值类特征,离散的数字是分类特征。

关于连续和离散的解释可以看看这篇文章:《关于连续和离散的理解

小型分类特征的编码方式

https://easy-ai.oss-accelerate.aliyuncs.com/2021-03-30-small-data.png

自然数编码/序列编码-Ordinal Encoding

某些分类本来就有一定的排序,这种情况下就可以使用简单的自然数编码。

例如学位:

学士-0

硕士-1

博士-2

独热编码-One-Hot Encoding

对于城市、颜色、品牌、材质…这些特征就不适合用自然数编码,因为这些特征是没有排序关系的。

使用独热编码可以让不同的分类处在「平等的地位」,不会因为数值的大小而对分类造成影响。

例如颜色分类(假设只有3种颜色):

红色-100

黄色-010

蓝色-001

跟独热编码类似还有「虚拟编码-Dummy Encoding」和「效果编码-Effect Encoding」。

实现方式比较相似,不过有一些略微的差别,并且适用在不同的场景。

感兴趣的可以看看这篇文章:

虚拟变量和独热编码的区别

赋值方法:效应编码

大型分类特征的编码方式

https://easy-ai.oss-accelerate.aliyuncs.com/2021-03-30-big-data.png

目标编码-Target Encoding

目标编码是表示分类列的一种非常有效的方法,并且仅占用一个特征空间,也称为均值编码。该列中的每个值都被该类别的平均目标值替代。这可以更直接地表示分类变量和目标变量之间的关系。

目标编码的扩展阅读:《目标编码简介

散列编码-Hash encoding

散列函数也是大家常听到的哈希函数。散列函数是一个确定性函数,它映射一个潜在的无界整数到有限整数范围[1,m]。

假如有一个分类有1万个值,如果使用独热编码,编码会非常长。而使用了散列编码,不管分类有多少不同的值,都会转换成长度固定的编码。

分箱计数-Bin-Counting

分箱计数的思维有点复杂:他不是用分类变量的值作为特征,而是使用目标变量取这个值的条件概率。

换句话说,我们不对分类变量的值进行编码,而是要计算分类变量值与要预测的目标变量之间的相关统计量。

不同编码的优缺点总结

独热编码-One-Hot Encoding

优点:

  1. 容易实现
  2. 分类很精确
  3. 可用于在线学习

缺点:

  1. 计算效率不高
  2. 不能适应可增长的类别
  3. 只适用于线性模型
  4. 对于大数据集,需要大规模的分布式优化

散列编码-Hash encoding

优点:

  1. 容易实现
  2. 模型训练成本更低
  3. 容易适应新类别
  4. 容易处理稀有类
  5. 可用于在线学习

缺点:

  1. 只适合线性模型或核方法
  2. 散列后的特征无法解释
  3. 精确度难以保证

分箱计数-Bin-Counting

优点:

  1. 训练阶段的计算负担最小
  2. 可用于基于树的模型
  3. 容易适应新的类别
  4. 可使用back-off方法或最小计数图处理稀有类
  5. 可解释

缺点:

  1. 需要历史数据
  2. 需要延迟更新,不完全适合在线学习
  3. 很可能导致数据泄露

上面内容摘自:《精通特征工程

总结

分类特征是离散的特征,数值类特征是连续的。

对于小型分类,常用的编码方式有:

  1. 自然数编码/序列编码-Ordinal Encoding
  2. 独热编码-One-Hot Encoding
  3. 虚拟编码-Dummy Encoding
  4. 效果编码-Effect Encoding

对于大型分类,常用的编码方式有:

  1. 目标编码-Target Encoding
  2. 散列编码-Hash encoding
  3. 分箱计数-Bin-Counting

相关文章推荐:

机器学习之类别特征处理

特征工程(四): 类别特征

数值类特征

http://easy-ai.oss-accelerate.aliyuncs.com/2021-03-21-datafeature.png

数值类特征是最常见的一种特征类型,数值可以直接喂给算法。
为了提升效果,我们需要对数值特征做一些处理,本文介绍了4种常见的处理方式:缺失值处理、二值化、分桶、缩放。

什么是数值类特征?

http://easy-ai.oss-accelerate.aliyuncs.com/2021-03-21-keceliang.png

数值类特征就是可以被实际测量的特征。例如:

  • 人的身高、体重、三维
  • 商品的访问次数、加入购物车次数、最终销量
  • 登录用户中有多少新增用户、回访用户

 

数值类的特征可以直接喂给算法,为什么还要处理?

因为好的数值特征不仅能表示出数据隐藏的中的信息,而且还与模型的假设一致。通过合适的数值变换就可以带来很好的效果提升。

例如线性回归、逻辑回归对于数值的大小很敏感,所以需要进行缩放。

http://easy-ai.oss-accelerate.aliyuncs.com/2021-03-21-2points.png

对于数值类特征,我们主要关注2个点:

  1. 大小
  2. 分布

下面提到的4种处理方式都是围绕大小和分布来优化的。

 

数值类特征常用的4种处理方式

http://easy-ai.oss-accelerate.aliyuncs.com/2021-03-21-4method.png

  1. 缺失值处理
  2. 二值化
  3. 分桶 / 分箱
  4. 缩放

 

缺失值处理

在实际问题中,经常会遇到数据缺失的情况。缺失值对效果会产生较大的影响。所以需要根据实际情况来处理。

对于缺失值常用3种处理方式:

  1. 填充缺失值(均值、中位数、模型预测…)
  2. 删除带有缺失值的行
  3. 直接忽略,将缺失值作为特征的一部分喂给模型进行学习

 

二值化

这种处理方式通常用在计数的场景,例如:访问量、歌曲的收听次数…

举例:

根据用户的听音乐的数据来预测哪些歌曲更受欢迎。

假设大部分人听歌都很平均,会不停的听新的歌曲,但是有一个用户24小时的不停播放同一首歌曲,并且这个歌曲很偏门,导致这首歌的总收听次数特别高。如果用总收听次数来喂给模型,就会误导模型。这时候就需要使用「二值化」。

同一个用户,把同一首歌听了N遍,只计数1,这样就能找出大家都喜欢的歌曲来推荐。

 

分桶 / 分箱

拿每个人的收入举例,大部分人的收入都不高,极少数人的收入极其高,分布很不均匀。有些人月收入3000,有些人月收入30万,跨了好几个数量级。

这种特征对于模型很不友好。这种情况就可以使用分桶来处理。分桶就是将数值特征分成不同的区间,将每个区间看做一个整体。

常见的分桶:

  1. 年龄分布
  2. 商品价格分布
  3. 收入分布

常用的分桶方式:

  1. 固定数值的分桶(例如年龄分布:0-12岁、13-17岁、18-24岁…)、
  2. 分位数分桶(例如淘宝推荐的价格区间:30%用户选择最便宜的价格区间、60%用户选择的中等价格区间、9%的用户选择最贵的价格区间)
  3. 使用模型找到最佳分桶

http://easy-ai.oss-accelerate.aliyuncs.com/2021-03-21-taobao-fenweishu.png

 

缩放

线性回归、逻辑回归对于数值的大小很敏感、不同特征尺度相差很大的话会严重影响效果。所以需要将不同量级的数值进行归一化。将不同的数量级缩放到同一个静态范围中(例如:0~1,-1~1)。

常用的归一化方式:

  1. z分数标准化
  2. min-max标准化
  3. 行归一化
  4. 方差缩放

扩展阅读:

数据缩放:标准化和归一化

106-数据缩放scaling(标准化、归一化)的那些事

探索性数据分析 | EDA

http://easy-ai.oss-accelerate.aliyuncs.com/2021-03-07-edabanner.png

探索性数据分析是拿到原始数据后,通过技术手段帮助自己更好的理解数据、提取出「好特征」、建立初步模型的过程。

本文将介绍数据的分类方式,以及不同类型的数据如何可视化的具体方法。

什么是探索性数据分析?

说到篮球,大家都知道身高、臂展是运动员的关键特征。

那手球呢?相信大部分人都说不出来。

遇到自己不熟悉的领域,需要快速对陌生领域有一定的理解。

有2种方法来帮助我们理解陌生领域:

  1. 咨询业内人士。资深的业内人士会传授一些他们的经验。
  2. 去研究一下陌生领域的数据。我们可以把手球运动员的身体数据和成绩数据拿过来做分析,看看最优秀的手球运动员都有哪些特点。在没有任何行业经验的情况下,通过对数据的洞察,也能有一些发现。

http://easy-ai.oss-accelerate.aliyuncs.com/2021-03-07-ask-eda.png

上面的第二条路就是:探索性数据分析 | Exploratory Data Analysis | EDA

探索性数据分析就是利用各种技术手段(大部分都是利用数据可视化)探索数据内部结构和规律的一种数据分析方法和理念。

探索性数据分析的目的是尽可能是洞察数据集、发现数据的内部结构、提取重要的特征、检测异常值、检验基本假设、建立初步的模型。

探索性数据分析的3步方法

http://easy-ai.oss-accelerate.aliyuncs.com/2021-03-08-3steps.png

探索性数据分析的过程大致分为3步:

  1. 数据分类
  2. 数据可视化
  3. 洞察数据

第一步:数据分类

当我们拿到数据后,第一步就是把这些数据进行分类,然后用不同方法来处理不同类型的数据。

数据由粗到细可以按照下面的方式来分类:

http://easy-ai.oss-accelerate.aliyuncs.com/2021-03-07-xifen.png

结构化数据 VS 非结构化数据

结构化数据:能够用表格来组织的数据都算是结构化的数据。

例如:Excel里的数据、MySQL里的数据…

非结构化数据:非表格形式组织的都是。

例如:文本、图片、视频…

 

定量数据 VS 定性数据

定量数据:数值类型,衡量某样东西的数量。

例如:1985

定性数据:类别,描述某样东西的性质。

例如:80后

 

数据的4个等级

定类等级(norminal level):是数据的第一个等级,其结构最弱。只需要按照名称来分类。

例如:血型(A,B,AB,O)、姓名、颜色

定序等级(ordinal level):定序等级在定类等级的基础上加了自然排序,这样我们就可以对不同数据进行比较。

例如:餐厅的评星,公司的考核等级

定距等级(interval level):定距等级一定是数值类型的,并且这些数值不仅可以用来排序,还可以用来加减。

例如:华氏度、摄氏度(温度有负数,不可以进行乘除运算)

定比等级(ratio level):在定距等级的基础上,加入了绝对零点,不但可以做加减的运算,还可以做乘除的运算。

例如:金钱、重量

 

第二步:数据可视化

为了更好的洞察数据,我们可以将数据可视化,从而更好的观察数据的特点。

常用的数据可视化有下面几种:

http://easy-ai.oss-accelerate.aliyuncs.com/2021-03-07-keshihua.png

上面的4个数据等级需要对应不同的可视化方法,下面整理了一个表格,可以帮助大家更好的选择可视化的方案。

下面是一些基础的可视化方案,在实际应用中,会有更复杂的,组合图表可以使用。

数据等级属性描述性统计图表
定类离散、无序频率占比、众数条形图、饼图
定序有序类别、比较频率、众数、中位数、百分位数条形图、饼图
定距数字差别有意义频率、众数、中位数、均值、标准差条形图、饼图、箱线图
定比连续均值、标准差条形图、曲线图、饼图、箱线图

第三步:洞察数据

数据的可视化可以帮助我们更好的洞察数据,我们可以更高效的发现哪些数据更重要,不同数据之间可能存在的关系,哪些数据会相互影响…

之所以叫探索性数据分析,就是没什么固定的套路,所以这一步没什么好讲的。

总结

探索性数据分析就是利用各种技术手段(大部分都是利用数据可视化)探索数据内部结构和规律的一种数据分析方法和理念。

探索性数据分析的过程大致分为3步:

  1. 数据分类
  2. 数据可视化
  3. 洞察数据

特征工程 – Feature Engineering

一文看懂特征工程

特征工程是机器学习工作流程中重要的组成部分,他是将原始数据「翻译」成模型可理解的形式。

本文将介绍特征工程的基本概念、重要性和性能评估的4个步骤。

特征工程的重要性

大家都听过美国计算机科学家 Peter Norvig 的2句经典名言:

基于大量数据的简单模型优于基于少量数据的复杂模型。

这句说明了数据量的重要性。

更多的数据优于聪明的算法,而好的数据优于多的数据。

这句则是说的特征工程的重要性。

所以,如何基于给定数据来发挥更大的数据价值就是特征工程要做的事情。

在16年的一项调查中发现,数据科学家的工作中,有80%的时间都在获取、清洗和组织数据。构造机器学习流水线的时间不到20%。详情如下:

数据科学家的工作中,有80%的时间都在获取、清洗和组织数据

  • 设置训练集:3%
  • 清洗和组织数据:60%
  • 收集数据集:19%
  • 挖掘数据模式:9%
  • 调整算法:5%
  • 其他:4%

PS:数据清洗和组织数据也是数据科学家「最讨厌」的工作。感兴趣的可以看这篇原始的文章:

数据来源:《Data Scientists Spend Most of Their Time Cleaning Data

什么是特征工程

我们先来看看特征工程在机器学习流程中的位置:

特征工程在机器学习流程中的位置

从上图可以看出,特征工程处在原始数据和特征之间。他的任务就是将原始数据「翻译」成特征的过程。

特征:是原始数据的数值表达方式,是机器学习算法模型可以直接使用的表达方式。

特征工程是一个过程,这个过程将数据转换为能更好的表示业务逻辑的特征,从而提高机器学习的性能。

这么说可能不太好理解。其实特征工程跟做饭很像:

我们将食材购买回来,经过清洗、切菜,然后开始根据自己的喜好进行烹饪,做出美味的饭菜。

特征工程跟做饭很像

上面的例子中:

食材就好像原始数据

清洗、切菜、烹饪的过程就好像特征工程

最后做出来的美味饭菜就是特征

人类是需要吃加工过的食物才行,这样更安全也更美味。机器算法模型也是类似,原始数据不能直接喂给模型,也需要对数据进行清洗、组织、转换。最后才能得到模型可以消化的特征。

除了将原始数据转化为特征之外,还有2个容易被忽视的重点:

重点1:更好的表示业务逻辑

特征工程可以说是业务逻辑的一种数学表达。

我们使用机器学习的目的是为了解决业务中的特定问题。相同的原始数据有很多种转换为特征的方式,我们需要选择那些能够「更好的表示业务逻辑」,从而更好的解决问题。而不是那些更简单的方法。

重点2:提高机器学习性能

性能意味着更短时间和更低成本,哪怕相同的模型,也会因为特征工程的不同而性能不同。所以我们需要选择那些可以发挥更好性能的特征工程。

评估特征工程性能的4个步骤

特征工程的业务评估很重要,但是方法五花八门,不同业务有不同的评估方法。

这里只介绍性能的评估方式,相对通用一些。

评估特征工程性能的4个步骤

  1. 在应用任何特征工程之前,得到机器学习模型的基准性能
  2. 应用一种或多种特征工程
  3. 对于每种特征工程,获取一个性能指标,并与基准性能进行对比
  4. 如果性能的增量大于某个阈值,则认为特征工程是有益的,并在机器学习流水线上应用

例如:基准性能的准确率是40%,应用某种特征工程后,准确率提升到76%,那么改变就是90%。

(76%-40%)/ 40%=90%

总结

特征工程是机器学习流程里最花时间的工作,也是最重要的工作内容之一。

特征工程定义:是一个过程,这个过程将数据转换为能更好的表示业务逻辑的特征,从而提高机器学习的性能。

特征工程容易被忽略的2个重点:

  1. 更好的表示业务逻辑
  2. 提高机器学习性能

特征工程性能评估的4个步骤:

  1. 在应用任何特征工程之前,得到机器学习模型的基准性能
  2. 应用一种或多种特征工程
  3. 对于每种特征工程,获取一个性能指标,并与基准性能进行对比
  4. 如果性能的增量大于某个阈值,则认为特征工程是有益的,并在机器学习流水线上应用
Chinese (Simplified) ZH-CN English EN