类别型数据:简介#
预计整个模块学习时长: 50 分钟
学习目标:
区分类别型数据与数值型数据。
用独热向量(one-hot vectors)表示类别型数据。
处理类别型数据中的常见问题。
创建特征交叉(feature crosses)。
先修要求:
本模块假设你已经熟悉以下模块中介绍的概念:
先想一个问题:模型眼里的数据,凭什么分成两类?
类别型数据(Categorical data有一个很鲜明的特点:它的取值集合是固定的。也就是说,你能提前把这个集合完整地列出来。举几个例子:
国家公园里出现过的动物物种
某个城市里街道的名字
一封邮件是不是垃圾邮件
房屋外墙被刷成什么颜色
被分箱过的数字(在「处理数值型数据」模块中介绍过)
数字也可以是类别型数据#
判断一份数据是不是真的数值型数据,其实只有一条标准:乘法对它有没有意义。
我们拿房价来举例。
假设要训练一个模型,根据房屋面积来预测房价,请注意——一个真正有用的房价评估模型,通常要依赖成百上千个特征。但在其他条件都相同的前提下,一套 200 平方米的房子,价值大约应当是一套同样户型的 100 平方米房子的两倍(该特征可乘)。
反过来说,很多时候,取值是整数的特征,你反而应该按类别型数据来处理,而不是当成数值型数据。举个典型:邮编。邮编的值确实是整数,可如果你按数值型来喂给模型,就等于要求模型去发现不同邮编之间的数值关系——也就是告诉模型,邮编 20004 的信号强度是邮编 10002 的两倍(或一半)。而按类别型数据来表示邮编,模型才能给每一个邮编单独地分配权重。
编码#
编码(Encoding),指的就是把类别型数据(以及其他类型的数据)转换成模型可以训练的数值向量。
这一步之所以必须做,是因为模型只认浮点数:它没法直接拿 "dog"、"maple" 这样的字符串去训练。所以这一模块接下来要介绍的,就是几种专门针对类别型数据的编码方法。
MLWM: 例如对于文本特征来说,我们并不能够直接将其喂给模型进行训练,而是要通过某种方式将其编码成数值向量。更多关于文本转换成向量的内容,可以参见「词袋模型原理:文本特征表示与机器学习建模」 中的介绍。
关键术语:
- 类别型数据(Categorical data)
- 数值型数据(Numerical data)