数据预处理在众多深度学习算法中都起着重要作用,实际情况中,将数据做归一化和白化处理后,很多算法能够发挥最佳效果。当我们开始处理数据时,首先要做的事是观察数据并获知其特性。本部分将介绍一些通用的技术,在实际中应该针对具体数据选择合适的预处理技术。例如一种标准的预处理方法是对每一个数据点都减去它的均值(也被称为移除直流分量,局部均值消减,消减归一化),这一方法对诸如自然图像这类数据是有效的,但对非平稳的数据则不然。
数据归一化
简单缩放
在简单缩放中,我们的目的是通过对数据的每一个维度的值进行重新调节(这些维度可能是相互独立的),使得最终的数据向量落在 [0,1]或[?1,1] 的区间内(根据数据情况而定)。
逐样本均值消减
如果你的数据是平稳的(即数据每一个维度的统计都服从相同分布),那么你可以考虑在每个样本上减去数据的统计平均值(逐样本计算)。
特征标准化
特征标准化指的是(独立地)使得数据的每一个维度具有零均值和单位方差。这是归一化中最常见的方法并被广泛地使用(例如,在使用支持向量机(SVM)时,特征标准化常被建议用作预处理的一部分)。在实际应用中,特征标准化的具体做法是:首先计算每一个维度上数据的均值(使用全体数据计算),之后在每一个维度上都减去该均值。下一步便是在数据的每一维度上除以该维度上数据的标准差。
$$(x_1,y_1)\rightarrow(\frac{x_1-\mu_x}{\sigma_x},\frac{y_1-\mu_y}{\sigma_y})$$
降维
必要性
- 多重共线性;自变量之间相互关联,具有较强的线性关系。多重共线性会导致解空间的不稳定,从而可能导致结果的不连贯;
- 高维空间本身具有稀疏性。一维正态分布有68%的值落于正负标准差之间,而在十维空间上只有0.02%;
- 过多的变量会妨碍查找规律的建立;
- 仅在变量层面上分析可能会忽略变量之间的潜在联系。例如几个预测变量可能落入仅反映数据某一方面特征的一个组内。
方法
主成分分析(PCA),因子分析,用户自定义复合,LDA等。
主成分分析PCA
PCA(Principal Component Analysis)的目标是发现特征之间的线性关系,检测并且尽量去除这种线性关系。当然,大部分时候,特征之间不存在非常明显的线性关系,只是具有强相关性。例如在二维空间中,x-y坐标分解为u1-u2坐标,其中u1轴反映了特征的主要变化,u2特征变化较小,我们可以把u2当作噪声而不去考虑它。PCA的主要任务就是发现u1和u2。
PCA不仅仅是对高维数据进行降维,更重要的是经过降维去除了噪声,发现了数据中的模式。
从方法上讲,PCA就是求解特征值及特征向量。最大的k个特征值对应的特征向量构成一组新的基,让原特征对新的基投影得到降维后的新特征。
物理意义,首先要理解矩阵可以看做一种空间变换。设矩阵M是n*m维的,若m=n,则变换后空间维数没变;m<n则进行进行了降维。具体变化的大小由特征值反应,若特征值很小,无论多大的数在这一维上投影都会变小很多,忽略不计。
预备知识
样本X与样本Y的协方差
$$Cov(X,Y)=\frac{\mathop{\sum}_{i=1}^n(X_i-\overline{X})(Y_i-\overline{Y})}{(n-1)}$$
协方差为正说明X与Y是正相关关系,为负是负相关关系,为0说明X与Y独立。
$Cov(X,X)$就是X的方差。
当样本为n维数据,他们的协方差实际上是协方差矩阵(对称方阵),方阵边长为$C_n^2$。
若$AX=\gamma X$,则称$\gamma$是A的特征值,X是对应的特征向量。实际上可以这样理解:矩阵A作用在它的特征向量X上,仅仅使得X的长度发生了变化,缩放比例就是相应的特征值$\gamma$。
当A是n阶可逆矩阵时,A与P-1Ap相似,相似矩阵具有相同的特征值。
特别地,当A是对称矩阵时,A的奇异值等于A的特征值,存在正交矩阵$Q(Q^{-1}=Q^T)$,使得
$$Q^TAQ=\begin{pmatrix}\gamma_1& & & \\ &\gamma_2& & \\ & &\ddots& \\ & & &\gamma_n\end{pmatrix}$$
对A进行奇异值分解就能求出所有特征值及Q矩阵。
$A*Q=Q*D$ D是由特征值组成的对角阵,Q的列向量即为A的特征向量。
Jama包
Jama包是用于基本线性代数运算的java包,提供矩阵的cholesky分解、LUD分解、QR分解、奇异值分解,以及PCA中要用到的特征值分解,此外可以计算矩阵的乘除法、矩阵的范数和条件数、解线性方程组等。
PCA过程
- 特征标准化;
- 计算协方差矩阵C;
- 计算协方差矩阵C的特征值和特征向量;
- 选取新的特征的方式,也正好对应矩阵的几种物理意义:即旋转、舍弃及复原。
优缺点
PCA其实是最简单的降维方法之一了,很明显的劣势是它仅去除数据之间的线性相关性。对线性的改善往往通过kernel技术拓展到非线性的应用上。另外,PCA的这种降维不一定有助于分类,用于分类的降维方法之一就是LDA。从另一方面说,PCA是一种线性投影,保留了数据与数据之间的欧式距离,即原来欧式距离大的两点在降维后的空间中距离也应大(这样才好保证方差大)。而事实上数据有可能呈现某种流型结构,用PCA降维后数据将不能保持原有的流型结构。在这一方面常用的非线性降维方法是Locally linear embedding和Laplacian Eigenmaps。这些再以后的学习中再行探讨。