05-04 scikit-learn库之主成分分析

scikit-learn库之主成分分析

  PCA在scikit-leran库中的sklearn.decomposition包下,PCA即最普通的PCA,PCA也有很多变种,我们主要会讲解PCA,然后聊一聊KernelPCAIncremetalPCASparsePCAMiniBatchSparsePCA

  接下来将会讨论上述五者的区别,由于是从官方文档翻译而来,翻译会略有偏颇,有兴趣的也可以去scikit-learn官方文档查看https://scikit-learn.org/stable/modules/classes.html#module-sklearn.decomposition

在这里插入图片描述

PCA

使用场景

  PCA是PCA系列降维算法中最原始的降维方法,因为原始,所以它一般是我们首选的,如果感觉原始的PCA可能无法解决我们的问题,我们可以尝试使用其他的PCA系列的降维算法。

代码

import numpy as np
from sklearn.decomposition import PCA

X = np.array([[-1, -1, 2], [-2, -1, 1], [-3, -2, 3],
              [1, 1, 2], [2, 1, 2], [3, 2, 3]])
pca = PCA(n_components=2)
pca.fit(X)
PCA(copy=True, iterated_power='auto', n_components=2, random_state=None,
  svd_solver='auto', tol=0.0, whiten=False)
print(pca.explained_variance_ratio_)
[0.92991028 0.06363895]
print(pca.singular_values_)
[6.311193   1.65102037]
pca = PCA(n_components=2, svd_solver='full')
pca.fit(X)
PCA(copy=True, iterated_power='auto', n_components=2, random_state=None,
  svd_solver='full', tol=0.0, whiten=False)
print(pca.explained_variance_ratio_)
[0.92991028 0.06363895]
print(pca.singular_values_)
[6.311193   1.65102037]
pca = PCA(n_components=1, svd_solver='arpack')
pca.fit(X)
PCA(copy=True, iterated_power='auto', n_components=1, random_state=None,
  svd_solver='arpack', tol=0.0, whiten=False)
print(pca.explained_variance_ratio_)
[0.92991028]
print(pca.singular_values_)
[6.311193]

参数

  • **n_components:**特征维度数目,float类型或str类型。该参数可以用来控制降维到的维度数。
    • 设置一个大于等于1且小于样本特征的整数。
    • 设置 ( 0 , 1 ] (0,1] (0,1]内的数,指定主成分方差和所占的最小比例阈值。
    • 设置为’mle’,即由模型通过MLE算法根据特征的方差分布情况自己选择。
  • **copy:**bool类型。如果为True,在传递给fit()方法的数据上降维,如果为False,传递给fit()方法的数据将会被覆盖,即在原来的数据上进行降维计算。默认为True。
  • **whiten:**白化,bool类型。判断是否白化,白化就是对降维后的数据归一化,让方差都为1。一般不推荐白化,如果PCA降维后需要进行数据处理,可以考虑白化。默认为False。
  • **svd_solver:**奇异值分解方法,str类型。指定奇异值分解SVD的方法,一般PCA库都是基于SVD实现的。
    • ‘auto’:PCA自动权衡下面三种实现方式。
    • ‘full’:传统的SVD,使用scipy库实现。
    • ‘arpack’:适用于数据量大,数据维度多,同时主成分数目比例较低的PCA降维,使用scipy库实现。
    • ‘randomized’:适用于数据量大,数据维度多,同时主成分数目比例较低的PCA降维,使用scikit-learn实现。
  • **tol:**停止求解的标准,float类型。当svd_solver='arpack’停止算法的奇异值阈值。默认为0。
  • **iterated_power:**int类型或’auto’。当svd_solver=‘randomized’时计算幂方法的迭代次数。默认为’auto’。
  • **random_state:**随机数种子,int类型。使用后可以保证随机数不会随着时间的变化而变化。默认为None。

属性

  • **components_:**array类型。返回具有最大方差的成分。
  • **explained_variance_:**array类型。降维后的各主成分的方差值,主成分方差值越大,则说明这个主成分越重要
  • **explained_variance_ratio_:**array类型。降维后的各主成分的方差值占总方差值的比例,主成分所占比例越大,则说明这个主成分越重要。
  • **singular_values_:**array类型。返回每个成分对应的奇异值。
  • **mean_:**array类型。每个值的经验均值。
  • **n_components_:**int类型。返回保留的成分个数。
  • **noise_variance_:**float类型。返回噪声的协方差。

在这里插入图片描述

方法

  • **fit(X,y):**把数据放入模型中训练模型。
  • **fit_transform(X,[,y])all:**训练模型同时返回降维后的数据。
  • **get_covariance():**计算数据的协方差。
  • **get_params([deep]):**返回模型的参数,可以用于Pipeline中。
  • **get_precision():**计算数据的精确度矩阵。
  • **inverse_transform:**将降维后的数据转换成原始数据,但可能不会完全一样,会有些许差别。
  • **score(X,y):**基于报告决定系数 R 2 R^2 R2评估模型。
  • **score_samples:**返回每个样本的对数似然。
  • **set_prams(**params):**创建模型参数。
  • **transform(X):**对于训练好的数据降维。

KernelPCA

  KernelPCA模型类似于非线性支持向量机,使用核技巧处理非线性数据的降维,主要是选择合适的核函数。

IncrementalPCA

  IncrementalPCA模型主要是为了解决计算机内存限制问题。工业上样本量和维度都是非常大的,如果直接拟合数据,机器性能一般都无法支撑。IncrementalPCA则会将数据分成多个batch,然后对每个batch依次递增调用partial_fit函数对样本降维。

SparsePCA

  SparsePCA模型相较于普通的PCA区别在于使用了L1正则化,即对非主成分的影响降为0,避免了噪声对降维的影响。

MiniBatchSparsePCA

  MiniBatchSparsePCA模型类似于SparsePCA,不同之处在于MiniBatchSparsePCA模型通过使用一部分样本特征和给定的迭代次数进行降维,以此来解决特征分解过慢的问题。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值