Machine Learning
  • Introduction
  • man
  • Linear model
    • Linear Regression
    • Generalized Linear Models
    • Nonlinear regression
  • bayes
    • bayesian network
    • Variational Bayesian inference
    • Gaussian Process Regression
  • Logistic Regression
    • L1 regularization
    • L2 regularization
    • softmax
    • Overflow and Underflow
  • SVM
    • C-SVM
    • C-SVM求解
  • EM
    • GMM
  • Maximum Entropy
    • IIS
  • HMM
    • viterbi algorithm
  • CRF
  • Random Forest
    • bagging
    • random forest
  • boosting
    • catboost
    • gradient boosting
    • Newton Boosting
    • online boosting
    • gcForest
    • Mixture models
    • XGBoost
    • lightGBM
    • SecureBoost
  • LDA
  • rank
    • RankNet
    • LambdaRank
    • SimRank
  • Factorization Machine
    • Field-aware Factorization Machine
    • xdeepFM
  • Clustering
    • BIRCH
    • Deep Embedding Clustering
  • Kalman filtering
  • word2vec
  • 关联规则挖掘
  • MATH-Mathematical Analysis
    • measure
  • MATH-probability
    • Variational Inference
    • Dirichlet分布
    • Gibbs Sampling
    • Maximum entropy probability distribution
    • Conjugate prior
    • Gaussian Process
    • Markov process
    • Poisson process
    • measure
    • Gumbel
  • MATH-Linear Algebra
    • SVD
    • SVD-推荐
    • PCA
    • Linear Discriminant Analysis
    • Nonnegative Matrix Factorization
  • MATH-Convex optimization
    • 梯度下降
    • 随机梯度下降
    • 牛顿法
    • L-BFGS
    • 最速下降法
    • 坐标下降法
    • OWL-QN
    • 对偶问题
    • 障碍函数法
    • 原对偶内点法
    • ISTA
    • ADMM
    • SAG
  • MATH-碎碎念
    • cost function
    • Learning Theory
    • sampling
    • Entropy
    • variational inference
    • basis function
    • Diffie–Hellman key exchange
    • wavelet transform
    • 图
    • Portfolio
    • 凯利公式
  • ML碎碎念
    • 特征
    • test
    • TF-IDF
    • population stability index
    • Shapley Values
  • 课件
    • xgboost算法演进
  • Time Series
  • PID
  • graph
    • SimRank
    • community detection
    • FRAUDAR
    • Anti-Trust Rank
    • Struc2Vec
    • graph theory
    • GNN
  • Anomaly Detection
    • Isolation Forest
    • Time Series
  • Dimensionality Reduction
    • Deep Embedded Clustering
  • Federated Learning
  • automl
  • Look-alike
  • KNN
  • causal inference
Powered by GitBook
On this page
  • 算法过程
  • 原理
  • code
  • Robust PCA

Was this helpful?

  1. MATH-Linear Algebra

PCA

PreviousSVD-推荐NextLinear Discriminant Analysis

Last updated 5 years ago

Was this helpful?

算法过程

假设原始数据是Xm×nX_{m\times n}Xm×n​,其中m表示数据大小,n表示维度大小。

  1. 将X中的数据进行零均值化,即每一列都减去其均值。

  2. 计算协方差矩阵C=1mXTXC=\frac{1}{m}X^T XC=m1​XTX

  3. 求出C的特征值和特征向量

  4. 将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P

  5. Y=XPY=XPY=XP就是降维到k维后的数据。

如何定义k? 方差百分比: ∑j=1kλj∑j=1nλj\frac {\sum_{j=1}^k \lambda_j} {\sum_{j=1}^n \lambda_j}∑j=1n​λj​∑j=1k​λj​​ 。λ\lambdaλ为特征值,从小到大排列。

原理

最大化方差法:

PCA 可以用来做降维,但通俗一点说,其本质应该是线性空间坐标系的转换,从原始的空间坐标系,转换到一个“合适的”的坐标系来表达,在这个坐标系中,主要信息都集中在了某几个坐标轴上,所以只保留这个“关键”的坐标系上的表达,就能很大程度approximate原信号。

所以用特征向量组成的基来表达样本。

投影后方差1N∑n=1N{u1Txn−u1Tx‾}2=u1TSu1\frac {1}{N} \sum_{n=1}^N \{u_1^T x_n - u_1^T \overline {x} \}^2 = u_1^T S u_1N1​∑n=1N​{u1T​xn​−u1T​x}2=u1T​Su1​

