Andrew Ng机器学习coursrea课程学习笔记(第8周)

非监督学习(Unsupervised Learning)

1.聚类(Clustering)

a.非监督学习简介(Unsupervised Learning introduction)

监督学习:(以分类为例)

《Andrew Ng机器学习coursrea课程学习笔记(第8周)》 image

  • 训练集:《Andrew Ng机器学习coursrea课程学习笔记(第8周)》 ,包含输入特征向量《Andrew Ng机器学习coursrea课程学习笔记(第8周)》,和标签《Andrew Ng机器学习coursrea课程学习笔记(第8周)》
  • 有一组附标记的训练数据集, 我们想要找出 决策边界,藉此区分开 正(positive)或负(negative)标记数据

非监督学习:(以聚类为例)

《Andrew Ng机器学习coursrea课程学习笔记(第8周)》 image

  • 训练集:《Andrew Ng机器学习coursrea课程学习笔记(第8周)》 ,只包含输入特征向量《Andrew Ng机器学习coursrea课程学习笔记(第8周)》 (且特征向量不含偏置系数《Andrew Ng机器学习coursrea课程学习笔记(第8周)》);
  • 有一组无标记的训练数据,数据之间,不具任何相关联的标记。
  • 在上面那个例子,就数据的分布不同,大致分为两类,即聚成两类。

聚类的应用:

  • 市场分割(Market segmentation)
  • 社会网络分析(Social network analysis)
  • 组织计算集群(Organize computing clusters)
  • 天文数据分析(Astronomical data analysis)
  • 其它

b.K-Means算法

K-Mean算法(k-均值算法)是一种聚类算法,用于解决聚类问题。可以将未带标签的数据自动分成几簇(类别)。

K-Means算法输入:

  • K ( 聚类的簇或类别数目 )
  • 训练集:《Andrew Ng机器学习coursrea课程学习笔记(第8周)》《Andrew Ng机器学习coursrea课程学习笔记(第8周)》

K-Means算法具体步骤

  1. 随机初始化K个聚类中心(cluster centroids):《Andrew Ng机器学习coursrea课程学习笔记(第8周)》 ,代表K类。
  2. 迭代计算,更新数据点属于的类别,以及聚类中心。具体如下:

Repeat{
  for i to m:
    《Andrew Ng机器学习coursrea课程学习笔记(第8周)》=数据点《Andrew Ng机器学习coursrea课程学习笔记(第8周)》最接近的一个聚类中心的序号;
    //(例如,假设《Andrew Ng机器学习coursrea课程学习笔记(第8周)》最接近聚类中心《Andrew Ng机器学习coursrea课程学习笔记(第8周)》 ,则《Andrew Ng机器学习coursrea课程学习笔记(第8周)》)
    //即对所有点(m个点)进行归类,一共K类。《Andrew Ng机器学习coursrea课程学习笔记(第8周)》 代表《Andrew Ng机器学习coursrea课程学习笔记(第8周)》属于的类别的序号。
    //可以使用《Andrew Ng机器学习coursrea课程学习笔记(第8周)》 表示《Andrew Ng机器学习coursrea课程学习笔记(第8周)》聚类中心的距离。

 for i to K:
    《Andrew Ng机器学习coursrea课程学习笔记(第8周)》=属于k类的所有点的平均数(几何中心)。
   //更新聚类中心。
}
//循环直到聚类中心不再变化,说明算法已经收敛,循环结束。

:如果没有一个点属于《Andrew Ng机器学习coursrea课程学习笔记(第8周)》,则移除该聚类中心,即,相当于数据聚成了K-1类。(实际比较少见)

K-means算法对于不可完全分离的簇

《Andrew Ng机器学习coursrea课程学习笔记(第8周)》 image

  • 对于左图的数据,K-means算法表现的很好,能够准确的,且唯一的将其分成三类,因为每个簇数据之间相差距离比较大。
  • 对于右图的数据,显然,不是很直观可以看出来分成几类。例如,对于T恤,可以聚类成S,M,L三类。那么,K-means算法,在某种程度上,是可以将其聚成如图所示的三类,尽管,这三簇数据并没有很明显的分开。

c. 优化目标(Optimization object)

