基于PCA的线性监督分类的故障诊断方法
基于PCA的线性监督分类的故障诊断方法
关于PCA的原理,个人推荐看这篇博客:http://blog.codinglabs.org/articles/pca-tutorial.html
数据预处理
训练集样本(只有正样本)为 X n ∗ m { {\rm{X}}_{ {\rm{n*m}}}} Xn∗m (需要列均值为零,采用z-score归一化即可),每行一个样本,样本数目n,特征维度m。
计算m个特征之间的协方差矩阵(也有文献是除以n):
∑ m ∗ m = 1 n − 1 X T X {\sum _{
{\rm{m*m}}}}{\rm{ = }}\frac{1}{
{
{\rm{n - 1}}}}{
{\rm{X}}^{\rm{T}}}{\rm{X}} m∗m∑=n−11XTX
求协方差矩阵的特征值 λ i \lambda_i λi与特征向量 p i p_i pi,并将特征值按从小达到顺序排列:
λ 1 ≥ λ 2 ≥ ⋯ ≥ λ k ≥ λ k + 1 ≥ ⋯ ≥ λ m {\lambda _{\rm{1}}} \ge {\lambda _{\rm{2}}} \ge \cdots \ge {\lambda _k} \ge {\lambda _{k + 1}} \ge \cdots \ge {\lambda _m} λ1≥λ2≥⋯≥λk≥λk+1≥⋯≥λm
将特征向量按照对应的特征值重新排列。假设排序后为:
V m ∗ m = [ p 1 , p 2 , ⋯ , p m ] {
{\rm{V}}_{
{\rm{m*m}}}}{\rm{ = [}}{p_1},{p_2}, \cdots ,{p_m}{\rm{]}} Vm∗m=[p1,p2,⋯,pm]
按照某个原则(如特征值累计和的占比),选择前k个特征值进行PCA降维。令前k个从大到小的特征值构成对角阵 S k ∗ k S_{k*k} Sk∗k,k个对应的特征向量组成降维矩阵 P m ∗ k P_{m*k} Pm∗k。即:
S k ∗ k = d i a g ( λ 1 , λ 2 , ⋯ , λ k ) {
{\rm{S}}_{
{\rm{k*k}}}}{\rm{ = diag(}}{\lambda _{\rm{1}}}{\rm{,}}{\lambda _{\rm{2}}}{\rm{,}} \cdots ,{\lambda _k}) Sk