假如输入的训练集形状为
X
1
∈
R
n
1
×
m
X_{1}\in R^{n_{1} \times m}
X1∈Rn1×m
这里
n
1
n_{1}
n1为训练集样本数,
m
m
m为数据的原始维度。同理,测试集形状为
X
2
∈
R
n
2
×
m
X_{2} \in R^{n_{2}\times m}
X2∈Rn2×m
设我们需要的更加紧致的维度为
k
k
k,则需要以下的步骤:
- 对训练集做均值化,这里是指在每一个维度上计算均值,然后减去均值,即
a v e r a g e ( X 1 ) ∈ R n 1 average(X_{1}) \in R^{n_{1}} average(X1)∈Rn1
X 1 j = X 1 j − a v e r a g e ( X 1 ) , j = 1 , 2 , . . . , n 1 X_{1}^{j} = X_{1}^{j}-average(X_{1}) , j=1,2,...,n_{1} X1j=X1j−average(X1),j=1,2,...,n1 - 求协方差矩阵 C = X 1 T X 1 / n 1 ∈ R m × m C = X_{1}^{T}X_{1}/n_{1} \in R^{m\times m} C=X1TX1/n1∈Rm×m
- 对 C 做特征值分解,求出最大的k的特征值,以及对应的k个特征向量。按照降序的方式,把特征向量按列排成一个矩阵 P ∈ R m × k P \in R^{m\times k} P∈Rm×k
- 对训练集和测试集分别乘上P,得到降维后的数据,即
X 1 ′ = X 1 P ∈ R n 1 × k X_{1}^{'} = X_{1}P\in R^{n{1}\times k} X1′=X1P∈Rn1×k
X 2 ′ = X 2 P ∈ R n 1 × k X_{2}^{'} = X_{2}P\in R^{n{1}\times k} X2′=X2P∈Rn1×k
谨记:只能对训练集降维,把得到的降维矩阵保留,用于对测试集的降维。这是因为,测试集对我们来说,模型生成之前都是不可知的,所以不能使用任何关于测试集的信息。