2020李宏毅机器学习笔记-Unsupervised Learning: Introduction

目录

摘要

Introduction(介绍)

Clustering

K-means

HAC

Dimension Reduction

PCA

PCA for 1-D

PCA for n-D

Reconstruction Component

Weakness of PCA

PCA for Pokemon

PCA for MNIST

总结和展望


摘要

本节首先介绍了什么是无监督学习及无监督学习的类别,主要分类两种,一种是化繁为简型,如聚类复杂的input输入,简单的output输出,另一种是无中生有型,没有input x只有output y。接着,讲解了具有的聚类算法,K-means和HAC,K-means主要思想是更新中心点来聚类,而HAC的思想是通过build a tree和选取阈值来实现的。

最后讲解了Dimension Reduction(降维) ,可以简单使用Feature Selection(特征选择)但是有的不能简单使用Feature Selection的方法,引入更好一点的方式,PCA(主成分分析法),详细讲解了PCA的原理数学推导和应用。

 

Introduction(介绍)

无监督学习(Unsupervised Learning)可以分为两种:

  • 化繁为简

    • 聚类(Clustering)
    • 降维(Dimension Reduction)
  • 无中生有(Generation)

对于无监督学习(Unsupervised Learning)来说,我们通常只会拥有(x,y^)中的x或y^,其中:

  • 化繁为简就是把复杂的input变成比较简单的output,比如把一大堆没有打上label的树图片转变为一棵抽象的树,此时training data只有input  x,而没有output y^
  • 无中生有就是随机给function一个数字,它就会生成不同的图像,此时training data没有input x ,而只有output y^

 

Clustering

聚类,顾名思义,就是把相近的样本划分为同一类,比如对下面这些没有标签的image进行分类,手动打上cluster 1、cluster 2、cluster 3的标签,这个分类过程就是化繁为简的过程

一个很critical的问题:我们到底要分几个cluster?

 

K-means

最常用的方法是K-means

 

 

  • 我们有一大堆的unlabeled data {x1,x2,....,xn},我们要把它划分为K个cluster
  • 对每个cluster都要找一个center ci,i属于{ 1,2,.....,K } ,initial的时候可以从training data里随机挑K个object xn 出来作为K个center ci的初始值
  • 遍历所有的object xn ,并判断它属于哪一个cluster,如果xn与第i个cluster的center ci最接近,那它就属于该cluster,我们用来bi=1表示第n个object属于第i个cluster,bi=0表示不属于
  • 更新center:把每个cluster里的所有object取平均值作为新的center值
  • 反复进行以上的操作

HAC

HAC,全称Hierarchical Agglomerative Clustering,层次聚类

假设现在我们有5个样本点,想要做clustering:

  • build a tree:

    整个过程类似建立Huffman Tree,只不过Huffman是依据词频,而HAC是依据相似度建树

    • 对5个样本点两两计算相似度,挑出最相似的一对,比如样本点1和2
    • 将样本点1和2进行merge (可以对两个vector取平均),生成代表这两个样本点的新结点
    • 此时只剩下4个结点,再重复上述步骤进行样本点的合并,直到只剩下一个root结点
  • pick a threshold:

    选取阈值,形象来说就是在构造好的tree上横着切一刀,相连的叶结点属于同一个cluster

    下图中,不同颜色的横线和叶结点上不同颜色的方框对应着切法与cluster的分法

HAC和K-means最大的区别在于如何决定cluster的数量,在K-means里,K的值是要你直接决定的;而在HAC里,你并不需要直接决定分多少cluster,而是去决定这一刀切在树的哪里

 

Dimension Reduction

clustering的缺点是以偏概全,它强迫每个object都要属于某个cluster

但实际上某个object可能拥有多种属性,或者多个cluster的特征,如果把它强制归为某个cluster,就会失去很多信息;

我们应该用一个vector来描述该object,这个vector的每一维都代表object的某种属性,这种做法就叫做Distributed Representation,或者说,Dimension Reduction

如果原先的object是high dimension的,比如image,那现在用它的属性来描述自身,就可以使之从高维空间转变为低维空间,

这就是所谓的降维(Dimension Reduction)

接下来我们从另一个角度来看为什么Dimension Reduction可能是有用的

假设data为下图左侧中的3D螺旋式分布,你会发现用3D的空间来描述这些data其实是很浪费的,

因为我们完全可以把这个卷摊平,此时只需要用2D的空间就可以描述这个3D的信息。

如果以MNIST(手写数字集)为例,每一张image都是28*28的dimension,但我们反过来想,大多数28*28 dimension的vector转成image,

看起来都不会像是一个数字,所以描述数字所需要的dimension可能远比28*28要来得少。

举一个极端的例子,下面这几张表示“3”的image,我们完全可以用中间这张image旋转角度来描述,

也就是说,我们只需要用这一个dimension就可以描述原先28*28 dimension的图像。

你只要抓住角度的变化就可以知道28维空间中的变化,这里的28维pixel就是之前提到的樊一翁的胡子,而1维的角度则是他的头,也就是去芜存菁,化繁为简的思想

How to do Dimension Reduction?

在Dimension Reduction里,我们要找一个function,这个function的input是原始的x,output是经过降维之后的z

最简单的方法是Feature Selection,即直接从原有的dimension里拿掉一些直观上就对结果没有影响的dimension,就做到了降维,

比如下图中从x1,x2两个维度中直接拿掉x1;但这个方法不总是有用,因为很多情况下任何一个dimension其实都不能被拿掉,就像下图中的螺旋卷

 

PCA

另一个常见的方法叫做PCA(Principe Component Analysis)

PCA认为降维就是一个很简单的linear function,它的input x和output z之间是linear transform,即z=Wx,PCA要做的,就是根据一大堆的x把W给找出来(现在还不知道z长什么样子)

PCA for 1-D

为了简化问题,这里我们假设z是1维的vector,也就是把x投影到一维空间,此时w是一个row vector

z1=w1x,其中w1表示w的第一个row vector,假设w1的长度为1,此时z1就是x在w1方向上的投影

那我们到底要找什么样的w1呢?

假设我们现在已有的宝可梦样本点分布如下,横坐标代表宝可梦的攻击力,纵坐标代表防御力,我们的任务是把这个二维分布投影到一维空间上

我们希望选这样一个w1,它使得x经过投影之后得到的z1分布越大越好,也就是说,经过这个投影后,不同样本点之间的区别,应该仍然是可以被看得出来的,即:

  • 我们希望找一个projection的方向,它可以让projection后的variance越大越好
  • 我们不希望projection使这些data point通通挤在一起,导致点与点之间的奇异度消失

下图给出了所有样本点在两个不同的方向上投影之后的variance比较情况

 

PCA for n-D

当然我们不可能只投影到一维空间,我们还可以投影到更高维的空间

对z=Wx来说:

  • z1=w1x,表示x在w1方向上的投影
  • z2=w2x,表示x在w2方向上的投影
  • ......

z1,z2,....串起来就得到z,而w1,w2分别是的第1,2,...个row,需要注意的是,这里的wi必须相互正交,此时W是正交矩阵(orthogonal matrix),

如果不加以约束,则找到的实际上是相同的值

Reconstruction Component

假设我们现在考虑的是手写数字识别,这些数字是由一些类似于笔画的basic component组成的,本质上就是一个vector,

记做u1,u2,....,以MNIST为例,不同的笔画都是一个28×28的vector,把某几个vector加起来,就组成了一个28×28的digit

写成表达式就是:

其中x代表某张digit image中的pixel,它等于k个component的加权和加上所有image的平均值。

比如7就是x=u1+u3+u5,我们可以用来[ c1 c2 c3 .... ck]T 表示一张digit image,如果component的数目k远比pixel的数目要小,那这个描述就是比较有效的

 

实际上目前我们并不知道u1~uk具体的值,因此我们要找这样k个vector,使得与越接近越好:

而用未知component来描述的这部分内容,叫做Reconstruction error,即

接下来我们就要去找k个vector  ui 去minimize这个error:

回顾PCA,z=Wx,实际上我们通过PCA最终解得{w1,w2,....wk }的就是使reconstruction error最小化的{w1,w2,....wk },简单证明如下:

  • 我们将所有的都用下图中的矩阵相乘来表示,我们的目标是使等号两侧矩阵之间的差距越小越好

 

 

Weakness of PCA