符号定义:

  • 《Andrew Ng机器学习coursrea课程学习笔记(第8周)》 :数据点《Andrew Ng机器学习coursrea课程学习笔记(第8周)》 被标记的最接近的一个聚类中心的类别序号(《Andrew Ng机器学习coursrea课程学习笔记(第8周)》);
  • 《Andrew Ng机器学习coursrea课程学习笔记(第8周)》 :聚类中心k ;
  • 《Andrew Ng机器学习coursrea课程学习笔记(第8周)》 :数据点《Andrew Ng机器学习coursrea课程学习笔记(第8周)》被标记的类别的聚类中心

优化目标

代价函数定义:《Andrew Ng机器学习coursrea课程学习笔记(第8周)》
即优化目标为:《Andrew Ng机器学习coursrea课程学习笔记(第8周)》

K-means算法的原理就是最小化代价函数《Andrew Ng机器学习coursrea课程学习笔记(第8周)》的过程。这里的代价函数也称失真函数,可以用这个知识来调试K-means证明算法是否正在收敛是否正在正常工作。

通过了解优化目标,可以:

  • 帮助我们确保K-means算法是在正确的运行中。
  • 帮助K-meas算法找到更好的簇,并且避免局部最优解。(在后面会提到)

d.随机初始化(Random initialization)

假设我们聚类的簇的个数为K个,训练样本数目为m个,且K<m;
随机初始化过程:

  1. 在m个样本中随机选取K个样本《Andrew Ng机器学习coursrea课程学习笔记(第8周)》 ;
  2. 设置这K个聚类中心等于这K个样本《Andrew Ng机器学习coursrea课程学习笔记(第8周)》;

利用随机初始化后的K-means算法过程

for i =1 to 100:{
   随机初始化K-means 算法 ;
   运行K-means算法,得到该初始化的最优解参数《Andrew Ng机器学习coursrea课程学习笔记(第8周)》 ;
   计算代价函数《Andrew Ng机器学习coursrea课程学习笔记(第8周)》 ;
}

在100个代价函数中,选取最小代价函数的聚类结果,即参数《Andrew Ng机器学习coursrea课程学习笔记(第8周)》

随机初始化的思想:通过100次随机初始化,运用100次K-means算法,得到100种聚类结果,通过计算代价函数,选择代价最小的聚类结果,即100中结果中的最优结果。

  • 通过100次的随机初始化,一般来说可以避免局部最优解,从而,达到全局最优解,或接近全局最优解的效果。
  • 如果K比较小(2<K<10),多次随机初始化,通常,可以得到一个比较好的局部最优解的结果;如果K比较大(《Andrew Ng机器学习coursrea课程学习笔记(第8周)》 ,例如《Andrew Ng机器学习coursrea课程学习笔记(第8周)》),多次初始化,可能影响不会太大,因为,往往在第一次初始化就达到了一个不错的结果。

f.聚类数目K的选择

如何选择聚类算法中聚类数目K?

  • 实际上,并没有一个标准答案,或者自动选择K的方法。目前来说,仍是通过看可视化的图,或看聚类算法的输出结果,或者其它一些东西,来手动决定聚类数目K。

当然,这里介绍两种方法。

肘部法则(Elbow method):

通过,对K不同取值,得到聚类结果,计算代价函数(实际失真值),画出代价函数随K的变化曲线,选取合适的K。

《Andrew Ng机器学习coursrea课程学习笔记(第8周)》 image

  • 左边的图所示,随着K的增加,代价函数值会减少,但是,前段下降的快,后段,下降的慢,我们可以选择中间的”肘部”的K值(上左图中,应该选取K=3)
  • 并不是所有的代价函数随K的变化曲线都有很明显的”肘部”,如右图所示,曲线很平滑,这时候,肘部法则并不能很好的运用。(此时,不能使用肘部法则)

基于实际目的选择:

更常用的选取K的方法,是基于我们使用聚类算法的实际目的(later/downstream purpose)。

以T恤为例,如果我们只需要S,M,L三类,那么,我们会选择K=3,但是,如果我们还需要考虑特大号,特小号,则我们需要聚类成XS,S,M,L,XL五类,那么,我们学会选择K=5。两种聚类结果(K=3和K=5)如下图所示:

《Andrew Ng机器学习coursrea课程学习笔记(第8周)》 image

