主成分分析
主成分分析原理
主成分分析是最常用的一种降维方法。我们首先考虑一个问题:对于正交矩阵空间中的样本点,如何用一个超平面对所有样本进行恰当的表达。容易想到,如果这样的超平面存在,那么他大概应该具有下面的性质。
最近重构性:样本点到超平面的距离都足够近
最大可分性:样本点在这个超平面上的投影尽可能分开
基于最近重构性和最大可分性,能分别得到主成分分析的两种等价推导。
主成分分析是最常用的一种降维方法。我们首先考虑一个问题:对于正交矩阵空间中的样本点,如何用一个超平面对所有样本进行恰当的表达。容易想到,如果这样的超平面存在,那么他大概应该具有下面的性质。
最近重构性:样本点到超平面的距离都足够近
最大可分性:样本点在这个超平面上的投影尽可能分开
基于最近重构性和最大可分性,能分别得到主成分分析的两种等价推导。
MLlib
既支持保存在单台机器上的本地向量和矩阵,也支持备份在一个或多个RDD
中的分布式矩阵。本地向量和本地矩阵是简单的数据模型,作为公共接口提供。底层的线性代数操作通过Breeze和jblas提供。 在MLlib
中,用于有监督学习的训练样本称为标注点(labeled point
)。
在分析快速迭代聚类之前,我们先来了解一下谱聚类算法。谱聚类算法是建立在谱图理论的基础上的算法,与传统的聚类算法相比,它能在任意形状的样本空间上聚类且能够收敛到全局最优解。 谱聚类算法的主要思想是将聚类问题转换为无向图的划分问题。
当数据是以流的方式到达的时候,我们可能想动态的估计(estimate
)聚类的簇,通过新的到达的数据来更新聚类。spark.mllib
支持流式k-means
聚类,并且可以通过参数控制估计衰减(decay
)(或“健忘”(forgetfulness
))。 这个算法使用一般地小批量更新规则来更新簇。
本文会介绍一般的k-means
算法、k-means++
算法以及基于k-means++
算法的k-means||
算法。在spark ml
,已经实现了k-means
算法以及k-means||
算法。 本文首先会介绍这三个算法的原理,然后在了解原理的基础上分析spark
中的实现代码。
假设向量v
是方阵A
的特征向量,可以表示成下面的形式:
lambda
表示特征向量v
所对应的特征值。并且一个矩阵的一组特征向量是一组正交向量。特征值分解是将一个矩阵分解为下面的形式: 二分k-means
算法是层次聚类(Hierarchical clustering)的一种,层次聚类是聚类分析中常用的方法。 层次聚类的策略一般有两种:
自底向上
的方法,每一个观察者初始化本身为一类,然后两两结合自顶向下
的方法,所有观察者初始化为一类,然后递归地分裂它们 二分k-means
算法是分裂法的一种。