前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >主成分分析(Principal Component Analysis,PCA)

主成分分析(Principal Component Analysis,PCA)

作者头像
Michael阿明
发布2020-07-13 12:13:49
8320
发布2020-07-13 12:13:49
举报
  • 主成分分析(Principal Component Analysis,PCA)是一种常用的无监督学习方法
  • 利用正交变换把由线性相关变量表示的观测数据 转换为 少数几个由线性无关变量表示的数据,线性无关的变量 称为 主成分
  • 主成分的个数通常小于原始变量的个数,所以PCA属于降维方法
  • 主要用于发现数据中的基本结构,即数据中变量之间的关系,是数据分析的有力工具,也用于其他机器学习方法的前处理
  • PCA属于多元统计分析的经典方法

1. 总体主成分分析

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

主成分分析 的主要目的是降维,所以一般选择 k(

k\ll m

)个主成分(线性无关变量)来代替m个原有变量(线性相关变量),使问题得以简化,并能保留原有变量的大部分信息(原有变量的方差)。

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

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

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

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

定义:

假设

\pmb x

m

维随机变量,均值为

\mu

,协方差矩阵为

\Sigma

随机变量

\pmb x

m

维随机变量

\pmb y

的线性变换

y_i = \alpha_i^T \pmb x = \sum\limits_{k=1}^m \alpha_{ki}x_k, \quad i=1,2,...,m

其中

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

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

\alpha_i^T\alpha_i = 1, i = 1, 2,...,m
cov (y_i,y_j) = 0(i \neq j)
y_1

\pmb x

的所有线性变换中方差最大的

y_2

是与

y_1

不相关的

\pmb x

的所有线性变换中方差最大的,以此类推,

y_1,y_2,...,y_m

称为第一主成分…第

m

主成分


假设

\pmb x

m

维随机变量,其协方差矩阵

\Sigma

的特征值分别是

\lambda_1 \ge \lambda_2 \ge ... \ge \lambda_m \ge 0

,特征值对应的单位特征向量分别是

\alpha_1,\alpha_2,...,\alpha_m

,则

\pmb x

的第

i

主成分可写作:

y_i = \alpha_i^T \pmb x = \sum\limits_{k=1}^m \alpha_{ki}x_k, \quad i=1,2,...,m

并且,

\pmb x

的第

i

主成分的方差是协方差矩阵

\Sigma

的第

i

特征值,即:

var (y_i) = \alpha_i^T\Sigma\alpha_i = \lambda_i

主成分性质:

  • 主成分
\pmb y

协方差矩阵是对角矩阵

cov(\pmb y) = \Lambda = diag(\lambda_1,\lambda_2,...,\lambda_m)
  • 主成分
\pmb y

方差之和等于随机变量

\pmb x

方差之和

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

其中

\sigma_{ii}

x_i

的方差,即协方差矩阵

\Sigma

的对角线元素

  • 主成分
y_k

与变量

x_i

的 相关系数

\rho(y_k,x_i)

称为因子负荷量(factor loading),它表示第

k

个主成分

y_k

与变量

x_i

的相关关系,即

y_k

x_i

贡献程度

\rho(y_k, x_i) = \frac{\sqrt{\lambda_k}\alpha_{ik}}{\sqrt{\sigma_{ii}}},k,i=1,2,...,m

2. 样本主成分分析

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

给定样本矩阵

X
X

的样本协方差矩阵

`$S = s_{ij}{m \times n}, \quad s{ij} = \frac{1}{n-1}\sum\limits{k=1}^m(x{ik}-\bar xi)(x{jk}-\bar x_j)\

i = 1,2,...,m,\quad j = 1,2,...,m, 其中 \bar xi = \frac{1}{n}\sum\limits{k=1}^n x_{ik}$`

给定样本

X

,考虑

\pmb x

\pmb y

的线性变换

\pmb y = A^T \pmb x

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

  • 样本第一主成分
y_1 = \alpha_1^T \pmb x

是在

\alpha_1^T\alpha_1 = 1

条件下,使得

\alpha_1^T \pmb x_j (j=1,2,...,n)

的样本方差

\alpha_1^TS\alpha_1

最大的

\pmb x

的线性变换,以此类推。

  • 样本第
i

主成分

y_i = \alpha_i^T \pmb x

是在

\alpha_i^T\alpha_i = 1

\alpha_i^T\pmb x_j

\alpha_k^T \pmb x_j \quad(k < i,j = 1,2,...,n)

的样本协方差

\alpha_k^TS\alpha_i=0

条件下,使得

\alpha_i^T \pmb x_j (j=1,2,...,n)

的样本方差

\alpha_i^TS\alpha_i

最大的

\pmb x

的线性变换


3. 主成分分析方法

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

  • 针对
m \times n

样本矩阵

X

,求样本相关矩阵

R = \frac{1}{n-1}XX^T
  • 再求样本相关矩阵
k

特征值和对应单位特征向量,构造正交矩阵

V = (v_1,v_2,...,v_k)
V

的每一列对应一个主成分,得到

k \times n

样本主成分矩阵

Y=V^TX

3.2 矩阵奇异值分解算法

  • 针对
m \times n

样本矩阵

X

X' = \frac{1}{\sqrt{n-1}}X^T
  • 对矩阵
X

进行截断奇异值分解,保留

k

奇异值、奇异向量

得到

X' = USV^T
V

的每一列对应一个主成分,得到

k \times n

样本主成分矩阵

Y=V^TX

4. sklearn.decomposition.PCA

sklearn.decomposition.PCA 官网介绍

代码语言:javascript
复制
class sklearn.decomposition.PCA(n_components=None, copy=True,
whiten=False, svd_solver='auto', tol=0.0, 
iterated_power='auto', random_state=None)

参数:

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

属性:

components_:主成分

explained_variance_:各特征方差

explained_variance_ratio_:各特征方差百分比

singular_values_:主成分的奇异值

n_components_:保留特征个数

方法:

代码语言:javascript
复制
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_)
代码语言:javascript
复制
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
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/04/26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 总体主成分分析
  • 2. 样本主成分分析
  • 3. 主成分分析方法
    • 3.1 相关矩阵的特征值分解算法
      • 3.2 矩阵奇异值分解算法
      • 4. sklearn.decomposition.PCA
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档