降维(Dimensionality Reduction)

1.目的

a. 数据压缩(Data Compress)

2D数据降维成1D案例:

如下图所示,现有数据集《Andrew Ng机器学习coursrea课程学习笔记(第8周)》 ,不难发现特征量x1和x2是相关的,即,数据存在冗余,我们可以对数据进行数据压缩(Data Compress)

《Andrew Ng机器学习coursrea课程学习笔记(第8周)》 image

如何压缩数据?

  1. x1和x2具有线性相关,可以选择一条直线,并尽可能的经过所有点,将所有数据点投影到该直线上。
  2. 这种投影实质上是一种映射,将数据从二维空间《Andrew Ng机器学习coursrea课程学习笔记(第8周)》 映射到一维空间《Andrew Ng机器学习coursrea课程学习笔记(第8周)》上,故实现了数据压缩。

3D数据降维成2D案例:

如下图所示的三维空间数据,《Andrew Ng机器学习coursrea课程学习笔记(第8周)》 ,但这些数据基本上近似分布在一个平面上及其附近,故,其三个特征量之间也存在线性相关性,可以进行降维处理。

《Andrew Ng机器学习coursrea课程学习笔记(第8周)》 image

类似2D到1D数据的压缩处理,可以将所有数据投影到一个平面上,从而实现数据从三维空间到二维空间的一个映射。映射关系如下:《Andrew Ng机器学习coursrea课程学习笔记(第8周)》

使用数据压缩的好处:

  • 压缩数据,使得数据占用更小的计算机内存,和硬盘空间
  • 给算法带来提速,即使算法运行更快。

b.数据可视化(Data Visualization)

例如,我们收集了很多国家的大量统计数据,如下图所示:

《Andrew Ng机器学习coursrea课程学习笔记(第8周)》 image

对于这样的数据,我们假设每个国家有50个特征变量(《Andrew Ng机器学习coursrea课程学习笔记(第8周)》),显然,这样的数据不太好可视化。

实际上,我们可以使用降维的方法:《Andrew Ng机器学习coursrea课程学习笔记(第8周)》 ,即,50维向量到2维向量的降维处理。这样,通过降维处理,数据变成2D的,即可以在坐标上画出来。降维结果如下:

《Andrew Ng机器学习coursrea课程学习笔记(第8周)》 image

  • 特征向量《Andrew Ng机器学习coursrea课程学习笔记(第8周)》中的每个特征量《Andrew Ng机器学习coursrea课程学习笔记(第8周)》有具体确切的实际物理含义,但是对于降维后的特征向量《Andrew Ng机器学习coursrea课程学习笔记(第8周)》中的特征变量《Andrew Ng机器学习coursrea课程学习笔记(第8周)》 ,通常不能赋予你想要的实际物理含义。

将降维后的数据在2D坐标系画出来,实现数据可视化,如下图所示:

《Andrew Ng机器学习coursrea课程学习笔记(第8周)》 image

  • 每个点代表一个国家,相近的点,它们的情况可能会越相似。
  • 通过几个点的分析,可以猜测《Andrew Ng机器学习coursrea课程学习笔记(第8周)》可能代表的含义,比如,《Andrew Ng机器学习coursrea课程学习笔记(第8周)》代表国家总GDP,《Andrew Ng机器学习coursrea课程学习笔记(第8周)》代表人均GDP

这里采用的降维方法,可以是后面介绍的PCA方法。

2.主成分分析法(Principal Component Analysis,PCA)

a.PCA问题的正式描述(PCA Problem Formulation)

对于降维问题,现在最流行的算法是PCA算法(主成分分析法)

对于2D降维成1D的例子:

《Andrew Ng机器学习coursrea课程学习笔记(第8周)》 image

  • 黑色标记叉:代表数据点在原来空间的位置,为二维空间。
  • 橙色直线:代表降维后的数据点空间,这里为一维空间(其它降维情况,有可能为平面,或者超平面)
  • 绿色标记叉:为数据点在橙色直线的投影,代表数据点在降维后的空间位置。
  • 蓝色线段:代表数据点的投影误差
  • 品红直线:类似橙色直线,代表降维后的数据点空间,这里为一维空间

