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

非监督学习(Unsupervised Learning)

1.聚类(Clustering)

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

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

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

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

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

聚类的应用:

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

b.K-Means算法

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

K-Means算法输入:

  • K ( 聚类的簇或类别数目 )
  • 训练集: ()

K-Means算法具体步骤

  1. 随机初始化K个聚类中心(cluster centroids): ,代表K类。
  2. 迭代计算,更新数据点属于的类别,以及聚类中心。具体如下:

Repeat{
  for i to m:
    =数据点最接近的一个聚类中心的序号;
    //(例如,假设最接近聚类中心 ,则)
    //即对所有点(m个点)进行归类,一共K类。 代表属于的类别的序号。
    //可以使用 表示聚类中心的距离。

 for i to K:
    =属于k类的所有点的平均数(几何中心)。
   //更新聚类中心。
}
//循环直到聚类中心不再变化,说明算法已经收敛,循环结束。

:如果没有一个点属于,则移除该聚类中心,即,相当于数据聚成了K-1类。(实际比较少见)

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

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

c. 优化目标(Optimization object)

符号定义:

  • :数据点 被标记的最接近的一个聚类中心的类别序号();
  • :聚类中心k ;
  • :数据点被标记的类别的聚类中心

优化目标

代价函数定义:
即优化目标为:

K-means算法的原理就是最小化代价函数的过程。这里的代价函数也称失真函数,可以用这个知识来调试K-means证明算法是否正在收敛是否正在正常工作。

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

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

d.随机初始化(Random initialization)

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

  1. 在m个样本中随机选取K个样本 ;
  2. 设置这K个聚类中心等于这K个样本;

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

for i =1 to 100:{
   随机初始化K-means 算法 ;
   运行K-means算法,得到该初始化的最优解参数 ;
   计算代价函数 ;
}

在100个代价函数中,选取最小代价函数的聚类结果,即参数

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

  • 通过100次的随机初始化,一般来说可以避免局部最优解,从而,达到全局最优解,或接近全局最优解的效果。
  • 如果K比较小(2

f.聚类数目K的选择

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

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

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

肘部法则(Elbow method):

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

Andrew Ng机器学习coursrea课程学习笔记(第8周)_第4张图片
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周)_第5张图片
image

降维(Dimensionality Reduction)

1.目的

a. 数据压缩(Data Compress)

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

如下图所示,现有数据集 ,不难发现特征量x1和x2是相关的,即,数据存在冗余,我们可以对数据进行数据压缩(Data Compress)

Andrew Ng机器学习coursrea课程学习笔记(第8周)_第6张图片
image

如何压缩数据?

  1. x1和x2具有线性相关,可以选择一条直线,并尽可能的经过所有点,将所有数据点投影到该直线上。
  2. 这种投影实质上是一种映射,将数据从二维空间 映射到一维空间上,故实现了数据压缩。

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

如下图所示的三维空间数据, ,但这些数据基本上近似分布在一个平面上及其附近,故,其三个特征量之间也存在线性相关性,可以进行降维处理。

Andrew Ng机器学习coursrea课程学习笔记(第8周)_第7张图片
image

类似2D到1D数据的压缩处理,可以将所有数据投影到一个平面上,从而实现数据从三维空间到二维空间的一个映射。映射关系如下:

使用数据压缩的好处:

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

b.数据可视化(Data Visualization)

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

Andrew Ng机器学习coursrea课程学习笔记(第8周)_第8张图片
image

对于这样的数据,我们假设每个国家有50个特征变量(),显然,这样的数据不太好可视化。

实际上,我们可以使用降维的方法: ,即,50维向量到2维向量的降维处理。这样,通过降维处理,数据变成2D的,即可以在坐标上画出来。降维结果如下:

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

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

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

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

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

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

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

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

Andrew Ng机器学习coursrea课程学习笔记(第8周)_第11张图片
image
  • 黑色标记叉:代表数据点在原来空间的位置,为二维空间。
  • 橙色直线:代表降维后的数据点空间,这里为一维空间(其它降维情况,有可能为平面,或者超平面)
  • 绿色标记叉:为数据点在橙色直线的投影,代表数据点在降维后的空间位置。
  • 蓝色线段:代表数据点的投影误差
  • 品红直线:类似橙色直线,代表降维后的数据点空间,这里为一维空间

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

PCA问题正式描述 :

对于2D 降维成1D:

  • 找到一个方向(实际上是一个向量 ,在上例子中,为直线的方向向量),并将所有数据点投影到该向量上,(每个点都会产生投影误差),通过最小化总投影误差,得到最优方向()。

对于n维降维成k维:

  • 找k个向量 (线性无关的,构成k维空间的一组基 ) ,并将所有数据点 投影到由k个向量构成的空间中(超平面)上,(每个点都会产生投影误差),通过最小化总投影误差,得到最优向量结果

PCA不是线性回归

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

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

b.PCA算法(PCA Algorithm)

数据预处理(Data preprocessing)

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

对于训练集 ;

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

  1. 进行归一化处理: ,使用代替 。
  2. 如果不同特征量的尺度相差很大,还需要进行特征放缩处理,使得它们范围在大致相同的尺度。

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

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


    (或者采用矩阵形式 ,其中)

  2. 计算协方差矩阵的特征向量:

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

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

  3. 确定矩阵: ;(选取k个向量)

  4. 计算数据在降维后空间的位置z:

3.应用PCA

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

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

  • 数据压缩过程:由上一节知
  • 压缩数据重建过程:

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

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

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

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

相关概念:

定义平均平方映射误差(Average Squared Projection Error,记为),即为原始数据点与映射数据点距离的平方,PCA所做的就是最小化平均平方映射误差。

  • 平均平方映射误差:

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

  • 数据的总变差:

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

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

选择k值算法

在PCA算法中,得到矩阵

repeat k =1 to n{

  1. PCA计算过程:计算在k取当前值时,PCA降维结果,以及重建结果,为计算误差做准备。
    得到
    对所以样本计算PCA降维结果:>
    计算重建结果:
  2. 检测:
    如果,循环结束,选择该k作为我们需要的k值;否则,循环继续。

}

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

在PCA算法中,得到矩阵 (对角阵):[U,S,V]=svd(Sigma)

repeat k =1 to n{
检测:
如果 ,循环结束,选择该k作为我们需要的k值;否则,循环继续。
}

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

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

对于训练集 ;

  1. 提取出特征变量x数据集(不包含标签):
  2. 利用PCA算法将数据集 ()降维 ()
  3. 新的训练集:
  4. 最后,利用新的训练集训练模型(线性回归,逻辑回归,神经网络都适用),得到模型

对于交叉验证集和测试集数据,也要做相同的数据映射: ,并测试模型。

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

应用PCA:

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

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

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

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

PCA有时候不应该被使用:

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

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


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

你可能感兴趣的:(Andrew Ng机器学习coursrea课程学习笔记(第8周))