主成分分析 PCA 与奇异值分解 SVD- 高维数据可视化以及参数 n_components
高维数据的可视化和 n_components
选择最好的 n_components:累积可解释方差贡献率曲线在数据量大于特征维度的时候,我们设置 n_components 为默认值,可以画出累计可解释方差贡献率曲线,以此选择最好的 n_components 的整数取值。累积可解释方差贡献率曲线是一条以降维后保留的特征个数为横坐标,降维后新特征矩阵捕捉到的可解释方差贡献率为纵坐标的曲线,能够帮助我们决定 n_components 最好的取值。
一般这条曲线会先急剧上升,然后平缓上升至 1,我们选择急剧到平缓转折点对应的数值作为 n_components 的值
最大似然估计自选超参数
最大似然估计选择超参数是让 PCA 自选超参数的方法。需要注意的是,该方法计算量较大,在高维度时会消耗大量时间
按信息量占比选超参数
n_components 后面加之间的浮点数,并且让数 svd_solver ='full',表示希望降维后的总解释性方差占比大于 n_components 指定的百分比。比如说,如果我们希望保留 97%的信息量,就可以输入 n_components=0.97,PCA 会自动选出能够让保留的信息量超过 97%的特征数量。
svd_solver
"auto":基于 X.shape 和 n_components 的默认策略来选择分解器。如果输入数据的尺寸大于 500x500 且要提取的特征数小于数据最小维度 min(X.shape)的 80%,就启用效率更高的”randomized“方法。否则,精确完整的 SVD 将被计算,截断将会在矩阵被分解完成后有选择地发生
"full":从 scipy.linalg.svd 中调用标准的 LAPACK 分解器来生成精确完整的 SVD,适合数据量比较适中,计算时间充足的情况,生成的精确完整的 SVD 的结构为:
"arpack":从 scipy.sparse.linalg.svds 调用 ARPACK 分解器来运行截断奇异值分解(SVD truncated),分解时就将特征数量降到 n_components 中输入的数值 k,可以加快运算速度,适合特征矩阵很大的时候,但一般用于特征矩阵为稀疏矩阵的情况,此过程包含一定的随机性。截断后的 SVD 分解出的结构为:
不太理解这里的 k 是降维后的维度,还是去掉奇异值为 0 后奇异值的数量
"randomized",通过 Halko 等人的随机方法进行随机 SVD。在"randomized"方法中,分解器会先生成多个随机向量,然后一一去检测这些随机向量中是否有任何一个符合我们的分解需求,如果符合,就保留这个随机向量,并基于这个随机向量来构建后续的向量空间。这个方法已经被 Halko 等人证明,比"full"模式下计算快很多,并且还能够保证模型运行效果。适合特征矩阵巨大,计算量庞大的情况。
random_state
而参数 random_state 在参数 svd_solver 的值为"arpack" or "randomized"的时候生效,可以控制这两种 SVD 模式中的随机模式。通常我们就选用”auto“,不必对这个参数纠结太多。
视频作者:菜菜TsaiTsai链接:【技术干货】菜菜的机器学习sklearn【全85集】Python进阶_哔哩哔哩_bilibili
版权声明: 本文为 InfoQ 作者【烧灯续昼2002】的原创文章。
原文链接:【http://xie.infoq.cn/article/f5458a9f5650b87c0bac39da0】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论