直观上,相比品红直线 ,更倾向于选择橙色直线 。因为品红直线的投影误差会大很多。

PCA问题正式描述 :

对于2D 降维成1D:

  • 找到一个方向(实际上是一个向量《Andrew Ng机器学习coursrea课程学习笔记(第8周)》 ,在上例子中,为直线的方向向量),并将所有数据点《Andrew Ng机器学习coursrea课程学习笔记(第8周)》投影到该向量上,(每个点都会产生投影误差),通过最小化总投影误差,得到最优方向(《Andrew Ng机器学习coursrea课程学习笔记(第8周)》)。

对于n维降维成k维:

  • 找k个向量《Andrew Ng机器学习coursrea课程学习笔记(第8周)》 (线性无关的,构成k维空间的一组基 ) ,并将所有数据点《Andrew Ng机器学习coursrea课程学习笔记(第8周)》 投影到由k个向量构成的空间中(超平面)上,(每个点都会产生投影误差),通过最小化总投影误差,得到最优向量结果《Andrew Ng机器学习coursrea课程学习笔记(第8周)》

PCA不是线性回归

以PCA的2维降维成1维问题和一元线性回归为例。

  • 共同点:都是要找一条直线。
  • 不同点:它们的优化目标是不同;PCA是在最小化投影误差线性回归是在最小化输出值y的误差(代价函数)。

b.PCA算法(PCA Algorithm)

数据预处理(Data preprocessing)

在使用PCA之前,通常需要进行数据预处理。

对于训练集《Andrew Ng机器学习coursrea课程学习笔记(第8周)》 ;

预处理方法:均值归一化(mean normalization),特征放缩(feature scaling)

  1. 进行归一化处理:《Andrew Ng机器学习coursrea课程学习笔记(第8周)》 ,使用《Andrew Ng机器学习coursrea课程学习笔记(第8周)》代替《Andrew Ng机器学习coursrea课程学习笔记(第8周)》
  2. 如果不同特征量的尺度相差很大,还需要进行特征放缩处理,使得它们范围在大致相同的尺度。

PCA算法具体过程:(n维降维成k维)

  1. 计算协方差矩阵(covariance matrix)

    《Andrew Ng机器学习coursrea课程学习笔记(第8周)》
    (或者采用矩阵形式《Andrew Ng机器学习coursrea课程学习笔记(第8周)》 ,其中《Andrew Ng机器学习coursrea课程学习笔记(第8周)》)

  2. 计算协方差矩阵《Andrew Ng机器学习coursrea课程学习笔记(第8周)》的特征向量:

    采用奇异值分解,例如在matlab中,直接调用库函数计算:[U,S,V]=svd(Sigma)

    其中$U\in R^{n\times n },U=[u{(1)},u{(2)},\dots,u^{(n)}]$$

  3. 确定矩阵《Andrew Ng机器学习coursrea课程学习笔记(第8周)》:《Andrew Ng机器学习coursrea课程学习笔记(第8周)》 ;(选取k个向量)

  4. 计算数据在降维后空间的位置z: 《Andrew Ng机器学习coursrea课程学习笔记(第8周)》

3.应用PCA

a.压缩数据重建表示(Reconstruction from Compressed Representation)

在上一节中,我们知道,通过PCA算法,可以把数据从n维降维成k维(k< n),从而实现数据压缩 。那么,应该也有一个算法,可以实现从压缩的数据中复原出原始数据,与数据压缩过程相反的情形。

  • 数据压缩过程:由上一节知《Andrew Ng机器学习coursrea课程学习笔记(第8周)》
  • 压缩数据重建过程:《Andrew Ng机器学习coursrea课程学习笔记(第8周)》

:在数据压缩过程中,会存在信息的损失(对应投影误差,投影误差越大,信息损失越大),所以,复原的结果是近似结果。

b.选择主成分的数量(Choosing Number of Principal Components)

在PCA算法中,实现了n维特征向量,降维成k维特征向量,其中k称为PCA算法的一个参数。

PCA参数k :主成分数量(保留的主成分数量)。

相关概念:

定义平均平方映射误差(Average Squared Projection Error,记为《Andrew Ng机器学习coursrea课程学习笔记(第8周)》),即为原始数据点与映射数据点距离的平方,PCA所做的就是最小化平均平方映射误差。

  • 平均平方映射误差:《Andrew Ng机器学习coursrea课程学习笔记(第8周)》

