首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

再来说说无监督学习

在上一篇笔记里我们简单地学习了监督学习的几种算法模型,今天就来学习一下无监督学习的基本概念和相应的几种算法模型。

无监督学习(Unsupervised Learning)是和监督学习相对的另一种主流机器学习的方法,我们知道监督学习解决的是“分类”和“回归”问题,而无监督学习解决的主要是“聚类(Clustering)”问题。

监督学习通过对数据进行标注来让机器学习到比如小曹多重多高就是胖纸,或者用身高体重等数据来计算得到小曹的BMI系数;而无监督学习则没有任何的数据标注(超过多高算高,超过多重算胖),只有数据本身。比如有一大群人,知道他们的身高体重,但是我们不告诉机器“胖”和“瘦”的评判标准,聚类就是让机器根据数据间的相似度把这些人分成几个类别。那它是怎么实现的呢?怎么才能判断哪些数据属于一类呢?

这是几种常见的主要用于无监督学习的算法。

K均值(K-Means)算法

自编码器(Auto-Encoder)

主成分分析(PrincipalComponent Analysis)

K均值算法有这么几步:

1. 随机的选取K个中心点,代表K个类别

2. 计算N个样本点和K个中心点之间的欧氏距离

3. 将每个样本点划分到最近的(欧氏距离最小的)中心点类别中——迭代1

4. 计算每个类别中样本点的均值,得到K个均值,将K个均值作为新的中心点——迭代2

5. 重复234

6. 得到收敛后的K个中心点(中心点不再变化)——迭代4

上面提到的欧氏距离(Euclidean Distance),又叫欧几里得距离,表示欧几里得空间中两点间的距离。我们初中学过的坐标系,就是二维的欧几里得空间,欧氏距离就是两点间的距离,三维同理,多维空间的计算方式和三维二维相同。

还是举栗子吧。

我们现在有三组身高体重数据180kg、180cm,120kg、160cm和90kg、140cm,提问:这三个人里,哪两个人的身材比较相近呢?

这三组数据可以表示为A(180,180),B(120,160)和C(90,140),这就是我们很熟悉的平面直角坐标系里的三个点,他们之间的距离大家都知道算。

从结果可以看到Bc间的距离最小,也就是Bc的身材最相似。我们再增加一个维度,腰围,分别是100cm、120cm和140cm(随便编的不要当真),那现在这三组数据可以表示为A(180,180,100),B(120,160,120)和C(90,140,140),这就变成了我们高中学过的空间直角坐标系里的三个点,要计算它们之间的距离也很简单。

现在还是Bc的身材最相似,如果我们增加N个维度,数据就可以用(X₁,X₂,X₃,…..,Xn)和(Y₁,Y₂,Y₃,…..,Yn)来表示,他们之间的距离就是

K均值算法里样本点到中心点的距离就是这么计算的,这个用空间点来表示数据的思想在机器学习领域是非常常见和重要的,以后还会经常见到。值得注意的是,虽然K近邻算法和K均值算法没有什么关系,但是它们的思想有想通之处,并且原始模型实际使用起来计算起来都比较慢。

自编码器(Auto-encoder)(其实相当于一个神经网络,但这里不用神经网络的结构来解读)做的事情很有意思,它的基本思想就是对输入(input)编码(encode)后得到一个隐含的表征再解码(decode)并输出(output),这么看起来不是在绕圈圈吗

如果说我们的自编码器只是为了得到一个和输入一模一样的输出,那我们的行为确实没什么用,但是细心的胖友,你们觉得这张图里什么是关键呢?

对了,是中间的隐含表征(latent representation)!

自编码器的两个主要应用是降噪(denoising)稀疏化数据(sparse)

什么叫降噪和降维呢?让我们用这张图来理解。图中有三层,输入、隐含和输出层,每一层的么一个圈圈代表一个特征。输入层经过编码变成了中间的隐含层,隐含层解码后得到后面的输出层。可以看到,隐含层只有输入层的一半,原本的6个特征变成了3个特征,这意味着什么?

又到了举栗子的时间。

如果要来表示小明的身材,输入的六个特征分别为“肉多”“体脂率高”“质量大”“个子不高”“总是心情好”“喜欢笑”而隐含层的三个特征为“肉多”“体脂率高”“个子不高”,这个自编码器就是用来降噪的。噪音(noise)指的是影响我们算法模型的不相关因素,降噪呢,就是用特定的方法去掉这些不相关的因素。

