主成分分析(PCA)简明过程

主成分分析(PCA)是最常见的降维算法,通常用于数据压缩以及噪音过滤

比如我们可以通过PCA将100维的向量最后用10维来表示,那么压缩率为90%,同时还可以保证数据的特性损失尽可能的小

1)PCA算法流程

在详细展开讲之前,先了解一下几个基本数学符号的定义:

x^{i} 表示第i个样本数据(这个数据是一个N维向量)

x_{j}^{i} 表示第i个样本的第j个特征

x_{j} 表示由所有样本数据的第j个特征变量组成的一个向量

了解这些数学符号的定义非常重要,否则后面的推导公式很容易混乱

假设我们有一个n维的样本数据集 D = (x^{(1)}, x^{(2)}, ..., x^{(m)}),其中每一个数据都是n维的 x^{(i)} = \{x_1^i, x_2^i, ..., x_n^i\},我们要把维度从n维降到k维:

  1. 对所有样本进行归一化 x^{(i)} = x^{(i)} - \frac{1}{m} \sum\limits_{j=1}^{m} x^{(j)}
  2. 计算协方差矩阵covariance matrixXX^T,其中 X 的定义非常重要
  3. 计算协方差矩阵XX^T特征向量eigenvectors),通常用SVD分解,得到 [U, S, V]
  4. 从U中选取前k个最大特征值对应的特征向量,组成一个新的特征向量矩阵U_{reduce}
  5. 对所有样本,求的新的降维后的样本,z^{(i)} = U_{reduce}^T * x^{(i)}


SVM 支持向量机

参考 mit 课程:https://web.mit.edu/6.034/wwwbob/svm.pdf

SVM 是机器学习领域非常流行的一个分类算法。他的前身其实就是感知机,想了解感知机原理的可以简单看我之前写的文章

传统感知机是有很多局限性的问题的,比如解决不了线性不可分的问题,比如泛化能力不强因为你可以找到N个解,但是不知道哪一个是最好的。SVM 就能很好的解决这些问题。

1. 支持向量

搞清楚什么是支持向量是了解SVM的前提。但是这里只能抽象的讲解,了解后面的内容,会加深你对支持向量的理解

在一个分类问题里,我们可能会有多个解,比如:

但是取哪个是最好的呢?直觉告诉我们,选能让样本分割的最远的超平面,这个就是 SVM 的做法,最大间隔化(后面会讲形式化的定义和推导)。SVM使用两个间隔最大的超平面,将所有数据完美分割在两边。

所以数学上,只需要一个超平面 + 间隔,就能形成一个决策边界,那些依附在决策边界上的点,就叫支持向量。为什么要给这些点起一个专有的名词?因为定义这个超平面只需要用到这些点,而其他远距离的点都是多余的。所以通常在一个2维空间上,最少只需要3个点,就能定义这个超平面


理解感知机模型

感知机是一种很传统和经典的分类算法了,现在机器学习的书基本上也很少详细讲了,大多还会简单介绍一下。看 ng 的机器学习课程,在讲 SVM 支持向量机的时候,从逻辑回归的代价函数直接修改到SVM的代价函数,实在难以理解,逻辑回归和SVM之间的关系和区别,还得好好想想

感知机模型有自身的局限性,它只能做线性分类。如果数据不是线性可分的,那还真没办法。但是了解感知机模型,对后面学习SVM很有帮助的

1. 感知机模型

感知机只能用来做线性分类,所谓线性分类是说,假设我们有一堆样本数据,我们必须找到一条线或者一个超平面,能把这堆样本划分到线的两边

preview

用数学的语言来说,如果我们有m个样本,每个样本对应于n维特征和一个二元类别输出,如下:


深度学习中的交叉验证

第一次看 ng 斯坦福机器学习这门课程的时候,就没看懂交叉验证是怎么回事。

1. 模型选择和交叉验证集

参考视频: 10 – 3 – Model Selection and Train_Validation_Test Sets (12 min).mkv

ng 在讲交叉验证的时候,是这么举例的

假设我们要在10个不同次数的二项式模型之间进行选择:

显然越高次数的多项式模型越能够适应我们的训练数据集,但是适应训练数据集并不代表着能推广至一般情况,我们应该选择一个更能适应一般情况的模型。我们需要使用交叉验证集来帮助选择模型。 即:使用60%的数据作为训练集,使用 20%的数据作为交叉验证集,使用20%的数据作为测试集