定义数据的总变差(Total Variation),它代表每个样本(视为向量)长度的平均值。

  • 数据的总变差:《Andrew Ng机器学习coursrea课程学习笔记(第8周)》

我们选择k时,需要保证如下不等式:

《Andrew Ng机器学习coursrea课程学习笔记(第8周)》

  • 该不等式代表保留了99%的差异性,在PCA算法中,即表示保留了99%的主成分。

选择k值算法

在PCA算法中,得到矩阵《Andrew Ng机器学习coursrea课程学习笔记(第8周)》

repeat k =1 to n{

  1. PCA计算过程:计算在k取当前值时,PCA降维结果,以及重建结果,为计算误差做准备。
    得到《Andrew Ng机器学习coursrea课程学习笔记(第8周)》
    对所以样本计算PCA降维结果:《Andrew Ng机器学习coursrea课程学习笔记(第8周)》>
    计算重建结果:《Andrew Ng机器学习coursrea课程学习笔记(第8周)》
  2. 检测:
    如果《Andrew Ng机器学习coursrea课程学习笔记(第8周)》,循环结束,选择该k作为我们需要的k值;否则,循环继续。

}

选择k值算法(更优化算法)

在PCA算法中,得到矩阵《Andrew Ng机器学习coursrea课程学习笔记(第8周)》 (对角阵):[U,S,V]=svd(Sigma)

repeat k =1 to n{
检测:
如果《Andrew Ng机器学习coursrea课程学习笔记(第8周)》 ,循环结束,选择该k作为我们需要的k值;否则,循环继续。
}

c.应用PCA的建议(Advice for Applying PCA)

利用PCA加速监督学习算法:

对于训练集《Andrew Ng机器学习coursrea课程学习笔记(第8周)》 ;

  1. 提取出特征变量x数据集(不包含标签《Andrew Ng机器学习coursrea课程学习笔记(第8周)》): 《Andrew Ng机器学习coursrea课程学习笔记(第8周)》
  2. 利用PCA算法将数据集《Andrew Ng机器学习coursrea课程学习笔记(第8周)》《Andrew Ng机器学习coursrea课程学习笔记(第8周)》)降维 《Andrew Ng机器学习coursrea课程学习笔记(第8周)》 (《Andrew Ng机器学习coursrea课程学习笔记(第8周)》)
  3. 新的训练集:《Andrew Ng机器学习coursrea课程学习笔记(第8周)》
  4. 最后,利用新的训练集训练模型(线性回归,逻辑回归,神经网络都适用),得到模型《Andrew Ng机器学习coursrea课程学习笔记(第8周)》

对于交叉验证集和测试集数据,也要做相同的数据映射:《Andrew Ng机器学习coursrea课程学习笔记(第8周)》 ,并测试模型。

事实上,采用PCA降维算法,原数据的大部分信息被保留下来(我们选择k时,需要保留了99%的差异性),故,数据集降维对模型训练不会产生太大影响。而在训练模型过程中,计算低维数据,算法的速度会快一点。

应用PCA:

  • 数据压缩:可以减少磁盘内存空间,加快算法速度。(选择k时,需要保留了99%的差异性)
  • 数据可视化:k=2(二维图),k=3(三维图),可以画出相应图像。

应用PCA的误区:可以避免过拟合(错误的)

通过PCA降维处理,数据的特征向量由n维减小维k维,特征变量减少。根据之前的知识,似乎模型更简单了,可以避免过拟合。

  • 事实上,通过PCA降维方法也许可以避免模型过拟合,但这并不是一个好方法;因为经过PCA降维后,数据集会有信息损失。
  • 为了避免过拟合,建议采用正则化处理。

PCA有时候不应该被使用:

并不是任何时候,在训练模型时,采用PCA算法都比较好。

  • 在采用PCA之前,首先应该尝试在原始数据集下训练模型;只有在这种情况下得不到一个好结果时,才考虑采用PCA算法。

全文参考 :coursera机器学习课程(Andrew Ng讲授)相关视频及讲义

    原文作者:gezp_me
    原文地址: https://www.jianshu.com/p/23dffcffa2c5
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