您的位置:首页 > 其它

Andrew NG 机器学习 笔记-week8-聚类(Clustering)

2017-10-25 11:04 288 查看

一、聚类(Clustering)

1、无监督学习简介(Unsupervised Learning Introduction)

在无监督学习中,数据没有附带任何标签。

训练集只有 x(1),x(2)...x(m),没有 y



图上的数据看起来可以分成两个分开的点集(称为),一个能够找到区分这些点集的算法,称为聚类算法

聚类算法的应用:



市场分割:把数据库中的客户信息分成不同客户群,分别销售产品或提供服务。

社交网络分析:发现社交网络中关系密切的朋友。

组织计算集群:了解数据中心中,哪些计算机经常协同工作,以重新分配资源,重新布局网络。由此优化数据中心,优化数据通信。

天文数据分析:星系形成

2、K-均值算法(K-Means Algorithm)

K-means 是最普及的聚类算法,算法接受一个未标记的数据集,然后将数据聚类成不同的组。

K-means 是一个迭代算法,假设我们要将数据聚类成 n 个组,其方法为:

首先选择 K 个随机的点,称为 聚类中心(cluster centroids);

对于数据集中的每一个数据,按照距离 K 个中心点的距离,将其与距离最近的一个中心点关联起来,与同一个中心点关联的所有点聚为一组。

计算每一组的平均值,将该组的中心点移动到平均值的位置。

重复步骤2-4 直至聚类中心不再变化。

下面是一个聚类示例:





用 μ1,μ2,…,μk,来表示聚类中心,用 c(1),c(2),…,c(m) 来存储与第 i 个实例数据最近的聚类中心的索引,k-means 算法的伪代码 如下:



算法分为两个步骤,第一个for 循环是赋值操作,对于每一个样例 i ,计算其应该属于的类。第二个 for 循环是聚类中心的移动,对于每一个类 k , 重新计算该类的质心。

K-means 算法也可以很便利的将没有非常明显区分的组群的数据分组。如下图,数据集包含身高和体重 两项特征,利用 k-means 将数据分成三类,用于帮助确定将要生产的T-shirt 的三种尺寸。



3、优化目标(Optimization Objective)

k-means 最小化问题,是要最小化所有的数据点与其所关联的聚类中心点之间的距离之和,因此 k-means 的代价函数(又称 畸变函数 distortion function)为:



其中 μc(i) 代表与 x(i) 最近的聚类中心点。我们的优化目标便是找出使得代价函数最小的 c(1),c(2),...,c(m) 和 μ1,μ2,...,μk :



回顾上节 k-means 迭代算法,我们知道,第一个循环是用于减小 c(i) 引起的代价,第二个循环是用于减小 μi 引起的代价。迭代过程一定是每一次迭代都在减小代价函数,不然便是出错了。

4、随机初始化(Random Initialization)

在运行 k-means 算法之前,我们首先需要随机初始化所有的聚类中心点:

我们应该选择 k < m,即聚类中心点的个数要小于所有的训练集实例的数量

随机选择 k 个训练实例,令 k 个聚类中心分别与这 k 个训练实例相等

k-means 算法可能会停留在局部最小值处,这取决于聚类中心的初始化情况。



为了解决局部最小值问题,通常需要多次随机初始化聚类中心,多次运行k-means算法。选择代价函数最小的结果。这种方法在 k 较小的时候(2-10)还是可行的,但是如果 k 比较大,可能不会有明显地改善。

5、选择聚类数(Choosing the Number of Clusters)

没有所谓最好的选择聚类数的方法,通常需要根据具体问题,人工进行选择。

肘部法则,选择聚类数

改变聚类类别数目 k ,然后运行 k-means 算法,然后计算 畸变函数 J,横轴代表 聚类数目 k , 纵轴代表 畸变函数 J 的值



如果能得到这样的曲线(像肘关节),当 聚类数 k 选择 3 时,达到肘点,之后畸变值就会下降非常缓慢,所以我们选择 k=3 。

肘部法则 不是一定有效的,通常会得到如下图像:



K 的选择更多的时候要跟实际情况结合,我们的 T-恤制造例子中,我们要将用户按照身材聚类,我们可以分成 3 个尺寸S,M,L 也可以分成 5 个尺寸 XS,S,M,L,XL,这样的选择是建立在回答“聚类后我们制造的 T-恤是否能较好地适合我们的客户”这个问题的基础上作出的。

二、降维(Dimensionality Reduction)

第二种类型的无监督学习问题,降维

1、动机一:数据压缩(Data Compression)

数据压缩不仅可以压缩数据减小占用内存空间,还可以加快学习算法。

我们需要一组关于XXX的数据,定义就铺天盖地的来了,百万级个特征拿过来,我们怎么进行机器学习啊?!学习精度越高,学习确信度越高,学习模型越复杂,所需要的样本也就越多。

很多特征是高度冗余的。

feature太多会造成模型复杂,训练速度过慢,因此我们引入降维。





2、动机二:数据可视化(Visualization)

在许多机器学习问题中,如果能将数据可视化,我们便能寻找到一个更好的解决方案。降维可以帮助可视化。





假使我们有有关于许多不同国家的数据,每一个特征向量都有 50 个特征(如,GDP,人均 GDP,平均寿命等)。如果要将这个 50 维的数据可视化是不可能的。使用降维的方法将其降至 2 维,我们便可以将其可视化了。降维的算法只负责减少维数,新产生的特征的意义就必须由我们自己去发现了。

3、主成分分析问题构想(Principal Component Analysis Problem Formulation)

主成分分析(PCA)是最常见的降维算法。

在PCA中,我们要做的是找到一个方向向量(Vector direction),当我们把所有的数据都投射到该向量上时,我们希望投射平均 均方误差 尽可能地小。方向向量是一个经过原点的向量,而投射误差是从特征向量向该方向向量做垂线的长度。



下面给出主成分分析问题的描述:

问题是要将 n 维数据降至 k 维,目标是找到向量 u(1),u(2),...,u(k) 使得总的投射误差最小。

主成分分析与线性回归的比较:

主成分分析与线性回归是两种不同的算法。主成分分析最小化的是投射误差(Projected Error),而线性回归尝试的是最小化预测误差。线性回归的目的是预测结果,而主成分分析不作任何预测。



上图中,左边的是线性回归的误差(垂直于横轴投影),右边则是主成分分析的误差(垂直于红线投影)。

PCA 将 n 个特征降维到 k 个,可以用来进行数据压缩,如果 100 维的向量最后可以用10维来表示,那么压缩率为 90% 。同样图像处理领域的 KL 变换使用 PCA 做图像压缩。但PCA要保证降维后,还要保证数据的特征损失最小。

PCA 技术的一大好处是对数据进行降维的处理。我们可以对新求出的“主元”向量的重要性进行排序,根据需要取前面最重要的部分,将后面的维数省去,可以达到降维从而简化模型或是对数据进行压缩的效果。同时最大程度的保持了原有数据的信息。

PCA技术的一个很大的优点是,它是完全无参数限制的。在PCA的计算过程中完全不需要人为的设定参数或是根据任何经验模型对计算进行干预,最后的结果只与数据相关。

但这同时也是缺点。如果用户对观测对象有一定的先验知识,掌握了数据的一些特征,却无法通过参数化等方法对处理过程进行干预,可能会得不到预期的效果,效率不高。

主成分分析就是找一个低维的平面,将其他点映射到这个平面上对应的一点。最小化投影误差,即使所有点到这个平面其投影点距离的平方值最短。

4、主成分分析算法(Principal Component Analysis Algorithm)

PCA 从 n 维减小到 k 维:

假设有 m 个samples,每个数据有 n 维。

数据预处理(data preprocessing)

1. 计算各个feature的平均值,计为 μj ;(x(i)j 表示第 i 个样本的第 j 维特征的 value)

μj=Σmi=1x(i)jm

2. 数据归一化(feature scaling/mean normalization):x(i)j=x(i)j−μjsj , sj 为标准差

PCA算法选取k个主分量

3. 计算 协方差矩阵(covariance matrix)Σ:



4.根据 SVD 求取 特征值 和 特征向量(eigenvectors):

[U,S,V] = SVD(Σ)

