Coursera-吴恩达-机器学习-(第8周笔记)无监督学习和维度约简

此系列为 Coursera 网站Andrew Ng机器学习课程个人学习笔记(仅供参考)
课程网址:https://www.coursera.org/learn/machine-learning

Week 8 —— K-means and PCA

目录

一聚类算法 clutering

1-1 聚类算法简介

无监督学习:我们面对的是一组无标记的训练数据, 数据之间, 不具任何相关联的标记。如图:
这里写图片描述
我们得到的数据 看起来像这样:一个数据集, 一堆数据点,但没有任何标记以供参考。所以从训练数据中, 我们只能看到 x 1、 x 2… 等等… 到 x(m) 没有任何标记 y 供参考。

就此数据而言, 其中一种可能的结构 是 所有的数据 可以大致地划分成 两个类或组。 因此,像我介绍的 这种划分组的算法, 称为
聚类算法。 这是我们第一种 无监督学习算法。

记住,聚类算法clutering只是无监督学习的一种,不是所有的无监督学习都是聚类算法

1-2 K-means

K-means也是聚类算法中最简单的一种。但是里面包含的思想却是不一般。

K-means算法是将样本聚类成k个簇(cluster),具体算法描述如下:
K均值是一个迭代方法:

1.簇分配
2.移动聚类中心

下图展示了对n个样本点进行K-means聚类的效果,这里k取2。
这里写图片描述

簇分配 :

在K均值算法的每次循环中,第一步是要进行簇分配,这就是说,我要遍历所有的样本 ,就是图上所有的绿色的点 ,然后依据 每一个点 是更接近红色的这个中心 还是蓝色的这个中心,来将每个数据点分配到两个不同的聚类中心中。
具体来讲 ,指的是对数据集中的所有点 ,依据他们更接近红色这个中心 ,还是蓝色这个中心 进行染色 ,染色之后的结果如图c所示

移动聚类中心:

我们将两个聚类中心,也就是说红色的叉和蓝色的叉移动到和它一样颜色的那堆点的均值处,那么我们要做的是找出所有红色的点计算出它们的均值,就是所有红色的点 平均下来的位置。然后我们就把红色点的聚类中心移动到蓝色的点也是这样 ,找出所有蓝色的点 计算它们的均值, 把蓝色的叉放到那里。将按照图上所示这么移动

最终,当算法收敛,即聚类中心不再变化时,聚类完成
这里写图片描述

1-2-1 K-means的目标函数

在大多数我们已经学到的 监督学习算法中。 算法都有一个优化目标函数 或者某个代价函数(又叫:畸变函数)需要通过算法进行最小化 。

事实上 K均值也有 一个优化目标函数或者 需要最小化的代价函数。
这里写图片描述
这里写图片描述

注意,这个值只会随着迭代下降,不会上升。

1-2-2 随机初始化

这一节我们讨论: 如何避开局部最优来构建K均值聚类方法 。
由于初始化聚类中心的不同,这就可能导致K-Means算法会产生局部最优解。

有几种不同的方法 可以用来随机 初始化聚类中心 ,但是 事实证明, 有一种方法比其他 大多数方法 更加被推荐。
这里写图片描述
可以避免 可能局部,获得全局最优的结果 。

为了避免因为初始化导致的局部最优问题,我们可以选择

随机选择样本点
多次初始化聚类中心,然后计算K-Means的代价函数,根据失真代价函数的大小选择最优解。

1-2-3选择类别数

讨论一下 K-均值聚类的最后一个细节 :我想选择聚类数目的更好方法。 或者说是如何去选择 参数大写K的值 。

说实话 这个问题上没有一个 非常标准的解答 、或者能自动解决它的方法。

目前用来决定聚类数目的 最常用的方法 ,仍然是通过看可视化的图, 或者看聚类算法的输出结果 ,或者其他一些东西来手动地决定聚类的数目。

下图是当K的取值从2到9时,聚类效果和类簇指标的效果图:
这里写图片描述
这里写图片描述

上图是K取值从2到9时的聚类效果,下图是K取值从2到9时的类簇指标的变化曲线,此处我选择类簇指标是K个类簇的平均质心距离的加权平均值。从上图中可以明显看到,当K取值5时,类簇指标的下降趋势最快,所以K的正确取值应该是5。

1.肘部法则
这里写图片描述

通过失真代价函数关于K大小的函数曲线,代价函数会醉着K的增大逐渐减小,直至趋于稳定,由此我们可以判断,当拐角的时候是最适合的K大小,但是实际情况中,往往我们无法得到一个明显的拐点用于判断(例如右边的图)

2.根据应用场景需求设置
这里写图片描述

二 维数约简

