吴恩达机器学习:无监督学习 | k-means 与 PCA

西部世界 第二季恰好放到第七集,课程总结也恰好是第七次。咱们关于 监督学习 的课程已经告一段落,此次 Ng 将给咱们介绍两个很经常使用的 无监督学习 算法。一个是用来将数据划分到不一样类别的 k-means 算法,一个是用来提取重要特征并给特征降维的 PCA 算法。html

点击 课程视频 你就能不间断地学习 Ng 的课程,关于课程做业的 Python 代码已经放到了 Github 上,点击 课程代码 就能去 Github 查看( 没法访问 Github 的话能够点击 Coding 查看 ),代码中的错误和改进欢迎你们指出。git

如下是 Ng 机器学习课程第七周的笔记。github

聚类

咱们常常会给事物作分类,把特征相近的东西归为一类。而 无监督学习 中的聚类正是想让计算机来完成这个工做。用数学语言表达就是要把每一个特征数据 x^{(i)} 分配到 c^{(i)} 中。让咱们看下课程做业中的聚类任务来有个直观的感觉。( 下图是将数据分为三个簇 )算法

代价函数

假设要将数据分到 k,选取的中心分别为 \mu_1,\mu_2,...,\mu_k。咱们的代价函数就是要将每一个特征与被分配到的簇的中心之间的距离和最小化( 直观来讲就是凑得近的分一块儿 )。机器学习

J(c^{(1)},c^{(2)},...,c^{(m)};\mu_1,\mu_2,...,\mu_k)=\frac{1}{m}\sum_{i=1}^m||x^{(i)}-\mu_{c^{(i)}}||^2

能够看出 代价函数 一方面取决于 x^{(i)} 的分配,一方面取决于 中心的位置。ide

k-means

下面咱们先来看下 k-means 的算法,而后来解释它是如何优化 代价函数 的。函数

随机选择 k 的中心 \mu_1,\mu_2,...,\mu_k 重复下面步骤直到收敛:学习

  1. 对于每一个 x^{(i)},计算 c^{(i)}x^{(i)} 距离第 j 个簇的中心最近,则 c^{(i)}=j
  2. 更新 \mu_k ( 新 \mu_k 为全部知足 c^{(i)}=kx^{(i)} 的中心 )

对于步骤 1 来讲,咱们固定了 \mu_1,\mu_2,...,\mu_k,并为每一个 x^{(i)} 选取了距离最近的 ,这使得 代价函数 减少。对于步骤 2,咱们固定了 c^{(1)},c^{(2)},...,c^{(m)},并将 \mu_k 移动到了各个分类的中心,这也使得 代价函数 减少。所以随着不断循环这个过程,咱们将获得一个最优解( 也多是局部最优 )。优化

相关问题

k-means 算法挺好理解的,最后咱们来讲说簇中心的初始化与 k 的选择问题。对于簇中心的初始化,通常直接随机选 k 个数据为中心,选好比说 100 次并计算 代价函数 的值,选择其中最小的那一次的结果。 对于 k 的选择,一方面能够运用 肘部法则,原理是 代价函数 一开始会随着 k 的增大降低的很快,但过了某个值以后降低变缓,咱们选择这个点的 k 值。另外一方面咱们能够根据本身的业务需求来选择 k( 业务就是须要分为 k 个类的状况 )。.net

降维

在机器学习中,下降特征的维度可以给咱们带来不少好处。首先下降特征的维度能够提高学习的效率。其次降维可让咱们的注意力集中在重要的特征上。再有降维也能够做为一种数据压缩的方法。这里将要学习的降维算法被称做 主成分分析PCA )。

协方差

在统计学中,协方差 表现了两组数据之间的关联性( 当数据为同一个是就是 方差 )。为了了解 协方差 与降维算法的关系,咱们先来看简单的二维状况。假设咱们的数据有两个特征( 如图 ),而且已经作过 标准化。红色的数据点在这个坐标系下呈现出明显的先关性( 协方差 大 )。

线性代数 的知识能够知道,咱们可使用不一样的 ( 特征 )来表示这些数据,如图中的绿色坐标和蓝色坐标。经过直觉能够发现若是将数据投影到较长的蓝色坐标上来降维是更为合适的选择。事实上这也是使得 协方差 最小的选择, 协方差 的最小化让每一个特征和其它特征的关系性降到最低,使得每一个特征被独立地表达,而降维就是从中选出贡献( 方差 )比较大的特征。对于数据 X( 这里的 X 和课程做业中的不一样,每列表示一个数据 ),特征间的 协方差 能够表示为 协方差矩阵

C = \frac{1}{m} XX^{T} = \frac{1}{m} \begin{bmatrix}
    \sum\limits_{i=1}^{m}(x_1^{(i)})^2 & \sum\limits_{i=1}^{m}(x_1^{(i)}x_2^{(i)}) \\
    \sum\limits_{i=1}^{m}(x_2^{(i)}x_1^{(i)}) & \sum\limits_{i=1}^{m}(x_2^{(i)})^2 \\
\end{bmatrix}

协方差矩阵 对角线上的元素是数据在各个特征上的 方差,其他是特征之间的 协方差。因而降维的目标就成了找到一个基变换让 协方差矩阵 里除了对角线上的值,其他的都尽量小。不过在下面的讨论中,咱们会知道能够找到一组 使得变换后的 协方差 除了对角线上的值,其他都为 0。

SVD

假设咱们的数据 X 经过基变换映射到了 YY=PXY协方差 D 为:

\begin{array}{l l l}
  D & = & \frac{1}{m}YY^{T} \\
    & = & \frac{1}{m}(PX)(PX)^{T} \\
    & = & \frac{1}{m}PXX^{T}P^{T} \\
    & = & P(\frac{1}{m}XX^{T})P^{T} \\
    & = & PCP^{T}
\end{array}

到这里就能够看出咱们可以利用 矩阵对角化 的方法来获得 D,就是存在单位正交特征向量 E,使得 E^{T}CE=\Lambda,其中 \Lambda对角矩阵。经过这种方法能够获得基 P=E^{T},而 \Lambda 对角上的元素表示各个特征的贡献大小。不过咱们还能够经过 矩阵分解 的技巧来解决这个问题,使用 SVD 来分解矩阵的话有 X=U \Sigma V^T,通过推导能够获得:

\begin{array}{l l l}
  XX^{T} & = & (U \Sigma V^T)(U \Sigma V^T)^T \\
    & = & (U \Sigma V^T)(V \Sigma U^T) \\
    & = & U \Sigma^2 U^T
\end{array}

因此能够取 P=U^{T},而 D=\frac{1}{m} \Sigma^2。对于降维,只要取 D 中占比比较高的特征对应的 ,也就是 P 的一部分 P',对应的数据也变为了 Y'。对于数据恢复,能够经过简单的推导获得 X_{恢复}=P'^TY'

课外阅读

关于 PCA 的内容,我以为有两篇文章对我颇有帮助,在这里分享给你们:PCA的数学原理谈谈矩阵的 SVD 分解

So~,第七周的内容就是这些了,谢谢你们耐心阅读。

相关文章
相关标签/搜索