一、概述
无监督学习可以认为主要包括两种,一种是化繁为简(比如聚类和降维)和无中生有(比如生成)。化繁为简这种方式只有模型的输入,而无中生有这种方式只有模型的输出:
无监督学习
在本文中主要介绍一些聚类和降维的方法。
二、聚类
- K-means
K-means是一种无监督的聚类方法,通常我们有一些数据,需要分成多个类。这里有一个问题就是事先需要确定要聚成多少个类,类的个数不能太多也不能太少,极端地将数据聚成样本个数个类或者一个类都相当于没有进行聚类:
Clustering
- Hierarchical Agglomerative Clustering(HAC)
HAC这种聚类方法首先根据样本相似度构建一棵二叉树,然后选择一个阈值来进行聚类。
如下图,首先在计算所有的样本pair的相似度,然后将相似度最高的两个样本合并起来(合并的方法可以是计算平均值),然后重复上述过程直至最终构建出整棵二叉树:
建树
构建出二叉树以后选择一个阈值,类似于在树上切一刀,下图展示了不同的阈值所对应的聚类结果:
聚类
三、降维
- 概述
在聚类的方法中每个样本必须被划分为一个类,而有时一个样本既可以属于这一类,也可能属于另一类,这种情况下我们需要样本的一个分布的表示,使用降维的方法可以做到这一点。
我们可以从另一个角度来考虑降维这种方法可能是有用的。如下图左边的3维的数据实际上可以使用2维的数据来表示(将左图螺旋状数据展平):
example
举另外一个例子,在MNIST数据集中每个数字用的矩阵来表示,但是大多数的图片都不是数字,也就是说使用的矩阵是冗余的,随机初始化一张图片很难生成一个数字:
MNIST
在下图中的不同的3,事实上不需要使用的矩阵的来表示,只需要记录其旋转的角度即可:
不同的3
上述例子说明将高维的样本降维到低维空间是有实际意义的。
如下图,降维的主要流程也就是找一个function来讲高维样本降维到低维样本:
降维
- Feature Selection
降维的最简单的方法是Feature Selection。这种方法就是简单地删除某些维度,比如下图中可以把这个维度拿掉:
Feature Selection
有时数据的任何一维都很重要,这时候Feature Selection的方法就不能用了,比如下面这种情况:
Feature Selection
- Principal Component Analysis
- 介绍
投影
以下图为例,如果要选择一个方向进行投影,我们需要选择投影后方差最大的方向(红色箭头的方向)进行投影,这样可以保留更多的数据的特征,也就是说我们希望的方差越大越好:
数据
下面对进行求解:
使用拉格朗日乘子法来求解上述约束优化问题,定义拉格朗日函数:
- 去相关性
从最小重构代价和SVD角度看PCA
数字的构成
将所有的样本集合起来就可以写成矩阵相乘的形式:
矩阵形式
奇异值分解的形式
另一篇有关PCA推导的文章:主成分分析|机器学习推导系列(五) 。
- PCA与AutoEncoder
AutoEncoder
这个神经网络训练的方式就是使得网络的输入越接近越好,使用梯度下降来求解。需要注意的是,PCA的方法是可以通过奇异值分解或者拉格朗日乘子法求得解析解的,所得解是一些彼此正交的向量,而神经网络使用梯度下降的方法求得的解一般不会正好是解析解,因此重构损失一般会比解析解对应的重构损失大一些。
- PCA的局限性
首先PCA是无监督的,举例来说在下图中对数据进行PCA降维的话将会把数据投影到箭头所指的方向上:
PCA
而加入这些数据是两个类别,那么两个类别的数据就会混合到一起。对于多类别的数据,可以使用另一种降维方法,叫做线性判别分析(Linear Discriminant Analysis,LDA),参考链接:线性分类|机器学习推导系列(四)。这种方法会按照下图箭头方向进行投影:
LDA
另外一点是PCA是线性的,并非任何数据分布都能使用线性方法来处理,比如下图数据:
数据
这种类型的数据最好能够将其展开,如果使用PCA则会得到以下结果:
PCA
四、应用
- 使用PCA分析宝可梦数据
假设一只宝可梦的数据样本包含六个维度,现在要将所有的数据进行PCA的降维,降到多少个维度可以通过比较数据的方差矩阵的特征值来得到,首先计算每个特征值的占比:
得到结果如下表:
占比
选择占比较大的前几个即可。降维后得到的主成分如下图:
主成分
- 对图片进行PCA
下面展示了分别对数字和人脸图片进行PCA的结果,都是提取了30个主成分:
数字
人脸
这里的数字的主成分看起来不像是笔画,人脸的主成分看起来也是完整的人脸,这是因为将这些主成分进行线性组合时的权重可能是正的也可能是负的。如果想让得到的主成分是笔画或者五官这样的图片,可以使用非负矩阵分解(Non-negative Matrix Factorization,NMF)这种方法,这种方法会限制权重和主成分都是非负的,最终得到的效果如下:
数字
人脸
- 矩阵分解
下图展示了A、B、C、D、E五个阿宅购买公仔的情况:
数据
下面使用矩阵分解(Matrix Factorization)来解释上面的数据。假设每个阿宅有一个隐向量来表示他对某种属性公仔的喜好(用来表示),每个公仔也有一个隐向量来表示该公仔的属性(用来表示),这里假设这些隐向量维度是2,喜好隐向量与属性隐向量的点积代表了这个阿宅会购买这个公仔的数量:
隐向量
假设数据矩阵为,是由隐变量的点积组成的:
数据
可以使用SVD的方式来求解:
SVD
如果中某些位置的数据不知道,如下图:
缺失数据
可以使用梯度下降的方法来求解隐变量,损失函数如下:
根据结果可以分析隐变量代表的含义,比如通过下图结果可以认为隐变量第一维是天然呆属性,第二维是傲娇属性:
结果
可以使用解得的结果来填充数据:
填充数据
这个模型还可以更精致一点,比如我们可以考虑阿宅或者公仔的一些其他属性,现在做以下变动:
也可以为上式添加正则项。
上述技术通常会被用在推荐系统中。
- 使用矩阵分析来做话题分析
将上述矩阵分析的技术用在话题分析上的话,就叫做潜在语义分析(Latent Semantic Analysis,LSA)。举例来说,下表表示了某些词在语料库的每个文档中的出现情况,表中的数据可以是词的tf(term frequency),也可以是词的tf-idf:
数据
将上述数据矩阵做分解,得到的隐变量的每一维度就代表一个话题,该维度的数值就表明该文章倾向于该话题的程度。