其中 SVD是奇异值分解(singular value decomposition),在 matlab 中有函数[U,S,V] =svd(A) 返回一个与 A 同大小的对角矩阵 S (由 Σ 的特征值组成),两个酉矩阵U和V,且满足A=U*S*V’。若 A 为 mxn 阵。奇异值在S的对角线上,非负且按降序排列。

那么对于方阵 Σ ,就有 Σ = USV’

ΣΣ’ = USV’*VS’U’ = U(ΣΣ’)U’

Σ’Σ = VS’U’*USV’ = V(Σ’Σ)V’

i.e. U 是ΣΣ’的特征向量矩阵;V是Σ’Σ的特征向量矩阵,都是n*n的矩阵

由于方阵的SVD相当于特征值分解,所以事实上U = V, 即Σ = USU’, U是特征向量组成的正交矩阵

我们的目的是,从n维降维到k维,也就是选出这n个特征中最重要的k个,也就是选出特征值最大的k个

5.按特征值从大到小排列,重新组织 U

如果使用 matlab 的 svd 求得特征值,就可以直接跳过这步了,因为该函数返回值中,奇异值在 S 的对角线上按照降序排列。否则的话应进行排序,并按照该次序找到对应的特征向量重新排列。

6.选择 k 个分量

按照第 4、5步中讲的 svd 过后,我们得到了一个 nxn 的矩阵 Σ 和 U,这时,我们就需要从 U 中选出 k 个最重要的分量;即选择前 k 个特征向量,记为 Ureduce

该矩阵大小为n×k



这样对于一个 n 维向量 x,就可以降维到 k 维向量 z 了:



5、从压缩数据中恢复原数据(Reconstruction from Compressed Representation)

我们已经知道,可以根据 z(i)=U′reduce×x(i) 将 n 维向量 x 降维到 k 维向量 z,那么有时我们需要恢复 n 维向量,怎么做呢?

由于Ureduce是正交矩阵(下面Ureduce简记为U),即U’ = U-1, 所以

xapprox=(U′)−1×z=(U−1)−1×z=Uz

(PS:这里的逆操作为伪逆操作)

注意:这里恢复出的 xapprox 并不是原先的 x,而是向量 x 的近似值。

6、决定主成分个数(Choosing the Number of Principal Components)

主成分分析投射的平均均方误差:


训练样本的总变差(total variation) 为:


训练样本离原点的平均距离

我们希望在平均均方误差与训练集方差的比例尽可能小的情况下选择尽可能小的 K 值。

error ratio =


然后呢,我们定义一个threshold(1% for example),如果 error ratio < threshold,说明这样选取主成分是可以接受的,else not



[U, S, V] = svd(sigma)中, S 是一个 n×n 的矩阵,只有对角线上有值,而其它单元都是 0,我们可以使用这个矩阵来计算平均均方误差与训练集方差的比例:



7、主成分分析法的应用建议(Advice for applying PCA)

假设我们正在针对一张 100x100 像素的图片进行某个计算机视觉的机器学习,即总共有 10000 个特征。

第一步是运用主成分分析将数据压缩至1000个特征。

然后对训练集运行学习算法。

在预测时,采用之前学习而来的 Ureduce 将输入的特征x 转换成特征向量z ,然后再进行预测。

1、PCA可以降维,那让我们联想到了之前说过拟合问题是由维度过高或者参数过多造成的,那么可不可以用PCA解决 overfitting 的问题呢?

答:不能。应用PCA提取主成分可能会解决一些overfitting 的问题,但不建议用这种方法解决overfitting问题。主成分分析只是近似地丢弃一些特征,它并不考虑任何与结果相关的信息,因此可能会丢弃非常重要的特征。还是建议用 regularization 项(也称为 ridge regression)来解决。

2、PCA中主成分分析应用到哪部分数据?

答:只有训练数据。 可以用Cross-Validation data 和 test Data进行检验,但是选择主分量的时候只应用training data.

3、不要盲目PCA

Notice:only 当你在原数据上跑到了一个比较好的结果,又嫌它太慢的时候才采取PCA进行降维,不然降了半天白降了~

PCA 一般用来压缩数据,减小内存使用,加快训练速度,降维以实现可视化
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: