python实现主成分分析法降维(PCA)

一、主成分分析(PCA)

  • 原理与步骤
    主成分分析是降维的重要方法,基本过程为:去除平均值(将数据统一在坐标原点,利于计算)->计算协方差矩阵->计算协方差矩阵的特征值和特征向量->将特征值从大到小排序->保留最上面的N个特征向量->将数据转换到上述N个特征向量构建的新空间中。

  • 易混点明晰
    需要明确的是,提取的主成分与原来的特征变量都不相同,每个主成分都是原来所有特征变量的一种组合方式,多个主成分就是多个组合方式。

  • 局限性
    由主成分的原理可知其局限性有:
    (1)成分的实际意义难解释。当原始特征变量数量较多时,每个主成分是实际意义解释要结合这些原始特征变量,故解释和计算变得较为复杂。
    (2)适用于线性降维,非线性降维时不适用。PCA方法只需要对协方差矩阵XX^T 进行特征值分解,得到的特征值和特征向量即是变换矩阵w的解和改主成分所解释的方差量,这样的降维方法是线性的降维方法,即从高维空间到低维空间的函数映射是线性的。

  • python 代码

import sklearn.decomposition
clf_pca = sklearn.decomposition.PCA(n_components=None, copy=True, whiten=False, svd_solver='auto',tol=0.0, iterated_power='auto', random_state=None)
  • PCA模型中参数的解释
  1. n_components:主成分个数
    【default】n_components = None = min(n_samples, n_features) - 1
    【选项】:None | (int)
  2. copy:是否复制数据,不复制(False)则覆盖原有数据
    【default】copy = True
    【选项】:True | False
  3. whiten:白噪化处理
    【default】whiten=False
    【选项】:False | bool , optional
    False:乘以n个样本的平方根,然后除以奇异值
    bool
    optional
  4. svd_solver:奇异值分解器
    【default】svd_solver=‘auto’
    【选项】:str{‘auto’ | ‘full’ | ‘arpack’ | ‘randomized’} #要加单引号
    ’auto’:根据数据量自动选择 ‘full’ | ‘arpack’ | ‘randomized’
    ··········if 数据 > 500*500且提取数据解释度低于80% ,使用‘randomized’模式
    ··········else 其他情况则计算精准的SVD值
    ’full’:run exact full SVD calling the standard LAPACK solver via scipy.linalg.svd and select the components by postprocessing
    ’arpack’:run SVD truncated to n_components calling ARPACK solver via scipy.sparse.linalg.svds. It requires strictly 0 < n_components < min(X.shape)
    ’randomized’:采用Halko等人的方法进行随机化SVD
  5. tol:当svd_solver为’arpack’时,容差的设定
    “Tolerance for singular values computed by svd_solver == ‘arpack’.”
    【default】tol=0.0
    【选项】(float)
  6. iterated_power:当svd_solver为’randomized’时,迭代次数的设定
    【default】iterated_power=‘auto’
    【选项】 ‘auto’ | int >= 0
  7. random_state:当svd_solver为‘arpack’ 或 ‘randomized’时,生成随机数的参数设定
    【default】random_state=None
    【选项】:int | RandomState instance | None , optional
    int:根据种子生成随机数
    RandomState instance:通过随机数发生器生成随机数
    None:通过np.random生成随机数
  • PCA下相关模型用法与解释
clf_pca.attributes()
  1. components_:array, shape (n_components, n_features)
# 特征空间主轴,解释度最大变量的方向,即特征根最大的特征向量方向
clf_pca.components_()
  1. explained_variance_:array, shape (n_components,)

你可能感兴趣的:(统计分析,python数据分析)