降维就是一种对高维度特征数据预处理方法。降维是将高维度的数据保留下最重要的一些特征,去除噪声和不重要的特征,从而实现提升数据处理速度的目的。
在实际的生产和应用中,降维在一定的信息损失范围内,可以为我们节省大量的时间和成本。降维也成为应用非常广泛的数据预处理方法。
PCA(Principal Component Analysis),即主成分分析方法,是一种使用最广泛的数据降维算法。
设训练集数据如下:
$$T = egin{bmatrix}
X_{1} & X_{2} & X_{3} & X_{4} \
Y_{1} & Y_{1} & Y_{3} & Y_{4} \
Z_{1} & Z_{2} & Z_{3} & Z_{4}
end{bmatrix}$$
总体 $X,Y,Z$,该怎么解读这个 $3 imes 4$ 的矩阵呢?
1)每一列代表一个样本点,一个样本点内的每个特征分别来自不同的总体,$4$ 列代表训练集中有 $4$ 个样本点;
2)每一行的数据来自同一个总体,是对某一总体进行简单随机抽样的结果,$3$ 行代表有 $3$ 个维度/总体/特征,即一个样本点是由不同维度的数据构成的。
既然矩阵 $T$ 有几行代表几个维度,则 PCA 的目的就是:减少矩阵的行数。设 $C_{k imes 3},; k leq 3$,则变换后的数据集为
$$T^{'} = CT$$
上面举了一个简单的训练集的例子。
现在假设训练集为 $T_{m imes n}$,即有 $n$ 个样本点,每个样本点是 $m$ 维数据,现在找一个矩阵 $C_{k imes m}, ; k leq m$ 将训练集从 $m$ 维降到 $k$ 维:
$$T^{'}_{k imes} = C_{k imes m}T_{m imes n}$$
对矩阵 $C$ 按行分块,矩阵 $T$ 按列分块,即
$$C_{k imes m} = egin{bmatrix}
eta_{1} \
eta_{2} \
vdots \
eta_{k}
end{bmatrix} ;;;;;
T_{m imes n} = egin{bmatrix}
alpha_{1} & alpha_{2} & cdots & alpha_{n}
end{bmatrix}$$
对于矩阵 $T$,每一个向量 $alpha_{i}$ 就代表一个样本点,是在 $m$ 维空间的一个向量,现在要把这些向量变换到 $k$ 维空间,那么首先就需要
找到 $k$ 个线性无关的向量构成一组 $k$ 维空间的基。我们要找的矩阵 $C$ 就是由这组基构成,每一行向量 $eta_{i}$ 就是基中的一个向量,任意
两个行向量线性无关,矩阵 $C$ 行满秩,即 $r(C) = m$。考虑下面这个式子的含义:
$$eta_{i} cdot alpha_{i}$$
向量内积表示:$alpha_{i}$ 向 $eta_{i}$ 所在直线投影的长度和 $|eta_{i}|$ 的乘积。
向量 $alpha_{i}$ 和 $eta_{i}$ 所在的参考系是一样的,都是 $m$ 维空间中相同的一组基,现在我们想求各个样本点 $alpha_{i}$ 以 $eta_{i}, i = 1,2,...,k$ 作为参考系时的坐标。
当 $|eta_{i}| = 1$ 时,$eta_{i} cdot alpha_{i}$ 就是代表向量 $alpha_{i}$ 在基向量 $eta_{i}$ 上的分量或坐标。所以
$$Calpha_{i}$$
表示 $m$ 维空间中的样本点 $alpha_{i}$ 经过变换矩阵后在 $k$ 维空间中的坐标,基由 $eta_{i},i=1,2,...,k$ 构成。
那么怎么选取 $k$ 个向量作为基呢?
PCA 的工作就是从原始的 $m$ 维空间中顺序地找一组两两正交的单位向量,即 $eta_{i},i = 1,2,...,k$,因为它的参考系是在 $m$ 维空间,所以向量维度也是 $m$,
但向量组的秩是 $k$,即所在的空间的维度是 $k$,按下面的原则选择向量:
1)在 $m$ 维空间中选择一个基向量,所有数据变换为这个基上的坐标表示后,方差值最大,选出的向量记为 $eta_{1}$。
2)在与 $eta_{1}$ 正交的子空间中选择一个基向量,所有数据变换为这个基上的坐标表示后,方差值最大,选出的向量记为 $eta_{2}$。
3)$eta_{3}$ 就是在与 $eta_{1},eta_{2}$ 正交的子空间里面选,以此类推选出所有向量。
我们已经知道样本点 $alpha_{i}$ 在某个基向量 $x$ 下的坐标为:$(alpha_{i}, x) = alpha_{i}^{T}x$,于是我们有方差:
$$D(x) = frac{1}{n - 1}sum_{i=1}^{n} ig [ (alpha_{i} - ar{alpha}_{i})^{T}x ig ]^{2}$$
每个 $alpha_{i}$ 向量先减去它的均值向量 $ar{alpha}_{i}$,这样求出所有样本点在基向量 $x$ 上的分量后,可以直接求方差。因为常数的转置是本身,即
$$left [(alpha_{i} - ar{alpha}_{i})^{T}x ight ]^{T} = (alpha_{i} - ar{alpha}_{i})^{T}x$$
所以上面式子可以进一步转化为
$$D(x) = frac{1}{n - 1}sum_{i=1}^{n} left [(alpha_{i} - ar{alpha}_{i})^{T}x
ight ]^{T} left [(alpha_{i} - ar{alpha}_{i})^{T}x
ight ] \
= frac{1}{n - 1}sum_{i=1}^{n}x^{T}(alpha_{i} - ar{alpha}_{i})(alpha_{i} - ar{alpha}_{i})^{T}x \
= x^{T}left (frac{1}{n - 1} sum_{i=1}^{n}(alpha_{i} - ar{alpha}_{i})(alpha_{i} - ar{alpha}_{i})^{T}
ight )x$$
令
$$S_{m imes n} = egin{bmatrix}
alpha_{1} & alpha_{2} & cdots & alpha_{n}
end{bmatrix} -
egin{bmatrix}
ar{alpha}_{1} & ar{alpha}_{2} & cdots & ar{alpha}_{n}
end{bmatrix} =
egin{bmatrix}
alpha_{1}^{'} & alpha_{2}^{'} & cdots & alpha_{n}^{'}
end{bmatrix}$$
即 $S$ 是每个样本点去中心化后的数据集,因为
$$SS^{T} = egin{bmatrix}
alpha_{1}^{'} & alpha_{2}^{'} & cdots & alpha_{n}^{'}
end{bmatrix}egin{bmatrix}
alpha_{1}^{'T}\
alpha_{2}^{'T}\
vdots \
alpha_{n}^{'T}
end{bmatrix} = sum_{i = 1}^{n}alpha_{i}^{'}alpha_{i}^{'T}$$
则方差可以转化为
$$D(x) = x^{T}left (frac{1}{n - 1} sum_{i=1}^{n}(alpha_{i} - ar{alpha}_{i})(alpha_{i} - ar{alpha}_{i})^{T} ight )x = x^{T}left ( SS^{T} ight )x$$
考虑一下 $SS^{T}$ 有什么意义?现在将矩阵 $S$ 按行分块得
$$S = egin{bmatrix}
gamma_{1} \
gamma_{2} \
vdots \
gamma_{m}
end{bmatrix} ;;;;
S^{T} = egin{bmatrix}
gamma_{1}^{T} & gamma_{2}^{T} & cdots & gamma_{m}^{T}
end{bmatrix}
Rightarrow ; SS^{T} = egin{bmatrix}
gamma_{1}gamma_{1}^{T} & gamma_{1}gamma_{2}^{T} & cdots & gamma_{1}gamma_{m}^{T} \
gamma_{2}gamma_{1}^{T} & gamma_{2}gamma_{2}^{T} & cdots & gamma_{2}gamma_{m}^{T} \
vdots & vdots & ddots & vdots \
gamma_{m}gamma_{1}^{T} & gamma_{m}gamma_{2}^{T} & cdots & gamma_{m}gamma_{m}^{T}
end{bmatrix}$$
按行解读的话,每一行都是来自一个总体的简单随机样本,那么 $SS^{T}$ 就是这 $m$ 个总体的样本协方差矩阵。
我们要求的是能使方差最大的那个向量,先不管向量两两相互正交,可建立如下最优化问题来求解 $x$:
$$max ;; x^{T}left ( SS^{T}
ight )x \
s.t. ;;; x^{T}x = 1$$
必须有 $x^{T}x = 1$ 这个约束,不然向量直接取 $x = (infty, infty, ..., infty)$ 就可以了,显然这不是我们想要的解。
建立拉格朗日函数:
$$L(x, lambda) = x^{T}left ( SS^{T} ight )x + lambda left ( x^{T}x - 1 ight )$$
对列向量 $x$ 求偏导得(如果不知道怎么对向量求导,可先阅读博客):
$$frac{partial L}{partial x} = 2SS^{T}x - 2lambda x = 0 ;; Rightarrow ;; SS^{T}x = lambda x$$
惊讶得发现,偏导函数为 $0$ 的解就是协方差矩阵 $SS^{T}$ 的特征向量,将每一个特征向量代入 $L(x, lambda)$ 得
$$D(x) = x^{T}SS^{T}x = lambda x^{T}x = lambda$$
我们要找到最大方差就是协方差矩阵最大的特征值,最佳投影方向就是最大特征值所对应的特征向量,次佳就是第二大特征值对应的特征向量,
以此类推。然后将每个特征向量单位化,$C_{k imes m}$ 就是由前 $k$ 大的特征值所对应的单位特征向量构成。