无监督学习算法
- 本文首发自公众号:RAIS,点击直接关注。
前言
本系列文章为 《Deep Learning》 读书笔记,可以参看原书一起阅读,效果更佳。
无监督学习算法
就是无监督的一种学习方法,太抽象,有一种定义(这种定义其实不够准确,无监督和监督之间界限模糊)是说如果训练集有标签的就是有监督学习,无标签的就是无监督,没有标签,意味着不知道结果。有监督学习算法可以知道一堆图片它们是狗的照片,无监督学习算法只能知道它们是一类,但这一类叫什么就不知道了。
无监督学习算法没有标签,因此训练的也往往是没有明确目标的,对于结果也可能不好说是好是坏,在本质上来说,无监督学习算法是一种概率统计的方法,在数据中可以发现一些潜在的结构。这么说还是不够清楚,举几个例子说明无监督学习方法有什么作用:
用户分类:马云说每天晚上有五十万的人会浏览淘宝,什么也不买,他也不知道为什么,那既然有如此大的流量,不能浪费,进行精准推荐,会不会效果很好呢?在庞大的用户群中,找到和你很相似的用户,也说不出来哪里相识,反正就是相似,他买过的东西你还没买过,推荐给你,你会不会就冲动了呢?
发现异常:对于网站来说,防止 DDOS 攻击就需要在巨大的请求中找到那些非法请求(广义上的非法,并非单纯指参数非法),进行丢弃不进行服务,这可能就需要无监督学习算法,找到那些和正常用户不一样的请求,也说不出来哪里不一样,反正就是不一样,直接抛弃请求,不进行服务,那攻击带来的影响就会降低一些。
表示
表示是深度学习的核心主题之一,一个经典的无监督学习任务是找到数据的最佳表示,去除那些无关紧要不影响大局或影响因子极小的因素,找到数据最核心最关键的简单表示,这里的简单表示包括低纬表示、稀疏表示和独立表示。
- 低纬表示:将 x 中的信息尽可能压缩在一个较小的表示中,通常会产生比原始的高维数据具有较小或较弱依赖关系的元素;
- 稀疏表示:将数据集嵌入到输入项大多数为零的表示中,通常会用于需要增加维数的情况,使得大部分为零的表示不会丢失很多信息;
- 独立表示:试图分开数据分布中变化的来源,使得表示的维度是相互独立的。
主成分分析
主成分分析(PAC)是经典的降维算法,是一种无监督学习。主成分顾名思义,主要的成分,与之相对应的就是非主要的成分。举个例子,矩阵中有些向量可以用其他的某些向量线性表示,线性相关,那这个向量有一点多余了,去除后不影响原来的空间,基于这样的思想,我们可以考虑将矩阵压缩,在减小矩阵维数的同时尽可能保留原来的信息。
对于方阵的特征分解,就是线性代数中的方法:
其中 X 是 m*m 的矩阵,X 对应的协方差矩阵为:
PAC 通过线性变换找到一个 Var(x) 是对角矩阵的线性表示:z=\(W^TX\)
对于任意矩阵,奇异值分解(SVD)是最接近于特征分解的,同样这里也是:
其中 X 是 m*n 的矩阵;U 是 m*m 的方阵,其中的正交向量称作左奇异向量;∑ 是 m*n 矩阵,除对角线元素外都是零,对角线上的元素称为奇异值;W 是 n*n 的矩阵,其中的正交向量称为右奇异向量。具体的求法步骤为:
- U:求 \(XX^T\) 的特征值和特征向量,再单位化;
- W:求 \(X^TX\) 的特征值和特征向量,再单位化;
- ∑:将 \(XX^T\) 的特征值求平方根。
以 W 作为特征向量基,可以得到原来的特征向量方程,\(U^TU=I, W^TW=I\):
X 的方差:
z 的协方差满足对角的要求:
K-maeans 聚类(K-均值聚类)
聚类与分类是不同的,分类的类别是已知的,需要根据训练集进行训练和学习,找到不同的特征,再喂入测试集输出结果;聚类是事先不知道数据会被分成几类,通过聚类分析将数据分成几个群体。具体方法:
- 随机将找到 K 个特殊数据点;
- 其他的数据点根据距离分成 K 类;
- 然后在 K 类中每个类别中重新推选 K 个特殊的数据点;
- 如果新选定的数据点与之前选定的数据点距离较大,则根据新的数据点重复步骤 2 之后的步骤;
- 如果新的数据点和原来的数据点距离在一定阈值内,算法结束。
K-means 聚类优点是快,简单,对于数据点属于一团一团的数据效果很好,但是比较严重的问题是有可能根据初始值的不同分类效果不同且不好,比如汽车图片分类,有可能按照是卡车还是小轿车分类,也有可能是根据红色还是白色分类甚至有些是错误的,这一点需要注意,在不合适的地方此方法可能达不到目标。
总结
本文介绍了主成分分析和 K-means 聚类两种非监督学习方法。