ITPub博客

首页 > 应用开发 > Python > 主成分分析(PCA)

主成分分析(PCA)

原创 Python 作者:ckxllf 时间:2020-04-28 16:21:33 0 删除 编辑

  主成分分析(Principal Component Analysis,PCA)是一种常用的无监督学习方法

  利用正交变换把由线性相关变量表示的观测数据 转换为 少数几个由线性无关变量表示的数据,线性无关的变量 称为 主成分

  主成分的个数通常小于原始变量的个数,所以PCA属于降维方法

  主要用于发现数据中的基本结构,即数据中变量之间的关系,是数据分析的有力工具,也用于其他机器学习方法的前处理

  PCA属于多元统计分析的经典方法

  1. 总体主成分分析

  第一轴选取方差最大的轴 y1

  主成分分析 的主要目的是降维,所以一般选择 k( k≪mk\ll mk≪m)个主成分(线性无关变量)来代替m个原有变量(线性相关变量),使问题得以简化,并能保留原有变量的大部分信息(原有变量的方差)。

  在实际问题中,不同变量可能有不同的量纲,直接求主成分有时会产生不合理的结果。

  为了消除这个影响,常常对各个随机变量实施规范化,使其均值为0,方差为1。

  主成分分析的结果可以用于其他机器学习方法的输入。

  将样本点投影到以主成分为坐标轴的空间中,然后应用聚类算法,就可以对样本点进行聚类

  定义:

  假设 x\pmb xxxx 为 mmm 维随机变量,均值为 μ\muμ,协方差矩阵为 Σ\SigmaΣ

  随机变量 x\pmb xxxx 到 mmm 维随机变量 y\pmb yyyy 的线性变换

  yi=αiTx=∑k=1mαkixk,i=1,2,...,my_i = \alpha_i^T \pmb x = \sum\limits_{k=1}^m \alpha_{ki}x_k, \quad i=1,2,...,myi=αiTxxx=k=1∑mαkixk,i=1,2,...,m

  其中 αiT=(α1i,α2i,...,αmi)\alpha_i^T = (\alpha_{1i},\alpha_{2i},...,\alpha_{mi})αiT=(α1i,α2i,...,αmi)

  如果该线性变换满足以下条件,称之为总体主成分:

  αiTαi=1,i=1,2,...,m\alpha_i^T\alpha_i = 1, i = 1, 2,...,mαiTαi=1,i=1,2,...,m

  cov(yi,yj)=0(i≠j)cov (y_i,y_j) = 0(i \neq j)cov(yi,yj)=0(i=j)

  y1y_1y1 是 x\pmb xxxx 的所有线性变换中方差最大的,y2y_2y2 是与 y1y_1y1 不相关的 x\pmb xxxx 的所有线性变换中方差最大的,以此类推,y1,y2,...,ymy_1,y_2,...,y_my1,y2,...,ym 称为第一主成分…第 mmm 主成分

  假设 x\pmb xxxx 是 mmm 维随机变量,其协方差矩阵 Σ\SigmaΣ 的特征值分别是 λ1≥λ2≥...≥λm≥0\lambda_1 \ge \lambda_2 \ge ... \ge \lambda_m \ge 0λ1≥λ2≥...≥λm≥0,特征值对应的单位特征向量分别是 α1,α2,...,αm\alpha_1,\alpha_2,...,\alpha_mα1,α2,...,αm,则 x\pmb xxxx 的第 iii 主成分可写作:

  yi=αiTx=∑k=1mαkixk,i=1,2,...,my_i = \alpha_i^T \pmb x = \sum\limits_{k=1}^m \alpha_{ki}x_k, \quad i=1,2,...,myi=αiTxxx=k=1∑mαkixk,i=1,2,...,m

  并且,x\pmb xxxx 的第 iii 主成分的方差是协方差矩阵 Σ\SigmaΣ 的第 iii 个特征值,即:

  var(yi)=αiTΣαi=λivar (y_i) = \alpha_i^T\Sigma\alpha_i = \lambda_ivar(yi)=αiTΣαi=λi

  主成分性质:

  主成分 y\pmb yyyy 的协方差矩阵是对角矩阵 cov(y)=Λ=diag(λ1,λ2,...,λm)cov(\pmb y) = \Lambda = diag(\lambda_1,\lambda_2,...,\lambda_m)cov(yyy)=Λ=diag(λ1,λ2,...,λm)

  主成分 y\pmb yyyy 的方差之和等于随机变量 x\pmb xxxx 的方差之和

  ∑i=1mλi=∑i=1mσii\sum\limits_{i=1}^m \lambda_i = \sum\limits_{i=1}^m \sigma_{ii}i=1∑mλi=i=1∑mσii

  其中 σii\sigma_{ii}σii 是 xix_ixi 的方差,即协方差矩阵 Σ\SigmaΣ 的对角线元素

  主成分 yky_kyk 与变量 xix_ixi 的 相关系数 ρ(yk,xi)\rho(y_k,x_i)ρ(yk,xi) 称为因子负荷量(factor loading),它表示第 kkk 个主成分 yky_kyk 与变量 xix_ixi 的相关关系,即 yky_kyk 对 xix_ixi 的贡献程度

  ρ(yk,xi)=λkαikσii,k,i=1,2,...,m\rho(y_k, x_i) = \frac{\sqrt{\lambda_k}\alpha_{ik}}{\sqrt{\sigma_{ii}}},k,i=1,2,...,mρ(yk,xi)=σiiλkαik,k,i=1,2,...,m

  2. 样本主成分分析

  是基于样本协方差矩阵的主成分分析

  给定样本矩阵 XXX

  