在实际工作中,数据的维度通常是很大的(100+)。那么数据维度约简(data dimensionality reduction)是很有必要的。

举一个例子:3维降成2维:
这里写图片描述
这里写图片描述

三 PCA(Principal Component Analysis)

对于降维问题来说 目前 最流行 最常用的算法是 主成分分析法 (Principal Componet Analysis, PCA)

3-1 PCA是做什么的

PCA是寻找到一个低维的平面 对数据进行投影 ,以便 最小化投影误差的平方( 最小化每个点 与投影后的对应点之间的距离的平方值 )
另外, 在应用PCA之前通常的做法是先进行均值归一化和特征规范化 ,使得特征x1和x2均值为0, 数值在可比较的范围之内。
这里写图片描述

下面介绍 线性回归与2维PCA的区别:虽然都是找一条直线去拟合但是

计算loss的方式不同(垂直)。
PCA没有标签Y(非监督)。

PCA和LR是不同的算法,PCA计算的是投影误差,而LR计算的是预测值与实际值的误差。
PCA中只有特征没有标签数据y,LR中既有特征样本也有标签数据。

这里写图片描述

3-2 PCA的计算过程

设有m条n维数据。将原始数据按列组成n行m列矩阵X

  • 将X的每一行(代表一个属性字段)进行零均值化,即减去这一行的均值
  • 求出协方差矩阵
  • 求出协方差矩阵的特征值及对应的特征向量(使用svd函数)。(特征向量最能代表原数据)
  • 将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵Ur。(找k个最能代表原数据的向量)
  • Y=UTX 即为降维到k维后的数据

取前k个最有代表意义的特征向量:

将特征值按照从大到小的顺序排序,选择其中最大的k个,然后将其对应的k个特征向量分别作为列向量组成特征向量矩阵。

(1)数据预处理
这里写图片描述
(2)PCA算法的目的
这里写图片描述
这里写图片描述
(3)PCA算法
这里写图片描述
这里写图片描述
(4)PCA降维
这里写图片描述
(5)PCA算法总结
这里写图片描述
这里写图片描述

四 应用PCA

4-1 PCA反向压缩

既然PCA可以将高维数据压缩到低维,那么反着使用PCA则可以将低维数据恢复到高维。
因为 Y=UT×X ,所以换算一下U×Y=X这里的X只是近似值。

  1. U的维度为方阵
  2. 反着求x,为原值
  3. 保存率为100%

4-2 如何选择 K 主元

在 PCA 算法中 我们把n维特征变量 降维到k维特征变量 。这个数字k也被称作 主成分的数量 或者说是我们保留的主成分的数量 。
在这个视频中 我会给你们一些参考 告诉你们 人们是怎样思考如何选择 PCA 的参数k的 。

我们先来思考两个值:

  1. 第一个是:PCA 所做的是 尽量最小化 平均平方映射误差 (Average Squared Projection Error) 。
  2. 第二个是:我还要定义一下 数据的总变差 (Total Variation) 。 它的意思是 “平均来看 我的训练样本 距离零向量多远?

这里写图片描述

我们把两个数的比值作为衡量PCA算法的有效性,比如
这里写图片描述

选择保留90%即可

所以一个比较好的办法是:定义一个阈值,然后实验k,看看哪个最小的k合适。计算步骤如下:
这里写图片描述

这里有个技巧:svd函数会返回一个对角矩阵S,他的元素可以很快的计算这个阈值。

这里写图片描述
这里写图片描述

4-3 应用PCA的场景

主成份分析法主要有以下用途:

  1. 数据压缩
  2. 减少内存的占用、存储硬盘
  3. 加速算法的运转
  4. 数据可视化:3维2维

有些人觉的PCA也可以用来防止过拟合,但是这是不对的。应该用正则化。正则化使用y标签最小化损失函数,使用了y标签信息。而PCA只单纯的看x的分部就删除了一些特征,损失率很多信息。

4-4 PCA总结

这里写图片描述

总结与讨论

PCA技术的一大好处是对数据进行降维的处理。我们可以对新求出的“主元”向量的重要性进行排序,根据需要取前面最重要的部分,将后面的维数省去,可以达到降维从而简化模型或是对数据进行压缩的效果。同时最大程度的保持了原有数据的信息。 PCA技术的一个很大的优点是,它是完全无参数限制的。在PCA的计算过程中完全不需要人为的设定参数或是根据任何经验模型对计算进行干预,最后的结果只与数据相关,与用户是独立的。 但是,这一点同时也可以看做是缺点。如果用户对观测对象有一定的先验知识,掌握了数据的一些特征,却无法通过参数化等放啊对处理过程进行干预,可能会得不到预期的效果,效率也不高。