机器学习-主成分分析PCA与奇异值分解SVD
维度: 对于数组和Series来说, 维度就是功能shape返回得结果, shape中返回几个数字, 就是几维
- 数组中每一张表, 都可以是一个特征矩阵干活一个DataFrame, 针对每一张表, 维度指得是样本得数量或特征的数量, 一般无特别说明, 指的是特征得数量.
- 对于图像来说, 维度就是图像中特征向量得数量
- 降维算法中得"降维",指的是降低特征矩阵中特征的数量, 降维的目的是为了让算法运算更快, 效果更好, 还有就是数据可视化
降维:
- 目的: 是即减少特征的数量, 又保留大部分的有效信息
- PCA使用的信息量衡量指标, 就是样本方差,又称可解释性方差, 方差越大, 特征所带的心想越多
- Var = 1/(n-1) ∑n(i=1)(xi - x')2
矩阵分解: 用来找出n个新特征向量, 让原有数据能够被压缩到少数特征上, 并且总信息量不损失太多的技术就是矩阵分解
PCA: 是将已存在的特征进行压缩, 降维完毕后的特征不是原来的特征矩阵中的任何一个特征, 而是通过某些方式组合起来的新特征, 通常来说, 在新特征生成之前, 我们无法知晓PCA都建立了怎样的新特征向量, 新特征矩阵生成之后, 也不具有可读性, 我们无法判断新特征矩阵的特征是从原数据中的什么特征组合而来, 新特征虽然带有原始数据的信息, 却已经不是元数据上代表的含义了, 因此以PCA为代表的降维算法是特征创造的一种.
PCA中的SVD:
- PCA中的奇异值分解可以不计算协方差矩阵等等结构复杂计算冗长的矩阵, 就直接求出新特征空间和降维后的特征矩阵.
PCA与特征选择的区别:
- 在生成新的矩阵之前, 我们无法知晓PCA建立了怎样的新特征向量, 新特征矩阵生成之后也不具有可读性
重要接口inverse_transform
- inverse_transform能够在不恢复原始数据的情况下, 将降维后的数据返回到原本的高维空间, 即是说能够实现"保证维度, 同时能够去掉方差很小特征所带的信息"利用inverse_transform的这个性质, 我们能够实现噪音过滤
PCA参数列表
n_components |
整数, 浮点数, None或输入字符串, 要保留的特征数量, 若不填写, 则保留的特征数量为最小维度min(x.shape) 输入"mle"并且参数svd_solver="full", 表示使用Minka.T.P的自动选择PCA维度法来选择维度, ,注意 输入"mle"参数后, svd_solver="auto"也会被理解为svd_solver="full" 在输入[0,1]之间的浮点数且svd_solver="full", 表示选择让"需要解释的总方差量"大于n_components指定的哪些特征 输入"None", 则保留的特征数量为数据最小维度-1, 即min(x.shape)-1 如果svd_solver="arpack", 则特征数必须严格徐爱玉最小维度min(x.shape) |
copy |
布尔值, 可不填, 默认True 如果为False, 则传递给fit的数据将被覆盖并且运行fit(x).transform(x)将不会产生预期的结,请改用fit_transform(x) |
whiten |
布尔值, 可不填, 默认是False 控制输入PCA的特征矩阵的白化, 白化是数据预处理的一种, 其目的是去掉特征与特征之间的相关性, 并将所有的特征的方差都归 一化, 当为True时, components(即奇异值分解中分解出矩阵V)中的向量会被乘以样本数量的平方根sqrt(n_samples), 然后,除以 奇异值(奇异矩阵∑的对角线上的元素∑i)以确保特征向量之间不相关并且每个特征都具有单位方差 白花将从变换后的信号中去除一些信息(比如特征之间的相对方差量纲), 但有时可以通过使数据遵循一些硬连线假设来提高下游估计器的预测精度 |
svd_solver |
输入字符串, 可选"auto", "full", "arpack", "randomized" 控制SVD奇异值分解的分解模式 输入"auto": 基于x,shape和n_components的默认策略来选择分解器, 如果输入数据的尺寸大于500X500q且要提取的特征数小于 数据最小维度min(x.shape)的80%, 就启用效率更高的"随机化"方法, 否则, 精确完整的SVD将被计算, 截断将会在矩阵被分解完成后有选择的发生 输入"full": 运行精确完整的SVD, 从scipy.linalg.svd中调用标准的LAPACK分解器, 并通过后处理来选择特征, 完整的SVD的结构为U∑VT 输入"arpack": 从scipy.sqarse.linalg.svds调用ARPACK分解器来运行截断奇异值分解(SVD truncated), 以在分解时将特征数量降到n_components 中输入的数值, 严格要求n_components的取值在区间[0, 数据量最小维度min()x.shape]之间, 截断后的SVD分解出的结构为:USV 输入"randomized", 通过Halko等人的随机方法进行随机SVD, 在"full"方法中, 分解器会根据原始数据和输入的n_components值去计算和寻找符合 需求的新特征向量, 但是在"randomized"的方法中, 分解器会先生成多个随机向量, 然后,去检测这些随机向量中是否由任何一个符合我们的分解需求, 如果符合, 就保留这个随机向量, 并基于这个随机向量来构建后续的空间向量, 这个方法已经被Halko等人的证明, 比"full"模式下计算快很多, 并且还能够 保证模型运行的效果 |
tol |
大于等于0的浮点数, 默认为0 当svd_solver为"arpack"的时候. 计算奇异值所需要的容差 |
iterated_power |
输入大于0的整数, 或者"auto", 默认"auto" 当svd_solver的时候"randomized", 计算的幂方法的迭代次数 |
random_state |
整数, sklearn中设定号的RandomState实例, 或None, 可不填, 默认时None 仅当参数svd_solver的值为"arpack"或"randomized"的时候菜有效 输入整数, random_state时由随机数生成的随机种子 输入RandomState实例, 则random_state时一个随机数生成器 输入None, 随机数生成器会时np.random模块中的一个RandomState实例 |
PCA属性列表
conmponents_ |
数组, 结构为(n_components, n_features) 新特征空间V中的特征向量空间的方向, 按explained_variance_的大小排序 |
explained_variance_ |
数组, 结构为(n_components) 每个所选特征的解释性方差 等于x的协方差矩阵的前n_components个最大特征值 |
explained_variance_ratio_ |
数组, 结构为(n_components) 每个所选择的特征的解释性方差占原数据方差综合的百分比 如果没有输入人格n_components,则保留所有的特征, 并且比率综合为1 |
singular_values_ |
数组, 结构为(n_components) 返回每个所选特征的奇异值, 奇异值等于低维空间中的n_components变量的2范式 |
mean_ |
数组, 结构为(n_components) 从训练集估计出每个特征的均值, 数值上等于x_mean(axis=0) |
n_components_ |
整数 估计的特征数量, 当参数n_components被设置为mle或0~1质检的浮点数时, (且svd_solver="full") 讲根据输入的特征矩阵估算降维后的特征的个数, 否则, 这个属性会等于输入参数n_components中的值, 如果参数n_components 中的值, 如果参数n_components被设置为None, 这个属性会返回min(x.shape), 即数据的最小维度 |
noise_variance |
浮点数 计算估计的数据协方差和分数样本, 等于特征估计矩阵的协方差矩阵的(min(x.shape) - n_components)的最小的特征值的平均值 |