使用实体嵌入的结构化数据进行深度学习
嵌入(embedding)的想法来自于NLP(word2vec)
在这篇文章中,我们将讨论机器学习中的两个问题:第一个问题是关于深度学习如何在图像和文本上表现良好,并且我们如何在表格数据中使用它。第二个问题是你在构建机器学习模型时必须问自己的问题:在这个数据集中,我如何处理分类变量?
令人惊讶的是,我们可以用同样的答案来回答两个问题:实体嵌入(entity embeddings)。
在许多方面,深度学习的表现都优于其他机器学习方法:图像识别、音频分类和自然语言处理只是其中的一些例子。这些研究领域都使用所谓的“非结构化数据”,即没有预定义结构的数据。一般来说,这些数据也可以作为一个序列(像素、用户行为、文本)进行组织。在处理非结构化数据时,深度学习已经成为标准。最近的一个问题是,深度学习是否也能在结构化数据上表现最好。结构化数据是以表格形式组织的数据,其中列表示不同的特性,而行代表不同的数据样本。这类似于如何在Excel表中表示数据。目前,结构化数据集的黄金标准是梯度提升树模型(Chen & Guestrin, 2016)。在学术文献中,它们总是表现得最好。最近,深度学习表明,它可以与结构化数据的这些提升树模型的性能相匹配。实体嵌入在这方面起着重要的作用。
结构化和非结构化数据
实体嵌入
在将神经网络与结构化数据进行匹配时,实体嵌入已经被证明是成功的。例如,在Kaggle(大数据竞赛平台)的竞赛中,预测出租车行驶距离的获胜的解决方案使用实体嵌入来处理每一辆车的分类元数据。同样,德国大型超市Rossmann预测商店销售的第三解决方案使用了一种比第一和第二解决方案更复杂的方法。该团队通过使用一个简单的前馈神经网络和实体嵌入来实现这种成功。这包括超过1000个类别的变量,比如store id。
简而言之,嵌入指的是向量的类别表示。让我们来看看它是如何在短句中奏效的:
‘Deep learning is deep’
我们可以用一个向量来表示每个单词,所以“deep”这个词就变成了像是[0.20, 0.82, 0.45, 0.67]这样的变量。在实践中,一个人可以用像1 2 3 1这样的整数替换单词,并使用查找表来查找与每个整数相关的向量。这种做法在自然语言处理中非常常见,并且也被用于包括行为序列的数据。实体嵌入指的是在分类变量上使用这一原则,即一个分类变量的每一个类别都由一个向量表示。让我们快速回顾一下在机器学习中处理分类变量的两种常用方法。
- 独热编码:创建二进制的子特性,如word_deep, word_learning, word_is。这些是属于该数据点的类别为1,其他的则为0。因此,对于“deep”这个词来说,特性word_deep将是1,特性word_learning和word_is等将是0。
- 标签编码:像我们在前面的例子中那样分配整数,所以deep变成1,learning变成2等等。这个方法适用于基于树型结构的方法,但不适用于线性模型,因为它意味着所赋值的顺序。
实体嵌入基本上是将标签编码方法提升到下一个级别,不只是将一个整数赋值给一个类别,而是整个向量。这个向量可以任意大小,必须由研究人员指定。下面列出了3个实体嵌入的优点。
1. 实体嵌入解决了独热编码的缺点。具有多个类别的独热编码变量会导致非常稀疏的向量,这在计算上效率很低,而且很难达到优化。标签编码也解决了这个问题,但是只能被基于树型结构的模型使用。
2. 嵌入式数据提供了不同类别之间距离的信息。使用嵌入的美妙之处是,在神经网络训练过程中,分配给每个类别的向量也被训练。因此,在训练过程的最后,我们会得到一个代表每一个类别的向量。这些经过训练的嵌入式设备可以被可视化,从而为每个类别提供深入的见解。在Rossmann的销售预测任务中,德国各州的可视化嵌入显示了类似的各州的地理位置的集群。尽管这些地理信息都没有提供给模型。
3. 经过训练的嵌入式设备可以在非深度学习模型中被保存和使用。例如,每个月都可以训练分类特性的嵌入,并保存嵌入的特性。这些嵌入可以被用来训练一个随机森林或者一个梯度提升树模型,通过加载被学习的嵌入物来进行分类特性。
选择嵌入的大小
嵌入大小指的是表示每个类别的向量的长度,并且可以为每个类别特性设置。与神经网络中超参数的优化过程类似,对于选择嵌入的大小没有严格的规则。在出租车距离预测任务中,研究人员使用了每个特性为10的嵌入大小。这些特性有非常不同的维度,范围从7(每周的天数)到57106(客户id)。为每个类别选择相同的嵌入大小是一种简单而透明的方法,但可能不是最优的方法。
对于Rossmann商店的销售预测任务,研究人员选择了1到M(类别的数量)-1的值,最大的嵌入大小为10。例如,每周的一天(7个值)的嵌入大小为6,而store id(1115个值)的嵌入大小为10。然而,没有明确的规则来选择1和m-1之间的大小。
Kaggle的前主席和首席科学家Jeremy Howard重建了Rossmann竞争的解决方案,并提出了以下解决方案来选择嵌入尺寸:
# c is the amount of categories per feature
embedding_size = (c+1) // 2
if embedding_size > 50:
embedding_size = 50
可视化嵌入
嵌入的优点是可以将所学到的嵌入进行可视化,以显示哪些类别是相似的。最流行的方法是t-SNE,它是一种用于维数减少的技术,可以很好地利用高维性来可视化数据集。让我们用两个快速的可视化嵌入例子来结束这篇文章。以下是家得宝(美国家居连锁店)产品及其所属类别的可视化嵌入。类似的产品,如烤箱、冰箱和微波炉,彼此非常接近。对于像充电器、电池和钻头这样的产品也是如此。
家得宝产品的嵌入
另一个例子是在这篇文章中提到的Rossmann销售预测任务中,德国各州的状态嵌入。在嵌入中这些相邻的州接近于它们的地理位置。
德国各州嵌入的例子
注:本文为编译作品,转载请注明出处。
- 用户登录安全框架shiro—用户的认证和授权(一)
- 第一道防线__SpringMVC配置拦截器
- Web层框架对网站中所有异常的统一处理
- Spring MVC__自定义日期类型转换器
- 解决在控制层springmvc框架发出的400状态的错误
- 解决springmvc在单纯返回一个字符串对象时所出现的乱码情况(极速版)
- MySQL日志文件之错误日志和慢查询日志详解
- 采用HTML5之"data-"机制自由提供数据
- Spring和SpringMVC父子的容器之道---[上篇]
- 快速完成(图片旋转,查看原图)
- Jsp中格式化时间戳的常用标签
- 反射+自定义注解---实现Excel数据列属性和JavaBean属性的自动映射
- 后台模板管理系统___左侧菜单数据的异步加载
- Shiro眼皮下玩ajax,玩出302 Found
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 微信文章爬虫
- vue 随记(6):构建的艺术
- Centos7发布SpringBoot项目并后台运行
- k8s部署zookeeper集群
- dotnet 使用 SemaphoreSlim 可能的内存泄露
- WPF 绑定继承的样式提示 只能根据带有基类型 IFrameworkInputElement 的目标类型的 Style 样式
- 29.opengl高级光照-视差贴图
- SpringBoot集成Mybatis开启下划线格式的数据自动转换成小驼峰格式
- WPF 列表右键菜单比较符合 MVVM 的命令绑定方法
- Group Sample:一个简单有效的目标检测涨点Trick
- PyTorch版CenterNet数据加载解析
- WPF 使用 HandyControl 给 ListView 添加漂亮的表头效果
- kali2020 忘记密码
- 低比特量化之DoreFa-Net理论与实践
- 不用数组求多个数的最小值