吴恩达机器学习笔记-非监督学习

聚类

以前的课程中咱们学习的都是监督学习相关的算法,如今来开始看非监督学习。非监督学习相对于监督非学习来看,其使用的是未标记的训练集而监督学习的是标记的训练集。换句话说,咱们不知道向量y的预期结果,仅仅只是拥有一个能够找到结构的特征的集合。
其中一种可能的结构是,全部的数据能够大体地划分红两组,这种划分的算法称为聚类算法。 这是咱们第一种 无监督学习算法。在不少场景下咱们会使用聚类的方式来解决非监督学习问题,好比市场分割,社会网络分析等等。算法

K-means

K-Means算法是最流行和普遍使用的自动将数据分组到相干子集的算法,其算法的步骤主要是:网络

  1. 首先选择 K 个随机的点,称为聚类中心(cluster centroids);
  2. 对于数据集中的每个数据,按照距离K个中心点的距离,将其与距离最近的中心点关联起来,与同一个中心点关联的全部点聚成一类。
  3. 计算每个组的平均值,将该组所关联的中心点移动到平均值的位置。
  4. 重复步骤2-4直至中心点再也不变化。

下图展现了对n个样本点进行K-means聚类的效果,这里k取2。dom

用 $μ^1,μ^2,...,μ^k$ , 来表示聚类中心,用 $c^{(1)},c^{(2)},...,c^{(m)}$ ,来存储与第 i 个实例数据最近的聚类中心的索引,K-均值算法的伪代码以下:机器学习

Randomly initialize K cluster centroids mu(1), mu(2), ..., mu(K)
Repeat:
   for i = 1 to m:
      c(i):= index (from 1 to K) of cluster centroid closest to x(i)
   for k = 1 to K:
      mu(k):= average (mean) of points assigned to cluster k

算法分为两个步骤,第一个for循环是赋值步骤,即:对于每个样例i,计算其应该属于的类。第二个for循环是聚类中心的移动,即:对于每个类 K从新计算该类的质心。
在K-means算法中的变量有下面几个:函数

用这些变量咱们能够定义代价函数为:学习

$$ J(c^{(1)},...,c^{(m)},μ_1,...,μ_K)=\dfrac {1}{m}\sum^{m}_{i=1}\left\| X^{\left( i\right) }-\mu_{c^{(i)}}\right\| ^{2} $$优化

咱们的的优化目标即是找出使得代价函数最小的$c^{(1)},c^{(2)},...,c^{(m)} ,和 μ^1,μ^2,...,μ^k $。回顾刚才给出的: K-均值迭代算法,咱们知道,第一个循环是用于减少$c^{(i)}$引发的代价,而第二个循环则是用于减少${{\mu }_{i}}$引发的代价。迭代的过程必定会是每一次迭代都在减少代价函数,否则即是出现了错误。spa

随机初始化

在运行K-均值算法的以前,咱们首先要随机初始化全部的聚类中心点,下面介绍怎样作:.net

  1. 咱们应该选择 K<m,即聚类中心点的个数要小于全部训练集实例的数量
  2. 随机选择 K 个训练实例。
  3. 令 K 个聚类中心分别与这 K个训练实例相等

K-均值的一个问题在于它有可能会停留在一个局部最小值处,而这取决于初始化的状况。为了解决这个问题,咱们一般须要屡次运行K-均值算法,每一次都从新进行随机初始化,最后再比较屡次运行K-均值的结果,选择代价函数最小的结果。这种方法在K较小的时候(2--10)仍是可行的,可是K若是较大,这么作也可能不会有明显地改善。code

for i = 1 to 100:
   randomly initialize k-means
   run k-means to get 'c' and 'm'
   compute the cost function (distortion) J(c,m)
pick the clustering that gave us the lowest cost

选择聚类数

K的选择每每是任意的或者说是模糊不清的,一般是须要根据不一样的问题人工进行选择的。选择的时候咱们须要思考运用K-均值算法聚类的动机是什么,而后选择能最好服务于该目的标聚类数。
当人们在讨论,选择聚类数目的方法时,有一个可能会谈及的方法叫做“肘部法则”。将代价J和聚类K画在图中。代价函数会随着K的增长而下降而后趋于平缓,咱们要作的就是找到J开始趋于平缓时的K。然而不少时候,曲线常常是很平缓的,这时的肘部就很不明显。(note:J通常都是随着K的增长而下降,但若是K出现了错误的局部最优则会致使不同的结果)。

降维

使用降维的动机

有几个不一样的的缘由使你可能想要作降维。一是数据压缩,若是咱们有大量多余的数据时,咱们可能想下降特征的维度,为此能够找到两个高度相关的特征,将其画出图像而后作一条直线来同时描述这两个特征。二是数据可视化,由于数据超过三维就很难可视化了,所以有时候须要将维度降低到3或者如下来达到可视化的目的。

主成分分析问题

主成分分析(PCA)是最多见的降维算法。其定义是想把数据从n维降到k维(k小于n),就在这个空间里面找k个单位向量来表示数据,使得数据点投影到这个面上的偏差最小。以下例子:2到1和3到2:

虽然同是一条直线拟合,但PCA和线性回归是不一样的:

  1. 计算loss的方式不一样(垂直)。
  2. PCA没有标签Y(非监督)。

PCA算法

PCA 减小 n 维到 k 维:

第一步是均值归一化。咱们须要计算出全部特征的均值,而后令$x_j=x_j-μ_j$。若是特征是在不一样的数量级上,咱们还须要将其除以标准差$σ^2$。
第二步是计算协方差矩阵(covariance matrix) Σ :$\sum=\frac {1}{m}\sum^{n}_{i=1}\left( x^{(i)}\right) \left( x^{(i)}\right) ^{T}$
第三步是计算协方差矩阵Σ的特征向量(eigenvectors):
在 Octave 里咱们能够利用奇异值分解(singular value decomposition)来求解,[U, S, V]= svd(sigma)。
$\Sigma=\frac {1}{m}\sum^{n}_{i=1}\left( x^{(i)}\right) \left( x^{(i)}\right) ^{T}$
对于一个 n×n 维度的矩阵,上式中的 U 是一个具备与数据之间最小投射偏差的方向向量构成的矩阵。若是咱们但愿将数据从 n 维降至 k 维,咱们只须要从U中选取前k个向量,得到一个n×k维度的矩阵,咱们用$U_{reduce}$表示,而后经过以下计算得到要求的新特征向量 $z^{(i)}=U^{T}_{reduce}*x^{(i)}$。
其中x是n×1维的,所以结果为 k×1 维度。咱们不对方差特征进行处理。

选择主成分的数量

在PCA算法中咱们把n维特征变量降维到k维特征变量。这个数字k也被称做主成分的数量或者说是咱们保留的主成分的数量。咱们先来思考两个值:

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

咱们把两个数的比值做为衡量PCA算法的有效性

定义一个阈值而后实验k,看看那个最小的k合适。计算步骤以下:

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

主成分分析法的应用建议

PCA算法主要有如下用途:

  • 压缩:

    • 减小内存和磁盘的占用
    • 提高算法的速度
  • 可视化:

    • 降维到二维或者三维

有些人觉的PCA也能够用来防止过拟合,可是这是不对的。应该用正则化。正则化使用y标签最小化损失函数,使用了y标签信息。而PCA只单纯的看x的分部就删除了一些特征,损失率不少信息。另外一个常见的错误是,默认地将主要成分分析做为学习过程当中的一部分,这虽然不少时候有效果,最好仍是从全部原始特征开始,只在有必要的时候(算法运行太慢或者占用太多内存)才考虑采用主要成分分析。

以上为吴恩达机器学习非监督学习这一章节的内容。

参考连接
https://zhuanlan.zhihu.com/p/43488853
https://blog.csdn.net/u012052268/article/details/78847915#3维度约简-主成分分析法pca

相关文章
相关标签/搜索