PCA有很明显的弱点:

  • 它是unsupervised的,如果我们要将下图绿色的点投影到一维空间上,PCA给出的从左上到右下的划分很有可能使原本属于蓝色和橙色的两个class的点被merge在一起

    而LDA则是考虑了labeled data之后进行降维的一种方式,但属于supervised

  • 它是linear的,对于下图中的彩色曲面,我们期望把它平铺拉直进行降维,但这是一个non-linear的投影转换,PCA无法做到这件事情,PCA只能做到把这个曲面打扁压在平面上,类似下图,而无法把它拉开

    对类似曲面空间的降维投影,需要用到non-linear transformation

 

PCA for Pokemon

这里举一个实际应用的例子,用PCA来分析宝可梦的数据

假设总共有800只宝可梦,每只都是一个六维度的样本点,即vector={HP, Atk, Def, Sp Atk, Sp Def, Speed},接下来的问题是,我们要投影到多少维的空间上?

如果做可视化分析的话,投影到二维或三维平面可以方便人眼观察

实际上,宝可梦的cov(x)是6维,最多可以投影到6维空间,我们可以先找出6个特征向量和对应的特征值λi,

其中λi表示第i个投影维度的variance有多大(即在第i个维度的投影上点的集中程度有多大),然后我们就可以计算出每个λi的比例

从上图的ratio可以看出λ5、λ6所占比例不高,即第5和第6个principle component(可以理解为维度)所发挥的作用是比较小的,

用这两个dimension做投影所得到的variance很小,投影在这两个方向上的点比较集中,意味着这两个维度表示的是宝可梦的共性,

无法对区分宝可梦的特性做出太大的贡献,所以我们只需要利用前4个principle component即可。

注意到新的维度本质上就是旧的维度的加权矢量和,下图给出了前4个维度的加权情况,从PC1到PC4这4个principle component都是6维度加权的vector,

它们都可以被认为是某种组件,大多数的宝可梦都可以由这4种组件拼接而成,也就是用这4个6维的vector做linear combination的结果。

我们来仔细分析一下这些组件:

  • 对第一个vector PC1来说,每个值都是正的,因此这个组件在某种程度上代表了宝可梦的强度

  • 对第二个vector PC2来说,防御力Def很大而速度Speed很小,这个组件可以增加宝可梦的防御力但同时会牺牲一部分的速度

  • 如果将宝可梦仅仅投影到PC1和PC2这两个维度上,则降维后的二维可视化图像如下图所示:

    从该图中也可以得到一些信息:

    • 在PC2维度上特别大的那个样本点刚好对应着普普(海龟),确实是防御力且速度慢的宝可梦
    • 在PC1维度上特别大的那三个样本点则对应着盖欧卡、超梦等综合实力很强的宝可梦

PCA for MNIST

再次回到手写数字识别的问题上来,这个时候我们就可以熟练地把一张数字图像用多个组件(维度)表示出来了:

digit image = a1w1 + a2w2 + .......

这里的wi就表示降维后的其中一个维度,同时也是一个组件,它是由原先28×28维进行加权求和的结果,

因此wi也是一张28×28的图像,下图列出了通过PCA得到的前30个组件的形状:

What happens to PCA

在对MNIST和Face的PCA结果展示的时候,你可能会注意到我们找到的组件好像并不算是组件,比如MNIST找到的几乎是完整的数字雏形,

而Face找到的也几乎是完整的人脸雏形,但我们预期的组件不应该是类似于横折撇捺,眼睛鼻子眉毛这些吗?

如果你仔细思考了PCA的特性,就会发现得到这个结果是可能的

digit image = a1w1 + a2w2 + .......

注意到linear combination的weight  ai 可以是正的也可以是负的,因此我们可以通过把组件进行相加或相减来获得目标图像,

这会导致你找出来的component不是基础的组件,但是通过这些组件的加加减减肯定可以获得基础的组件元素

 

总结和展望

本节学习到了,无监督学习的种类,化繁为简型,包括聚类等,学习到了具体的聚类算法,K-means和HAC。HAC和K-means最大的区别在于如何决定cluster的数量,在K-means里,K的值是要你直接决定的;而在HAC里,你并不需要直接决定分多少cluster,而是去决定这一刀切在树的哪里。

clustering的缺点是以偏概全,它强迫每个object都要属于某个cluster,我们应该用一个vector来描述该object,这个vector的每一维都代表object的某种属性,但有时候我们仅需要少量维度就可以表示是一个object。所以我们需要Dimension Reduction,我们可以使用feature selection和PCA等进行降维。

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值