一个原理很简单,操作很简单,但是应用起来费点劲的算法。
Autoencoder,非监督学习算法的一种。非监督学习(Unsupervised Learning)是机器自己学习的模式。上篇 “机器学习的Hello world”,是监督学习(Supervised Learning)的一种。
监督与非监督学习的差别很简单,就是是否会有一个明确的标签。
例如,“机器学习的Hello world”中的数字图片识别,最终数据库会告诉你这个图片对应的数字分类。然后建立神经网络之后,通过训练及学习 将神经网络预测结果调整至与已知的标签对应。监督学习,学的就是那个明确的标签
但是现实社会中,大部分数据或者问题,是没有明确的标签的或者说标签样本量不够大。这就属于非监督学习的范畴了。让机器自己去发现规律,找到方法。
面对的问题
那么什么是autoencoder呢?
这个算法我在4月份就接触到了,但是直到现在也不知道它的英文名字。不过,名字并不重要,重要的是解决问题的方式,原理及应用场景。
那么,今天所要提到的就是Autoencoder在客户分层场景上的应用。一般的客户分层,可以分为人口特征和地理特征上的分层。比如,你的目标客户是北京 20~30岁的女性。但是传统的客户分层方法有自己的局限性,其中一个就是仅对客户的几个特征进行分类。比如性别,年龄、地理。
但是,当今社会,有大量的数据,个人的特征值也超出了传统人口特征、地理特征的范围。比如在社交平台上活跃度、旅行次数、月消费数量、日均上网时间、某个商品的消费频率等等。
那么,我们面对的问题,简单总结下就是,当我们拿到用户600个特征时,我们怎么对客户进行分层呢? 如何考虑600个特征的同同时,对用户进行分层呢?
算法原理
Autoencoder 在此问题上,能帮上一些忙。那么autoencoder是怎么工作的呢?
假设我们目前的数据是60000*600 ,60000个用户 每个用户600个特征;
同样Autoencoder是一种特殊的神经网络架构,其也要包含输入层,隐藏层、输出层。
输入层:600个输入值
隐藏层: 暂略
输出层:600个输出值
首先,Autoencoder的第一个特征是输入层与输出层相同。这看起来很奇怪,因为输入60000*600的训练数据,经历神经网络运算一通骚操作之后,输出的结果要和输入一样。 感觉是白费功夫,但是这也是这个算法的核心。
其次,下面是一个Autoencoder 结构简单的例子,大家能看出来,其实这是个缩小再放大的过程。
当数据经历整个神经网络,就是一个“压缩”再“解压”的过程。想象下,当把一个电影压缩,再解压。压缩解压之后,电影还是那个电影。 但是压缩后的“电影”其实是原电影的另一种存在形式。即,压缩后的电影也继承了原电影的特征值。
上图可以看出,神经网络将6个(蓝色)特征值 压缩成 2个(红色框框)神经元,再解压成6个蓝色。 当训练完之后,我们只用神经网络的前半部分,输入6个特征值,输出2个神经元预测结果。
换一个角度,原来的客户有600个数据特征,即600维度特征。Autoencoder就是用上面那个漏斗形的网络,将600个特征值降维到 二维。
即,将600个客户特征浓缩到 两维 特征。其实我并不清楚浓缩后的特征代表着什么。但是重要的是浓缩后的特征的数据的趋向性。
比如下图,每个点是一个客户。大家能发现明显的聚合趋势,能发现明显的极端值。这样就完成了第一步的客户特征值降维
总结下原理,其实这个算法背后的逻辑很直接也很好理解。就是通过将原来600个特征压缩再解压后,得出的还是自己。 所以,可以推断出压缩后的状态其实代表着自己本身的数据特征。
这个算法的实际应用及代码展示将在下篇介绍。~
领取专属 10元无门槛券
私享最新 技术干货