如果要来表示小明的主要特征,输入的六个特征还是“肉多”“体脂率高”“质量大”“个子不高”“心情好”“喜欢看剧”而隐含层的特征变成了“胖”“矮”和“开朗”,这个自编码器就是稀疏自编码器。稀疏化数据就是指将密集的浅层含义的数据(比如说肉多这样的外在表现)表示为稀疏的更抽象的数据(将外在表现提炼为总结性的特征比如胖)。

完成上述两个任务都需要构建合适的损失函数(loss function)(了解一下)

(后面的依据个人兴趣选择是否阅读)

隐含层的层数是可以增加的,每一层都可以作为我们需要的特征,多层的结构能够让自编码器对特征的分析更加准确和稳定,而如果这个层数再增加一些(很多很多很多层):

(省略了后面的解码步骤)

它就是堆叠/卷积自编码器(Convolution autoencoder),可以说是一种卷积神经网络(Convolutional neural network,CNN),更多的关于神经网络的知识会在后面详细说。

而回到最开始的图,我们刚才一直在说的是隐含层的意义和变化,那最后的输出一点用都没有吗?

这里不得不提一下生成式对抗网络(Generative adversarialnetworks,GAN)

生成式对抗网络的精髓就是两个网络,一个网络生成图片,一个网络辨别图片是不是真实的,当生成图片的网络能够“欺骗”识别图片的网络的时候,我们就得到了一个能够生成足够真实图片的网络。

这是一个很有趣的模型,机器根据已有的实物创造了实际中不存在的事物,下图是从真实图片转化为生成图片的过程。

这个思想能够实现一些很神奇的事情,比如将文字变成图像,用对抗网络来构造药品和疾病的对抗等(https://www.jiqizhixin.com/articles/2017-08-23-6)

对抗自编码器(Adversarial Autoencoder,AAE)“使用了最近提出的生成对抗网络(GAN),通过任意先验分布与VAE隐藏代码向量的聚合后验匹配,来实现变分推理。”

简单地说,就是它把GAN和自编码器组合成了一个具有生成能力的模型,也就是对抗自编码器。AAE能够在监督、无监督的条件下都展现出不错的识别和生成能力。由于相关资料和文献不算很多,我也没有很清楚它的具体应用场景,这里就不做过多的解读了,欢迎大家给出一些指点。

主成分分析(PrincipalComponent Analysis)是一种数据降维的方法,我们可以简单地把数据降维和稀疏化数据当成一个意思来理解(还是有区别的)。

从数学的视角来看,二维平面中的主成分分析就是用最大方差法将坐标系里分布的点投影到同一条线上(一维的),三维空间中的主成分分析就是同理将空间中的分布点投影到同一个(超)平面上。

最大方差法不做过多解释(要摆公式),但我们知道方差是表示一组数据间差异大小的,方差最大就保证了数据的间隔足够大,这也就意味着数据在降维后不容易发生重叠。比如上面的图,我们会用F₁而不是F₂。

其实在实际应用中主成分分析主要是数学方法,但是为了帮助理解还是打个比方。

上文中提到的身材的特征的稀疏化表达其实就可以理解为主成分分析顾名思义,“把主要成分提取出来分析”,就像我们在讨论一个国家经济实力的时候不会讨论这个国家一年生产多少石油,出口多少商品,进口多少原材料,国民总共又拿了多少工资。我们会用国民生产总值和国民人均生产总值来代表上面所说的哪些零散的数据,这就是主成分分析。

转载请联系作者

图片来源:word公式截图,google图片

参考资料

https://my.oschina.net/keyven/blog/518670

K均值算法概念及其代码实现

https://en.wikipedia.org/wiki/Euclidean_distance

欧几里得距离

https://feisky.xyz/machine-learning/clustering/k-means/

K-means算法实现

http://peteryuan.net/autoencoder-stacked/

自编码器与堆叠自编码器简述

对抗自编码器

https://zhuanlan.zhihu.com/p/26751367

从自编码器到生成对抗网络:一文纵览无监督学习研究现状

https://kingsleyhsu.github.io/2017/10/10/AAE/

翻译:AAE 对抗自编码(一)

https://www.jiqizhixin.com/articles/2017-08-23-6

生成对抗网络原理与应用:GAN如何使生活更美好

https://cethik.vip/2017/01/11/deepGan/

对抗生成网络详解

主成分分析(PCA)-最大方差解释

https://www.cnblogs.com/fuleying/p/4458439.html

主成分分析(principal components analysis, PCA)——无监督学习

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180704G02L0500?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券