在这里插入图片描述

  XXX 的样本协方差矩阵

  S=[sij]m×n,sij=1n−1∑k=1m(xik−xˉi)(xjk−xˉj)i=1,2,...,m,j=1,2,...,m,其中xˉi=1n∑k=1nxikS = [s_{ij}]_{m \times n}, \quad s_{ij} = \frac{1}{n-1}\sum\limits_{k=1}^m(x_{ik}-\bar x_i)(x_{jk}-\bar x_j)\\

  i = 1,2,...,m,\quad j = 1,2,...,m, 其中 \bar x_i = \frac{1}{n}\sum\limits_{k=1}^n x_{ik}S=[sij]m×n,sij=n−11k=1∑m(xik−xˉi)(xjk−xˉj)i=1,2,...,m,j=1,2,...,m,其中xˉi=n1k=1∑nxik

  给定样本 XXX,考虑 x\pmb xxxx 到 y\pmb yyyy 的线性变换 y=ATx\pmb y = A^T \pmb xyyy=ATxxx

  

在这里插入图片描述

  如果满足以下条件,称之为样本主成分:

  样本第一主成分 y1=α1Txy_1 = \alpha_1^T \pmb xy1=α1Txxx 是在 α1Tα1=1\alpha_1^T\alpha_1 = 1α1Tα1=1 条件下,使得 α1Txj(j=1,2,...,n)\alpha_1^T \pmb x_j (j=1,2,...,n)α1Txxxj(j=1,2,...,n) 的样本方差 α1TSα1\alpha_1^TS\alpha_1α1TSα1 最大的 x\pmb xxxx 的线性变换,以此类推。

  样本第 iii 主成分 yi=αiTxy_i = \alpha_i^T \pmb xyi=αiTxxx 是在 αiTαi=1\alpha_i^T\alpha_i = 1αiTαi=1 和 αiTxj\alpha_i^T\pmb x_jαiTxxxj 与 αkTxj(k

  3. 主成分分析方法

  3.1 相关矩阵的特征值分解算法

  针对 m×nm \times nm×n 样本矩阵 XXX ,求样本相关矩阵 R=1n−1XXTR = \frac{1}{n-1}XX^TR=n−11XXT

  再求样本相关矩阵的 kkk 个特征值和对应单位特征向量,构造正交矩阵

  V=(v1,v2,...,vk)V = (v_1,v_2,...,v_k)V=(v1,v2,...,vk)

  VVV 的每一列对应一个主成分,得到 k×nk \times nk×n 样本主成分矩阵 Y=VTXY=V^TXY=VTX

  3.2 矩阵奇异值分解算法

  针对 m×nm \times nm×n 样本矩阵 XXX ,X′=1n−1XTX' = \frac{1}{\sqrt{n-1}}X^TX′=n−11XT

  对矩阵 XXX 进行截断奇异值分解,保留 kkk 个奇异值、奇异向量

  得到 X′=USVTX' = USV^TX′=USVT

  VVV 的每一列对应一个主成分,得到 k×nk \times nk×n 样本主成分矩阵 Y=VTXY=V^TXY=VTX

  4. sklearn.decomposition.PCA

  sklearn.decomposition.PCA 官网介绍

  class sklearn.decomposition.PCA(n_components=None, copy=True,

  whiten=False, svd_solver='auto', tol=0.0,

  iterated_power='auto', random_state=None)

  参数: 郑州哪个人流医院好 http://www.csyhjlyy.com/

  n_components:保留主成分个数,没有赋值,特征个数不变

  属性:

  components_:主成分

  explained_variance_:各特征方差

  explained_variance_ratio_:各特征方差百分比

  singular_values_:主成分的奇异值

  n_components_:保留特征个数

  import numpy as np

  from sklearn.decomposition import PCA

  import matplotlib.pyplot as plt

  X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])

  plt.scatter(X[:, 0], X[:, 1])

  plt.show()

  for n in range(1, 3):

  print("PCA n_components = {}".format(n))

  pca = PCA(n_components=n)

  pca.fit(X)

  print("特征方差")

  print(pca.explained_variance_)

  print("特征方差占比")

  print(pca.explained_variance_ratio_)

  print("主成分奇异值")

  print(pca.singular_values_)

  print("主成分")

  print(pca.components_)

  print("主成分个数")

  print(pca.n_components_)

  PCA n_components = 1

  特征方差

  [7.93954312]

  特征方差占比

  [0.99244289]

  主成分奇异值

  [6.30061232]

  主成分

  [[-0.83849224 -0.54491354]]

  主成分个数

  1

  PCA n_components = 2

  特征方差

  [7.93954312 0.06045688]

  特征方差占比

  [0.99244289 0.00755711]

  主成分奇异值

  [6.30061232 0.54980396]

  主成分

  [[-0.83849224 -0.54491354]

  [ 0.54491354 -0.83849224]]

  主成分个数

  2


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69945560/viewspace-2689002/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-08-16

  • 博文量
    204
  • 访问量
    262640