S就是你说的“去均值的原矩阵(去均值的原矩阵的协方差矩阵的特征向量作为列向量形成的矩阵)”。

因为 u有约束条件 u1Tu=1u_1^T u =1u1T​u=1 ,所以用乘子法:u1TSu1+λ(u1Tu)u_1^T S u_1 + \lambda (u_1^T u)u1T​Su1​+λ(u1T​u) ,对u1u_1u1​求导,得到 Su1=λu1Su_1=\lambda u_1Su1​=λu1​

待完善

code

import numpy as np
import matplotlib.pyplot as plt

def zeroMean(dataMat):        
    meanVal=np.mean(dataMat,axis=0)     #按列求均值,即求各个特征的均值  
    newData=dataMat-meanVal  
    return newData,meanVal  

def percentage2n(eigVals,percentage):  
    sortArray=np.sort(eigVals)   #升序  
    sortArray=sortArray[-1::-1]  #逆转,即降序  
    arraySum=sum(sortArray)  
    tmpSum=0  
    num=0
    for i in sortArray:
        tmpSum+=i 
        num+=1 
        if tmpSum>=arraySum*percentage: 
            return num 

def pca(dataMat,percentage=0.99):  
    newData,meanVal=zeroMean(dataMat)  
    covMat=np.cov(newData,rowvar=0)    #求协方差矩阵,return ndarray;若rowvar非0,一列代表一个样本,为0,一行代表一个样本  
    eigVals,eigVects=np.linalg.eig(np.mat(covMat))#求特征值和特征向量,特征向量是按列放的,即一列代表一个特征向量  
    n=percentage2n(eigVals,percentage)                 #要达到percent的方差百分比,需要前n个特征向量  
    eigValIndice=np.argsort(eigVals)            #对特征值从小到大排序  
    n_eigValIndice=eigValIndice[-1:-(n+1):-1]   #最大的n个特征值的下标  
    n_eigVect=eigVects[:,n_eigValIndice]        #最大的n个特征值对应的特征向量  
    lowDDataMat=newData*n_eigVect               #低维特征空间的数据  
    reconMat=(lowDDataMat*n_eigVect.T)+meanVal  #重构数据  
    return lowDDataMat,reconMat 

if __name__ == "__main__":
    p1 = plt.subplot(121)
    #XMat = np.array(pd.read_csv(datafile,sep="\t",header=-1)).astype(np.float)
    XMat = np.loadtxt("pca.txt",delimiter="\t",dtype="float")
    #XMat = lines[1:,:4].astype('float')
    #XMat = np.array(pd.read_csv(datafile,sep="\t",header=-1)).astype(np.float)
    p1.plot(XMat[:,0],XMat[:,1],'.')
    finalData, reconMat = pca(XMat)
    #p1.plot(recon_data[:,0],recon_data[:,1],'*')
    p1.plot(finalData[:,0],finalData[:,1],'*')
    plt.savefig("outfile.png")
    plt.show()

Kernel PCA

Robust PCA

核范数||A|| * 是指矩阵奇异值的和,英文称呼叫Nuclear Norm. MATLAB code s= svd(A); nulear_norm = sum(diag(s));

Kernel PCA 原理和演示

主成分分析(PCA)——基于python+numpy
主成分分析(PCA)原理总结
求pca的时候,能不能不用协方差矩阵?
PCA降维,特征值分解,SVD, KPCA
【机器学习算法实现】主成分分析(PCA)——基于python+numpy
PCA
http://zhanxw.com/blog/2011/02/kernel-pca-%E5%8E%9F%E7%90%86%E5%92%8C%E6%BC%94%E7%A4%BA/
最优化之Robust PCA
机器学习中的范数规则化之(一)L0、L1与L2范数
机器学习中的范数规则化之(二)核范数与规则项参数选择
基于TensorFlow理解三大降维技术:PCA、t-SNE 和自编码器
为什么核范数能凸近似矩阵的秩?为什么核范数是凸的?
Singular Value Thresholding (SVT) 奇异值阈值
PCA原理分析
主成分分析PCA算法:为什么去均值以后的高维矩阵乘以其协方差矩阵的特征向量矩阵就是“投影”
A Tutorial on Principal Component Analysis
PCA模型加先验
核PCA与PCA的精髓和核函数的映射实质
主成份分析(PCA)最详细和全面的诠释
本征向量、PCA和熵的基础教程
Sparse PCA 稀疏主成分分析
【机器学习算法系列之三】简述多种降维算法
协方差矩阵的几何解释
机器学习-异常检测算法(三):Principal Component Analysis
(概率)PCA和(变分)自编码器