PCA不进行分类的动作,而只做做数据预处理,将样本变换到一个容易分类(向最大化方差的方向,principal component axes,投影)的更低维的新的特征空间中。Kernel PCA比PCA多了一步,也即先升维(RBF包括多项式核均是升高到无穷维)再进行投影的动作,因为有些非线性可分的数据集只有在升维的视角下才线性可分。
##PCA
- 均值化的数据:
∑ i x i = 0 \sum_i\mathrm{x}_i=0 i∑xi=0
# python
>>> X-np.mean(X, 0)
# 一个二维矩阵减去一维向量?对,
# 这里用到的技术是numpy中broadcasting(广播机制)
-
样本协方差矩阵(sample-covariance matrix C C C)
C = 1 N ∑ i x i x i T = 1 N X X T C=\frac1N\sum_i\mathrm{x}_i\mathrm{x}_i^T=\frac1NXX^T C=N1i∑xixiT=N1XXT
其中, X X X 的每一列表示一个样本(特征向量) -
特征分解
C = U Λ U T = ∑ α λ α u α u α T C=U\Lambda U^T=\sum_\alpha \lambda_\alpha\mathbf{u}_\alpha\mathbf{u}_\alpha^T C=UΛUT=α∑λαuαuαT -
projection or transform
y i = U k T x i \mathrm{y}_i=U_k^T\mathrm{x}_i yi=UkTxi
1 N ∑ i y i y i T = 1 N ∑ i U k T x i x i T U k = U k T ( 1 N ∑ i x i x i T ) U k = U k T C U k = U k T U Λ U U k T = Λ k \frac1N\sum_i\mathrm{y}_i\mathrm{y}_i^T=\frac1N\sum_iU_k^T\mathrm{x}_i\mathrm{x}_i^TU_k=U_k^T(\frac1N\sum_i\mathrm{x}_i\mathrm{x}_i^T)U_k=U_k^TCU_k=U_k^TU\Lambda UU_k^T=\Lambda_k N1i∑yiyiT=N1i∑U